P. 1
Manual Excel Avanzado

Manual Excel Avanzado

|Views: 188|Likes:
Publicado porwuatusi44

More info:

Published by: wuatusi44 on May 04, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/21/2012

pdf

text

original

Sections

  • Repartidos
  • Prácticos

MANUAL

EXCEL

AVANZADO

BIOS

Manual Excel Avanzado

BIOS

Módulo Funciones Avanzadas

Primer Ejemplo  Funciones simples

Dada la siguiente planilla:

Supongamos que la nota final se calculará basándonos en el promedio de notas que obtuvo cada
estudiante en sus parciales.
Por lo tanto aplicaremos la función promedio:

=PROMEDIO (B2:D2)

Recordemos que cualquier función que vayamos a aplicar debemos posicionarnos sobre la celda, y
comenzar con el signo = o en su defecto el signo +.

Por otro lado si hubiéramos querido tomar en cuenta solo dos de los parciales dentro del
promedio tendríamos que:

=PROMEDIO (B2; D2)

En el caso de que queramos tomar rangos discontinuos esto se aplicaría de la siguiente forma:

=PROMEDIO (B2:D2; H2:J2)

La planilla hasta ahora quedaría así:

Además en el caso de copiar esta fórmula, podríamos realizarlo mediante la opción clásica de dar
sobre el botón derecho sobre la celda, seleccionar la opción copiar, y luego marcar el rango (en
este caso de E3:E8) y darle pegar.

Mas allá de esta clásica opción también se podría copiar la formula de forma simple dando DOBLE
CLIC en el borde inferior derecho de la celda que contiene la formula a copiar.

En la siguiente columna, se hará un breve repaso de la formula condicional SI.
De acuerdo a esta formula deberá aplicarse:

=SI (prueba _ lógica; valor verdadero; valor falso)

En el caso de la planilla que manejamos anteriormente, esta quedaría de esta manera:

=SI (E2<5; “Reprobado”; “Aprobado”)

Si tuviéramos más de una función SI para establecer, recordar que siempre vamos a tener que
evaluar el conjunto de opciones de nuestro problema (conviene comenzar desde el nivel mas bajo)
y haremos una función menos que opciones de nuestro caso.

=SI (E2<5; “Reprobado”; SI (E2<=7; “Parcial”; “Aprobado”)

No debemos perder de vista que la función SI puede ser utilizada en este tipo de casos, y
concatenar hasta 7 funciones SI (tenemos este límite).

De la misma manera que anteriormente lo hicimos, podemos copiar la fórmula sin problemas. No
olvidemos que hasta ahora hemos dejado de lado el tema de Referencias Relativas y Absolutas ya
que no hizo falta fijar ninguna de las celdas a copiar.

Vamos a armar un cuadro adicional anexo a la planilla para implementar otras funciones:

En este cuadro calcularemos cuantos fueron los alumnos que obtuvieron como calificación
Aprobado, Parcial y Reprobado. A su vez calcularemos con respecto al total de alumnos, el
porcentaje que obtuvo cada calificación.

Lo haremos aplicando la función CONTAR.SI, de la siguiente manera:

=CONTAR.SI (F2:F8; “Aprobado”)

También podríamos haber escrito:

=CONTAR.SI (F2:F8; A12)

Veamos a su vez que si pensáramos en copiar esta fórmula debería quedar:

=CONTAR.SI($F$2:$F$8;A12)

La razón del signo $ es el hecho de fijar el rango F2:F8 ya que las calificaciones son fijas, mientras
que la celda A12 es relativa ya que cambiará de fila al copiar.

En la función CONTAR.SI tenemos en cuenta el rango a evaluar, y como segundo argumento
tenemos el criterio a tomar en cuenta para copiar.

Si aplicamos la funcion CONTAR, o también CONTARA, podremos saber cuantos alumnos
tendremos.

=CONTAR (E2:E8)

En este caso la función CONTAR aplica perfectamente para este caso puesto que las celdas que se
evaluan tienen contenido numérico.

En el caso de querer hacer un recuento por apellidos:

=CONTARA(A2:A8)

Aquí aplica perfectamente ya que esta función nos permite evaluar celdas no vacías.

Pasando a otro tema veremos a continuación alguna aplicación adicional de la función SI.

En la siguiente planilla se evaluará la calidad de los productos según su diámetro. Si el diámetro
está comprendido entre 10 y 20 su calidad será A, y de lo contrario será B.

Vemos que en este caso no solo se aplicó la función SI, sino que se combinó con la opción Y
(también podriamos haber aplicado la opción O), de la siguiente manera:

=SI(Y(opcion 1; opcion 2;…..); valor verdadero; valor falso)

=SI(O(opcion 1; opcion 2;…..); valor verdadero; valor falso)

En el caso de combinar con la opción Y, recordemos que estaríamos hablando de que si se
cumplen UNA Y CADA UNA DE LAS OPCIONES EN FORMA SIMULTANEA se aplicaría la opción
verdadera, y en el caso que no fuera así se aplica la opción falsa.

Mientras que en el caso de las opciones que damos mediante el O, con que una de las opciones
fuere verdadera, ya se aplicaría la opción del valor verdadero en la condición, y solo si no se
cumple ninguna de las opciones se aplicaría el valor falso.

Pasemos ahora a un nuevo ejemplo y continuamos en la aplicación de funciones:

En este caso aplicamos una función de búsqueda, que se denomina BUSCARV.
Recordemos que la forma de utilizar esta función de búsqueda es la que se demuestra a
continuación:

=BUSCARV(valor buscado; matriz; número de columna; [ordenamiento])

En el caso particular de la planilla

=BUSCARV(A13; A2:C8; 3; FALSO)

Vemos aquí que el valor buscado hace referencia a la celda donde el usuario cargará el dato en el
que se basará la búsqueda. Este dato no debe ser parte de la matriz de búsqueda (A2:C8) si no,
esto no tendría sentido en la búsqueda. Luego se carga la matriz, al hacer referencia a la matriz no
cargamos los títulos de la misma, solo el contenido (registros de la misma), luego cargamos la
referencia al número de columna que se va a extraer, en este caso la columna 3 ya que es la del
stock (columna con dato a extraer) y por último como argumento OPCIONAL el orden dentro de la
matriz, en este caso falso ya que la primera columna de la matriz no está ordenada en forma
ascendente.

Además en el caso del argumento opcional de ORDEN esto tambien es realmente significativo al
momento de aplicar la coincidencia en la búsqueda. Si este argumento es FALSO y la busqueda no
encuentra el dato preciso retorna un error. Por ejemplo:

En este caso al no encontrar el Artículo A5565 devuelve un error del tipo #N/A, o dato NO
DISPONIBLE (Not Available).

En cambio veamos que pasa cuando el argumento de orden lo cambiamos a VERDADERO.

En este caso, mas allá que el producto A5565 no se encontró de todas formas retornó el valor de
stock del artículo cuya coincidencia no era exacta, sino aproximada.
En muchos casos cuando la búsqueda no tiene porque ser exacta, este argumento VERDADERO
puede ayudarnos a encontrar el dato más cercano que coincida con nuestra búsqueda.

En cambio anteriormente cuando el argumento fue cambiado por FALSO, la búsqueda no nos
retornaba ningún valor ya que el dato no lo encontraba (con coincidencia exacta) en la matriz de
registros.

En otro ambito también sería bueno en una planilla controlar los ingresos de información, y es por
esto que vamos a introducir el tema VALIDACIÓN DE REGISTROS.

VALIDACIÓN DE DATOS

En el caso de la planilla que presentamos anteriormente, vamos a comenzar este tema de
validación tratando de que el usuario se limite a agregar artículos con STOCK entre 0 y 300, y no
pueda introducir un número menor a cero, ni mayor a 300.

Veamos como operar:

1. Pintamos las celdas de stock (celdas en las que vamos a dar la regla de validación)
2. Luego vamos al menú de datos – validación
3. Establecemos la regla de validación a operar
4. Opcionalmente definimos mensaje entrante
5. Opcionalmente definimos mensaje de error

Veamos el paso en cada pantalla:
En este primer paso marcamos las celdas de Stock y luego nos dirigimos al menú de Datos –
Validación

En el segundo paso definimos la regla de validación:
En este caso, definimos que lo que vamos a permitir es un número entero en dichas celdas y este
número deberá estar comprendido entre 0 y 300.

Tenemos otras opciones al desplegar el cuadro Permitir, que las usaremos en algunos ejemplos
posteriores.

Poniendo otro ejemplo:

En este caso nos posicionamos en la celda donde la persona va a realizar la búsqueda del stock de
determinado artículo (A13), y damos una regla de validación para que solo pueda ingresar códigos
de artículos existentes en la matriz de datos:

Veamos que sucede cuando aplicamos también el uso de la solapa de Mensaje Entrante

Esto resultará cuando la persona se posicione sobre la celda A13 (en la cual se determinó la regla
de validación).

Veamos como en la pantalla que se muestra a continuación, se muestra el mensaje entrante:

Aquí vemos el mensaje entrante al posicionarnos sobre la celda

Un comentario con respecto a esto, es el hecho de poder trabajar en las reglas de validación, tanto
con rangos dinámicos como también con rangos con un nombre determinado.

Veamos como funciona:

En este caso, al dar como origen de la lista la selección: =$A:$A  (referencia a la columna A)

La ventaja que se logra es el hecho de poder incorporar mas artículos con su respectivo stock a la
matriz  de esa manera integrarlos a la regla de validación de forma automática.

Aplicando lo que comentabamos:

En este caso agregamos un artículo a la lista, y luego vemos como el artículo se integra en forma
automática al cuadro combinado en la celda que tiene la validación.

DEFINIR NOMBRES A RANGOS

En el siguiente ejemplo veremos como aplicamos en lugar de una referencia a una lista formada
por determinadas celdas, a un rango con un nombre preasignado

En primer término asignaremos al rango, un nombre como por ejemplo ARTICULOS

En el área señalada asignamos el nombre al rango de artículos. O sea primero, señalamos el rango
de artículos (A2:A9) y luego le designamos un nombre a este rango. De ahora en mas cuando yo
quiera hacer referencia a las celdas A2:A9 ya podremos escribir simplemente ARTICULOS que Excel
entenderá las direcciones a las que se hacer referencia.

Otra manera de plantear las referencias de rangos a los que se le aplica un nombre sería:

Mediante el menú Insertar – Nombre – Definir, también podremos tanto crear rangos con
nombre, eliminar rangos con nombre, y también modificarlos.

Veamos que en dicha pantalla podemos asignar el nombre, y en donde define Se refiere a:
podremos determinar la dirección de las celdas que vamos a tener dentro del rango.

En este sentido esta pantalla nos da mejor manipulación sobre los rangos, ya que no solo
podremos asignarles nombres a determinadas celdas o rangos, sino modificar la dirección a la que
hacen referencias, como también eliminar determinados nombres que ya no sean de aplicación
para nuestra planilla.

En el caso de querer asignar un rango con nombre, en una regla validación, esto quedaría:

Vemos que aquí como origen de la lista determinamos el rango con nombre que denominamos
ARTICULOS. (Nota: Recordar el signo = puesto que no queremos hacer referencia a un texto sino a
un rango).

FORMATO CONDICIONAL

Este tema a tratar será interesante para aplicar dinamismo en cuanto al formato de celdas.
También nos servirá como aviso en determinadas planillas en las que busquemos que la misma
cambie cuando un factor se cumpla.

Esto se trata de una combinación entre la función condicional SI y la aplicación de formatos
(bordes, sombreados, subrayado) en celdas y rangos.

Tenemos básicamente dos maneras de aplicar este tema:

1. Aplicación del formato condicional de acuerdo al valor de una celda
2. Aplicación del formato condicional vinculado a una formula.

Aplicaremos en primer lugar un formato condicional de acuerdo al valor de una celda.
Por ejemplo si queremos que la planilla nos señale todo artículo cuyo Stock este por debajo de las
70 unidades.

Señalamos en primer lugar el rango al que le vamos a aplicar el formato condicional, en este caso
el rango formado por las celdas que determinan el stock.
En segundo lugar vamos al menú de formato – formato condicional.

En el menú de formato condicional, en este caso la condición depende del Valor de la Celda, y a
este valor lo podemos condicionar con operadores lógicos (<, >, <=, >=, =) por lo tanto podremos
comparar los valores de las celdas con dichos operadores.

En el caso que veíamos anteriormente determinamos que evalúe si el valor de la celda es menor a
70, y en caso de ser verdadera esta prueba lógica, aplicamos el formato, dándole una trama con
color rojo, lo que señalará la celda de este color cuando se cumpla esta condición.

En el caso que queramos aplicar más de una condición podremos agregar hasta 3 condiciones en
el formato condicional, como se muestra en el ejemplo a continuación:

La opción de agregar nos permitirá ir agregando condiciones, con dicho límite de 3 condiciones en
esta herramienta.

NOTA: La posibilidad de agregar más condiciones en formato condicional se podrá manejar desde
Macros en VBA.

En el ejemplo visto anteriormente estamos aplicando color rojo a los artículos cuyo stock este por
debajo de las 70 unidades, aplicaremos color azul a los artículos entre 70 y 99 unidades y por
último si el artículo tiene 100 o mas unidades en su stock la celda se pintará de color de fondo
verde.

En caso de que queramos aplicar dicho formato condicional con estas mismas condiciones pero
deseamos marcar toda la fila cuando se de las condiciones propuestas, esto lo haremos
seleccionando en primer lugar toda la matriz de datos (desde A2:C9).

Veamos que aquí comenzamos señalando el área (A2:C9), luego fuimos al menú formato –
formato condicional, y dentro del área de definición de formato, aplicamos como condición la
dependencia de una Fórmula, y dentro del rango donde se evalúa la fórmula, establecimos una
referencia a la celda C2.

Nótese que la celda C2 la reverenciamos aplicando en forma fija la columna y variable para la fila
($C2) ya que el formato condicional lo aplicará para cada una de las filas marcadas (desde fila 2 a
fila 9) pero lo aplicará siempre basándose en el valor de la columna C.

A su vez es importante notar que la celda a la que refiere toda formula del formato condicional

DEBERÁ SER SEÑALADA CON EL MOUSE PARA QUE NO LO TOME EN FORMATO TEXTO Y
AGREGUE
 AUTOMATICAMENTE COMILLAS A LA SINTAXIS.

De la misma manera que la vista anteriormente podríamos aplicar varias condicionales en este
formato, pero siempre con la limitación de hasta 3 condiciones aplicadas. Como vemos a
continuación:

Un comentario adicional es el hecho de que para eliminar alguna de las condiciones propuestas en
el formato condicional, simplemente volvemos a seleccionar el área a la que le queremos quitar en
este caso el formato (A2:C9) y luego nos dirigimos nuevamente al menú de formato – formato
condicional, y seleccionamos sobre el botón eliminar:

Como vemos tenemos la opción de eliminar una de las condiciones propuestas, solo 2, o todas las
condiciones que hayamos determinado.

Es importante señalar el rango de antemano ya que si no, Excel no encontraría en que celdas se
aplicó el formato condicional.

En el siguiente ejemplo se mostrará esta herramienta aplicada con fórmulas de Excel, y la idea será
que automáticamente queden marcados los cheques vencidos a la fecha actual (la fecha actual se
calculará mediante la función HOY()).

En este caso seleccionamos en primer lugar la matriz (A2:D5) y luego lo que hicimos fue aplicar el
formato condicional, donde la condición depende de una fórmula y en la misma definimos la celda
C2 en la cual fijamos la columna y dejamos como variable la fila ($C2) y comparamos con el
operador menor o igual al resultado de la función HOY(), la cual nos obtendrá en forma
automática la fecha actual del sistema.

BÚSQUEDAS DE INFORMACIÓN

Mencionamos en un ejemplo anterior que mediante la función BUSCARV podiamos realizar
búsquedas en matrices, y extraer de las mismas un dato de determinada columna en particular.
En este ejemplo veremos no solamente la aplicación de BUSCARV, sino también la función
BUSCARH y las limitaciones que tenemos en el uso de dichas funciones.

En este caso vemos la función BUSCARV, aplicada para buscar en base al código del artículo el
stock del mismo.

Mediante el pegado especial realizaremos un trasporte de dicha matriz, de la siguiente manera:

1. Seleccionaremos mediante el Mouse toda la matriz de datos (A1:C9)
2. Botón Derecho – Copiar
3. Seleccionaremos la celda E1
4. Botón Derecho – Pegado Especial
5. En las opciones seleccionaremos – Trasponer (como lo vemos en la pantalla a
continuación)

Veamos como queda transpuesta la matriz original:

El tema de transponer la matriz también nos servirá para ver la aplicación de la función BUSCARH
que nos permitirá extraer el contenido de una FILA en particular de la matriz.

En este caso en la celda E6, utilizaremos la función BUSCARH, para que al digitar un código de
artículo, nos obtenga la descripción del mismo (fila 2 de la matriz).

Por otro lado, una de las restricciones importantes que hay que destacar tanto en el BUSCARV
como en el BUSCARH es el hecho de no contar con la posibilidad de basarme en un dato buscado y
querer obtener una columna a la izquierda en el orden de la matriz, o una fila hacia arriba del dato
buscado en el caso de BUSCARH.

Por ejemplo si en el ejemplo anterior yo me baso en la descripción (como dato buscado) y en base
a la descripción pretendo obtener el código de dicho artículo.

Veamos por lo tanto la aplicación de dos funciones que nos permitirán solucionar este tema. Las
funciones son INDICE y COINCIDIR. La aplicación es la siguiente:

El resultado será 5 (Nro de índice)

En este caso aplicamos la función COINCIDIR, y dentro de sus argumentos colocamos, el valor
buscado, en dicho ejemplo la celda A13, donde el usuario ingresó la descripción del artículo, como
segundo argumento indicamos la columna B (rango B2:B9) que es donde realizaremos la búsqueda
de dicha descripción, y por último como tercer argumento el número 0 que está indicando que la
coincidencia debe ser exacta con el dato buscado.

El resultado de la función COINCIDIR será 5, que es la posición del dato buscado en la lista de
valores. O sea la devolución siempre me la da en el número de índice del dato buscado en la
nomina de valores.

Por otro lado si yo aplico la función INDICE de la siguiente forma:

En cuanto a la función INDICE los argumentos son, la matriz de búsqueda, donde aquí señale la
nomina de códigos de artículos, y como segundo argumento el número de fila del índice que debe
buscar, en este caso 5. Este número 5 lo obtuve viendo el resultado obtenido por la función
COINCIDIR en el dato anterior.

Por lo tanto, y resumiendo, esto podría ser simplificado en una sola celda, de la siguiente forma:

La función INDICE, me extrae el dato de una matriz de
acuerdo a la ubicación de este dato en dicha matriz.
Mientras tanto la función COINCIDIR lo que está
haciendo es buscando el dato en una matriz de
información, y buscando la posición de este dato, con
una coincidencia exacta.

FUNCIONES DE FECHA Y HORA

Aplicaremos en este ejemplo las funciones de fecha y hora que nos provee Excel.
Para comenzar, si yo quisiera obtener los días corridos en que se implementó cada una de las
tareas, tenemos que entender que TODA fecha que ingresemos en Excel, esta fecha la lectura que
tendrá será en número de días, comenzando con el número 1 correspondiente al 01/01/1900.

Por lo tanto si en una celda yo coloco la función =HOY() y esta me devuelve la fecha actual,
supongamos 17/10/2007, en realidad el contenido REAL de la celda será el número 39372.

Basta con cambiar el formato de la celda, a un formato numérico y vemos el resultado.

Entonces, si yo necesito saber los días que tomó cada tarea simplemente puedo restar las celdas
de columna C y columna B, y tengo el resultado esperado. (NO OLVIDAR ASIGNAR FORMATO
NUMÉRICO A LA COLUMNA D, para obtener en cantidad de días).

Hasta aquí no hemos aplicado ninguna función en particular. El tema se da cuando tengo que
calcular días habiles entre la fecha de inicio y fecha de fin. Para utilizar este tipo de funciones,
Excel nos provee de COMPLEMENTOS. En este caso debemos habilitar el COMPLEMENTO de
HERRAMIENTAS PARA ANÁLISIS, de la siguiente manera:

En el menú de Herramientas – Complementos
tendremos la posibilidad de ver los complementos
que tenemos y podremos marcar los que
necesitemos.
Recordar que todos los complementos que
marquemos quedarán habilitados de ahora en más
en TODAS las sesiones que iniciemos con Excel,
dentro de dicha PC.

En este caso habilitamos el COMPLEMENTO de HERRAMIENTAS PARA ANÁLISIS, que es el que nos
proveerá de las funciones necesarias a aplicar.

Para el cálculo de días hábiles utilizaremos la función DIAS.LAB
En dicha función los argumentos serán =DIAS.LAB (FECHA INICIO; FECHA FIN; [FERIADOS])

El argumento de FERIADOS es opcional, ya que podríamos omitirlo y la función de todas maneras
me realizaría el cálculo. La idea es que al tener el argumento de FERIADOS, no solo excluya de los
días hábiles sábados y domingos sino también los feriados que aparecen en la nómina.

Podríamos comprender dentro de esta nómina feriados no laborables, y laborables, eso lo
seleccionará quien esté a cargo del desarrollo de la planilla.

No olvidemos fijar el rango donde dispusimos los FERIADOS ya que al copiar la fórmula se debe
contemplar este rango como FIJO.

En el siguiente ejemplo vamos contemplar los días para la entrega de determinados pedidos.

Si los días fueran corridos simplemente digitamos: =B2+C2

Pero en el caso de que a partir de la fecha de pedido yo quiera agregar cierta cantidad de DIAS
HÁBILES, aquí el tema cambia, y aplicaremos para esto la función: DIA.LAB(FECHA INICIO; DIAS
LABORALES; [FERIADOS])

Lo que nos implementa dicha función es la posibilidad de que a cierta fecha se le agreguen o se le
descuenten cierta cantidad de días hábiles, agregando como argumento opcional los feriados.

Recordar que, para estos casos, también puede resultar común querer visualizar a partir de
determinada fecha, el día de la semana a la que corresponde. Para ello tenemos la función
DIASEM, que, a partir de una fecha nos dice qué día de la semana corresponde.

Veamos que la función DIASEM, nos devuelve un número correspondiente al día de la semana que
nos cae esa fecha, desde el 1 para domingo, hasta el 7 para sábado.

Si quisiéramos que esto nos de exactamente en letras el día de la semana, basta con cambiar el
formato de la celda para personalizarlo como vemos a continuación:

Al dar botón derecho, formato sobre dichas celdas en las que aplicamos la función DIASEM, vamos
a Personalizada, y en el Tipo, podremos optar por DDDD para que nos de en letras el día
correspondiente de la semana.

Nota: si hubiéramos escrito DDD, nos daría la abreviación del día de la semana.

Trabajando con HORAS

Veamos en la siguiente planilla en la que
ingresamos los horarios de entrada y salida de un
empleado a la empresa.
No se presentan problemas, al restar en cada día de
la semana las horas de salida y las de entrada.
Ahora al momento de calcular el total de horas que
este empleado realizó en toda la semana, veamos lo
que sucede:

En este caso aplicamos la función SUMA para tomar
en cuenta el rango de horas, y poder obtener el total
de horas. Pero Excel muestra un resultado que no es
del todo correcto.
En realidad el cálculo internamente lo realiza
correctamente pero el resultado lo expresa en días, y
por lo tanto esto sería 1 día, 19 horas, y 14 minutos.

Lo único que hacemos es cambiar el formato de la
celda, para que refleje el resultado en TOTAL de
horas. Veamos como realizar este paso:

Al momento de calcular el pago a realizar, tomo la celda del total de horas, multiplico por 24 para
pasar el resultado a horas, y luego por el precio hora. Recordar que mas allá del cambio de
formato que hicimos, internamente Excel sigue reconociendo dicha celda en termino de días y no
en termino de horas.

BUSCAR OBJETIVO  Y SOLVER

Estas dos herramientas nos servirán en determinadas ocasiones en las que queramos realizar
previsiones o estimaciones en Excel.
Pasemos al siguiente ejemplo:

En este caso manejamos un ejemplo donde un restaurante que
vende café, tiene su precio unitario en 30 pesos, y a través de la
cantidad de tazas vendidas genera el total de la recaudación.

Debemos tomar en cuenta que esta estructura se debe contemplar
para la aplicación de BUSCAR OBJETIVO, donde una fórmula debe
generar la dependencia de un conjunto de factores (celdas dependientes) que resuelven el
esquema (en este caso la recaudación depende de la cantidad de tazas vendidas y del precio
unitario).

Para utilizar la herramienta, vamos a Menú Herramientas – Buscar Objetivo:

En la pantalla de configuración: Definir la celda: en este caso B3, celda que contiene fórmula
dentro de la planilla.

Con el valor: vamos a definir como valor 6000 pesos (total de recaudación estimada, o previsión de
recaudación).

Para cambiar la celda: B2 (celda que actúa como variable del sistema, y que calculará
automáticamente la herramienta)

En este caso, yo podría haber resuelto el sistema perfectamente mediante una regla de tres
simple, pero en casos más complejos como el que vemos a continuación el cálculo de la
estimación sería posible con mayor esfuerzo:

En este caso planteamos un ejemplo donde se otorga un
préstamos de 20000 a una tasa anual del 8% y donde se
pagarán 12 cuotas. La función pago como vemos nos calculará
de forma automática la cuota a pagar, que en dicho caso será
de 1739 (Nota: el valor resultante será negativo ya que las
funciones financieras toman los egresos con este signo).

Ahora, veamos que sucede si en este caso quisiéramos
estimar cual sería el monto del préstamo que podríamos
obtener si se mantienen las condiciones, pero sabemos que
podemos pagar una cuota máxima de 1500. Para esto

aplicamos la Herramienta Buscar Objetivo de la siguiente manera:

El sistema nos resuelve y dirá que mediante el pago de una cuota de 1500 y manteniendo las
condiciones, llegaremos a obtener un préstamo de 17243.

La herramienta siempre trabaja con una variable a calcular y una fórmula cuyo resultado final será
estimado por el operador.

Veamos que en este último ejemplo nuestro supuesto es estimar un valor de cuota de 1500 (léase
que debe ser negativo, por tomarse como un egreso financiero), y manteniendo las condiciones,
se calculará el montó del préstamo al que la persona podrá acceder.

En el caso de la herramienta SOLVER, actúa como COMPLEMENTO de Excel por lo tanto hay que
habilitarlo, dentro del menú Herramientas – Complementos, y tildar la casilla de verificación en
caso de que dicha herramienta no estuviere previamente instalada en la PC que estemos
manejando.

SOLVER

Esta herramienta es similar a Buscar Objetivo con la salvedad de contar con la ventaja de resolver
sistemas con determinada cantidad de variables, y con la posibilidad de establecer  restricciones,
que acerquen el sistema a una realidad planteada.

Veamos el siguiente caso:

En este caso establecimos una planilla similar a la planilla que trabajamos anteriormente. Se trata
de un restaurante que vende varios tipos de Café, entre ellos Café común, Café Cortado, Café
Capuchino. Aplicamos en el menú Herramientas – Solver la configuración de dicho sistema.

Entonces: en Celda Objetivo establecemos la celda que vamos a estimar, en este caso la celda del
total recaudado por el restaurante, luego establecemos el importe del valor estimado para dicha
celda.

En la referencia de cambiando las celdas establecemos las celdas que se van a calcular
automáticamente por la resolución del sistema, en el caso nuestro marcaremos mediante la tecla
CTRL cada una de las celdas que tiene la cantidad de tazas de cada tipo de café.

Por último, en el área inferior izquierda de esta pantalla establecemos mediante el botón agregar,
la/las restricciones del sistema, en este caso nuestra única restricción fue agregar a la celda B10
que contiene el total de tazas vendidas de café capuccino, que el limite es que dicha celda
contenga un valor menor a 50. Podemos agregar múltiples restricciones ya que cada vez que
queramos agregar una restricción mas, solo presionaremos en el botón agregar lo que nos
permitirá ir agregando nuevas restricciones. También tenemos la posibilidad de cambiar, y
eliminar restricciones mediante los botones asociados.

Una vez que terminamos la definición de dicha pantalla mediante el botón RESOLVER, el sistema
nos genera una solución para el esquema propuesto y nos muestra la siguiente pantalla:

El esquema queda resuelto y vemos la solución final en la planilla. Podemos en esta pantalla
marcar la opción de Utilizar la solución encontrada por SOLVER, o también podemos Restaurar
valores originales para regresar al estado inicial de la planilla antes de resolver el esquema.

Las aplicaciones de dicha herramientas son muchísimas, tanto en ámbitos de estadística,
probabilidad, como también en materia de Matemáticas, Ingeniería y Economía.

Podemos ver varios ejemplos aplicados si buscamos el archivo SOLVSAMP.xls que se encuentra en
C:\Archivos de Programa\Microsoft Office\Office10\SAMPLES\

MÓDULO

ANÁLISIS

DE

INFORMACIÓN

Módulo: Análisis de Información

En este módulo se verá la aplicación de herramientas volcadas al análisis de información dentro de
Excel.
En primer lugar, con un ejemplo se aplicará el uso de los diferentes tipos de filtros que nos provee
la herramienta.
Veamos el siguiente ejemplo:

En esta planilla aplicaremos el primer tipo de
filtro, que será el Autofiltro y que nos permitirá
aplicar filtros automáticos en la planilla de una
forma muy sencilla.

Para aplicarlo bastará con posicionarnos en
cualquier celda de nuestra base de datos y
luego mediante el menú de Daots – Filtro –
Autofiltro comenzaremos la aplicación del
mismo.

La planilla nos quedará de la siguiente manera:

Veamos en primer lugar, que cuando
nosotros marcamos en el menú de datos –
filtros – autofiltro, este actúa como un
subrayado, donde podemos tildar y destildar
esta opción, en caso que queramos deja de
utilizar el Autofiltro en algún momento.

El autofiltro nos da esta opción del cuadro
desplegable en el título de cada campo de la
base de datos.

Bastará con pinchar en el cuadro desplegable
para poder seleccionar el criterio a aplicar
para filtrar la información sobre dicho campo.
Por ejemplo, si en esta planilla yo quisiera
solo ver las ventas del vendedor Díaz, solo
seleccionaré Díaz en las opciones del campo

Vendedores, y esto me aplicará automáticamente el filtro con dicho criterio.

A continuación se da el ejemplo de cómo aparece la planilla con el filtro aplicado:

En el caso anterior el sistema en forma automática oculta las filas del resto de vendedores y deja
solo visibles las ventas del vendedor seleccionado.

Podemos a su vez aplicar otro filtro en forma simultanea sobre otro de los campos como por
ejemplo el campo de Región, solo bastará con seleccionar de dicho campo la opción de la región
que necesitaremos visualizar y la herramienta aplicará este filtro en forma totalmente dinámica.

QUITAR AUTOFILTROS  RESTABLECER BASE DE DATOS

En caso de que en algún momento, apliquemos varios filtros de acuerdo a varios campos y en
algún momento queramos quitar dicho filtro, existen dos opciones: podemos quitar el autofiltro
directamente yendo al menú de datos – filtros – autofiltro, o también mediante el menú de datos
– filtros – mostrar todos (esto muestra nuevamente todos los datos originales de la base de datos
pero mantiene el autofiltro.

CRITERIOS PERSONALIZADOS

También muchas veces se puede dar el caso de que el criterio para filtrar la información no este
disponible en forma directa sobre el campo que queramos filtrar, y por lo tanto, del cuadro
desplegable recurrimos a la opción de Personalizar, para este campo:

Cuando seleccionamos la opción Personalizar, podremos aplicar criterios un poco mas avanzados
para filtrar dicho campo:

En este caso, como nos posicionamos sobre el campo Ventas 2005, y seleccionamos la opción de
Personalizar, allí podemos ver que en nuestro caso aplicamos dos criterios que señalan que el
filtro será tomar únicamente Ventas 2005 con valores mayores o iguales a 80000 y menores o

iguales a 100000. Podemos ver a su vez que existen múltiples criterios que podemos aplicar sobre
dicho campo.

La planilla luego de aplicar dicho filtro ser verá de la siguiente manera:

Un detalle sumamente importante a tomar en cuenta es el hecho de que si en dicha planilla
quisiéramos en algún momento obtener la suma de ventas del 2005 pero únicamente de los datos
visibles no podemos aplicar la función =SUMA (C2:C15), puesto que tomaría todas las filas (tanto
visibles como no visibles).

Para este tipo de casos aplicamos la función =SUBTOTALES (9;C2:C15)

SUBTOTALES (núm_función; ref1, ref2,...)

Núm_función Función
1

PROMEDIO

2

CONTAR

3

CONTARA

4

MAX

5

MIN

6

PRODUCTO

7

DESVEST

8

DESVESTP

9

SUMA

10

VAR

11

VARP

Veamos en el ejemplo dado, los resultados de la función SUMA y SUBTOTALES aplicados para
dicho rango de celdas (C2:C15).

NOTA: También podríamos haber utilizado el botón ∑
Dicho botón aplica automáticamente la función correcta según encuentre celdas ocultas o no en
ese rango (aplica función SUMA en caso de que no existan filas ocultas, y aplica en forma
predeterminada SUBTOTALES cuando encuentra filas ocultas en el rango).

El autofiltro también nos permite filtros personalizados en el caso de columnas con datos tipo
TEXTO, por ejemplo si yo quisiera obtener los datos de ventas de aquellos vendedores cuyo
apellido termine con letra S.

En dicho ejemplo se aplica sobre el campo Vendedores, el criterio de personalización y luego el
filtro que determina que dicho campo muestre únicamente registros que termina con letra s.

Hay una limitación en la aplicación del autofiltro y es, justamente la consigna para pasar al
siguiente tema. No podemos mediante el autofiltro aplicar criterios que comparen campos por
ejemplo, en el siguiente caso, vamos a aplicar un filtro que nos exponga únicamente las ventas del
2005 superiores a las del 2006.

Eso lo lograremos con el Filtro Avanzado:

Recordemos que para poder aplicar el filtro avanzado debemos hacerlo sin tener la opción de
autofiltro encendido. Por lo tanto si tenemos el autofiltro, debemos apagarlo yendo a Datos –
Filtro – Autofiltro.

Para aplicar el filtro avanzado vamos a Datos – Filtro – Filtro Avanzado, y luego:

Veamos que como criterios aplicamos la comparación entre la celda C2 y D2, donde solo
colocamos la fórmula =C2>D2

En el cuadro que nos aparece cuando aplicamos el filtro:

Como Rango de la lista: A1:D19 (marcamos la base de datos completa)

Rango de Criterios: F7:F7 (marcamos las dos celdas, el título del criterio, y la celda que contiene el
criterio propiamente dicho)

Veamos que en dicho cuadro en este caso aplicamos la opción que aparece por defecto que es:
Filtrar la lista sin moverla a otro lugar, ya que lo que queríamos era aplicar el filtro directamente
en la base de datos.

En la siguiente pantalla se expone como el filtro aplica dicho criterio directo sobre la base de
datos:

Aquí volvemos a comentar el hecho de que si queremos obtener la sumatoria de ventas de 2005 o
2006, no debemos usar la función SUMA, puesto que deberíamos utilizar la función SUBTOTALES.

Para restaurar la base de datos volvemos al menú Datos – Filtro – Mostrar Todo, como se presenta
en la siguiente pantalla:

En el caso de querer aplicar filtros en forma simultánea, tendremos que armar dichos criterios en
la misma línea. En el siguiente ejemplo veremos la aplicación de un filtro donde vemos las ventas
2005 superiores a las del 2006, pero solo de la Región Sur, veamos no solo la aplicación del filtro,
sino el armado de dichos criterios:

Aquí veamos que como Rango de Criterios marcamos F6:G7, ya que los criterios en este caso son
2, uno que aplica sobre el campo Región, donde se extrae solo datos que coincidan con Región
SUR, y por otro lado, el siguiente criterio (le dimos un título arbitrario, en este caso “Criterio”),
donde hicimos la comparación de uno de los registros de ventas 2005 contra un dato de ventas
2006.

Así nos quedarían los datos filtrados, de ventas de Región SUR, donde las Ventas 2005 superan a
las del 2006:

Veamos que sucede si los criterios son los mismos pero no respetamos el tema de que sean en la
misma línea:

Aquí se puede ver que aplicamos un filtro donde la Región es SUR, pero no hace al mismo tiempo
comparativo de ventas entre el año 2005 y 2006, mientras que para el resto de ventas de otras
Regiones SÍ aplica el criterio de comparar las ventas 2005, y que dichas ventas sean superiores a
las del año 2006.

Podemos seguir aplicando criterios, pero siempre que apliquemos varios criterios, tienen que estar
armados diferenciando los campos de la base de datos, pero también en el mismo orden que
aparecen dichos campos en la base de datos.

Veamos ahora en un ejemplo donde apliquemos este mismo filtro pero con una extracción de una
sub base de datos para no modificar la base original:

En la pantalla que nos aparece en este caso marcamos la opción de Copiar a otro lugar, y
nuevamente en:

Rango de la lista: A1:D19 (nuevamente marcamos toda la base de datos)

Rango de criterios: F6:G8 (aquí marcamos todos los criterios, en este caso los dos criterios)

Copiar a: Aquí marcamos una celda cualquiera vacía ya que a partir de ahí se va a generar la sub
base de datos con los datos que cumplan con los criterios pautados.

Si en dicho ejemplo planteamos que la sub base de datos solo obtenga los campos de Vendedores,
Ventas 2005 y Ventas 2006 excluyendo la Región, deberíamos armar a priori los títulos de los
campos que van a formar dicha sub base de datos:

Aquí marcamos en el cuadro, en el renglón Copiar a: F11:H11 (celdas donde se encuentran los
títulos de la sub base de datos que se va a armar con los datos filtrados)

A continuación vemos el resultado final de dicho filtro:

Tablas Dinámicas

Utilizando la base de datos del ejemplo anterior generaremos nuestra primera tabla dinámica.
Esta herramienta nos permitirá cruzar de diversas formas información de una base de datos, tanto
sea una base armada en Excel, como también en fuentes de datos externas (como archivos de
texto, bases de Access, SQL, DBase, etc.)

Para comenzar nos guiaremos mediante el Asistente, que encontramos en Datos – Informe de
Tablas y Gráficos Dinámicos, como vemos en la siguiente pantalla:

En la primera pantalla del asistente tendremos las opciones para elegir el origen de los datos que
se van a tomar en la tabla dinámica, y en dicha pantalla en la parte inferior elegimos el tipo de
informe a obtener, y que puede ser Tabla Dinámica o Gráfico Dinámico:

En esta primera pantalla nosotros elegimos las opciones que vienen como predeterminadas ya que
la base de datos nuestra proviene de una lista que armamos previamente en Excel y el informe de
salida es efectivamente una tabla dinámica.

Presionamos en el botón siguiente para pasar a la segunda pantalla:

El Rango es el que se forma por toda nuestra base de datos, recordar que en el caso de querer
tomar solo determinados campos, mediante la tecla control presionada podemos marcar solo
dichos campos para que formen parte de nuestra tabla dinámica.

Pasemos con el botón siguiente a la tercera pantalla de nuestro asistente

En esta tercera pantalla del asistente, podremos elegir la ubicación de nuestra tabla dinámica, la
cual podemos establecer en una hoja de cálculo nueva, o también en una hoja de cálculo
existente. Tomemos en cuenta que en el caso de que marquemos hoja de cálculo existente,
debemos marcar una celda que formará el ángulo superior izquierdo de nuestra tabla dinámica
por lo tanto tener presente que desde esta celda hacia abajo y hacia la derecha exista lugar vacío y
disponible en dicha planilla de cálculo.

Veamos el resultado que obtenemos al dar finalizar (en este caso seleccionamos la opción de
volcar la tabla dinámica en una hoja nueva):

Toda tabla dinámica se formará por 4 cuadrantes que serán:

• Campos de Fila
• Campos de Columna
• Campos de Datos
• Campo de Página

Podremos arrastrar cualquiera de nuestros campos de la base de datos que tenemos en la lista
que aparece a la derecha hacia el área de nuestra tabla dinámica donde queramos disponer dicho
campo.

Es sumamente importante tener presente en un principio cual es el resultado que se desea
obtener, para no perdernos entre tantas opciones que tenemos en los campos que tenemos en la
base de datos.

En este primer ejemplo vamos a pedir el total de ventas del 2005 para cada uno de los
vendedores:

Aquí lo que hicimos fue arrastrar (con el botón izquierdo presionado) el campo de vendedores al
área de Fila (vemos que cada vendedor aparece en una fila diferente), y llevamos el campo de
Ventas 2005 al área de Datos (vemos que las ventas de 2005 aparecen cada una en dicha área).

Hay que tener presente que Excel es realmente sensible respecto a cada una de estas áreas por lo
tanto tratemos siempre de trasladar cada campo hacia el área correspondiente en la forma mas
exacta posible.

En caso de que cambiemos de opinión y nos parezca mejor obtener el total de ventas 2005 pero
de cada región y no de cada vendedor puedo trasladar el campo de vendedores de regreso a la
Lista de campos de tabla dinámica, y trasladar a continuación, el campo de Región nuevamente al
área de fila:

Aquí vemos que quitamos el campo de vendedores, y ahora vamos a colocar el campo de Región,
solo volvemos a arrastrar dicho campo al área de filas y nos queda como vemos a continuación:

En dicho ejemplo vemos que lo que logramos en este último caso es totalizar las ventas del 2005
para cada una de las regiones.

Pero volviendo al caso anterior podríamos querer obtener ambos resultados, o sea las ventas de
2005 de cada vendedor y también por región, como presentamos en la siguiente pantalla:

En este caso trasladamos el campo de Vendedores al área de FILA y el campo de Regiones al área
de COLUMNAS. El campo de ventas 2005 quedó dispuesto como antes en el área de DATOS.

FILTROS EN TABLAS DINÁMICAS

También tenemos la opción de aplicar filtros en la tabla dinámica, mediante el cuadro desplegable
de los títulos del campo fila (en este caso vendedores) y también en el título del campo de
columna (en este caso Región).

En este caso al igual que como hacíamos en el autofiltro, elegimos los criterios de filtrado que
vamos a aplicar sobre dicho campo. En el caso anterior filtramos para que solo despliegue las
ventas de los vendedores Morales y Vega, que son los que dejamos tildados en el cuadro
desplegable.

Si quisiéramos obtener además de las ventas del 2005, también las del 2006, simplemente
agregamos este último campo en el área de datos:

Vemos que aquí obtenemos dos campos en el área de datos, y tenemos los totales tanto por
vendedor como también por región de los años 2005 y 2006.

Podemos aplicar también un filtro que nos muestre por ejemplo determinada región (SUR por
ejemplo):

Cada filtro aplicado se refleja inmediatamente en el resultado de nuestra tabla dinámica.

ACTUALIZACIONES EN TABLAS DINÁMICAS

Apliquemos en principio el primer tipo de actualización que se puede dar:
‐ Cambiando datos en la base de dato original. Tomemos algún dato de la base de datos
original y modifiquemos este dato sustancialmente para que veamos reflejado este
cambio en la tabla dinámica.

Veamos que en este caso se modificó el primer registro de la base de datos, sin embargo cuando
regresamos a la tabla dinámica, esta permanece exactamente  igual que como estaba antes de
realizar el cambio.

Para que el cambio se realice y se vea reflejado en la tabla dinámica deberemos dar clic en el
botón de actualizar (botón con el signo de !) en la barra de herramientas de tabla dinámica.

En caso de no tener dicho botón disponible podremos recurrir al menú VER – BARRA DE
HERRAMIENTAS – TABLAS DINÁMICAS, y luego dar clic sobre este botón pare ver el cambio
realizado:

Al presionar sobre el botón vemos que la tabla dinámica recalcula los valores y nos muestra el
detalle que vemos a continuación:

Hay un tema muy importante a destacar, y es el hecho de que la tabla dinámica no es sensible a la
incorporación de nuevos registros (nuevas líneas) en la base de datos original, así como a la
inserción de columnas en la base de datos original.

A continuación haremos referencia al concepto y metodología a manejar cuando agregamos
nuevos registros en la base de datos original.

ACTUALIZACIÓN DE TABLAS DINÁMICAS (CON INSERCIÓN DE DATOS EN LA BASE DE DATOS
ORIGINAL)

En este ejemplo vamos a agregar una línea adicional en la base de datos, haremos referencia a una
venta en una región que hasta ahora no habíamos cargado:

El último registro fue agregado en la base de datos, sin embargo cuando regresamos a la tabla
dinámica, ésta no refleja el cambio que realizamos en la base de datos. Pero nos encontramos que
presionando el botón de actualizar en la barra de herramientas de tabla dinámica tampoco nos
refleja el cambio.

Para que el cambio se refleje en nuestra tabla dinámica realizaremos el siguiente procedimiento:

1. Vamos a la barra de herramientas tabla dinámica, mediante el menú VER – BARRA DE
HERRAMIENTAS – TABLA DINÁMICA
2. Una vez que tenemos la barra de herramientas disponible, vamos al botón Tabla Dinámica,
y allí elegimos Asistente:

Cuando presionamos en la opción de asistente, este nos despliega la última pantalla del asistente
de tablas dinámicas, al presionar el botón de atrás vemos que nos permite redimensionar la base
de datos original:

En este caso marcaremos el rango A1:D20, agregando de esta manera el nuevo registro a la base
de datos, luego presionamos en el botón siguiente, pasando a la última pantalla del asistente y por
último finalizar.

Vemos a continuación la imagen de nuestra tabla dinámica actualizada mediante el asistente de
tablas dinámicas:

Agreguemos a continuación en nuestra base de datos original una nueva columna que nos refleje
el país a donde se realizó cada una de las transacciones con lo que la base de datos quedará de la
siguiente manera:

Al presionar el botón de actualizar en la barra de herramientas de tabla dinámica, nos aparece en
la lista de campos, el nuevo campo PAÍS que podremos utilizar para agregar en la tabla dinámica:

Agreguemos dicho campo en el área de Página y veamos el efecto que resulta de esto:

Al agregar dicho campo en el área de página podremos resumir la tabla dinámica de acuerdo a
dicho campo. En el siguiente caso, al seleccionar un país (por ejemplo Argentina) veamos el efecto
que produce sobre los datos de nuestra tabla dinámica:

La tabla dinámica pasa ahora a mostrar las ventas de cada vendedor de los años 2005 y 2006,
también con la posibilidad de ver la división por región pero UNICAMENTE DEL PAÍS ARGENTINA
(que actúa como filtro de nuestra tabla dinámica).

CAMBIOS SOBRE LAS OPERACIONES DE CAMPOS DE DATOS

En este caso seguiremos trabajando con la base de datos de ejemplo pero vamos a aplicar otra
operación sobre el campo de ventas 2005, en lugar de pedir el total de ventas 2005 (suma de
ventas 2005) solicitaremos el promedio de ventas 2005.

Para simplificar solo trabajaremos con los campos de vendedores y ventas 2005:

Aquí por ahora solo vemos la operación simple donde nos muestra la suma de ventas 2005,
veamos como hacemos para cambiar la operación predeterminada del campo de datos:

1. Nos posicionamos sobre cualquiera de los datos, de importes de nuestra tabla dinámica y
presionamos el botón derecho del Mouse, y allí seleccionamos la opción de
CONFIGURACIÓN DE CAMPO

2. En la pantalla que nos aparece podremos seleccionar el tipo de operación que aplicaremos
sobre dicho campo:

Vemos que podemos aplicar como operación la SUMA, CUENTA, PROMEDIO, MÁXIMO, MÍNIMO,
PRODUCTO…

En nuestro caso vamos a seleccionar como opción PROMEDIO, para que nos aplique dicha
operación sobre el campo de Ventas 2005.

También podremos en dicho cuadro, sobre la línea de Nombre, ajustar el nombre a reflejar de
dicho campo.

Tenemos la opción también de agregar el mismo campo un sin numero de veces para que este
refleje operaciones diferentes.

Por ejemplo, si necesito que la tabla dinámica refleje la suma de ventas 2005 pero además, nos
provea del promedio de ventas 2005 para cada vendedor. Arrastramos dos veces el campo de
ventas 2005 hacia el área de datos, y simplemente a uno de los campos le cambiamos la
configuración de campo:

También cuando realizamos la configuración de campo podremos tener mas opciones, como por
ejemplo desplegar el % de ponderación de cada venta, con respecto al total de ventas del año
como podemos ver a continuación:

En la pantalla de configuración de campo:

La tabla dinámica nos mostrará el siguiente resultado:

No olvidemos que podríamos presentar los importes de ventas 2005, y luego arrastrar
nuevamente el campo para realizar esta configuración para que además de los importes refleje
también los porcentajes de ventas.

TABLAS DINÁMICAS CON IMPORTACION DE DATOS DESDE ACCESS

Veamos en un ejemplo los pasos que debemos cumplir si queremos armar una tabla dinámica
para analizar información de una base de datos que la empresa tiene en Microsoft Access.

Comenzamos el asistente de la misma manera que lo hicimos antes, mediante el menú de Datos –
Informe de Tablas y Gráficos dinámicos

En la primera pantalla del asistente, elegimos como opción FUENTE DE DATOS EXTERNA:

Al presionar el botón siguiente, vemos que el asistente cambia con respecto al que veíamos en el
capítulo anterior:

Presionando el botón de Obtener Datos, seleccionamos el Origen de Datos (es el software donde
está alojada la base de datos). Muchas veces se confunde esta pantalla con la elección directa de
la base de datos.

Seleccionamos en este caso MS Access Database, que es el software donde tenemos la base de
datos, y al dar aceptar, podremos recorrer las carpetas hasta encontrar la base de datos, en este
caso recorremos C:\Archivos de Programa\Microsoft Office\Office11\Samples

Cuando seleccionamos la base de datos, en este caso NEPTUNO, nos aparece la siguiente pantalla:

Aquí nos refleja las diferentes tablas de las que está compuesta la base de datos, y de la que
podremos tomar determinadas tablas, completas, por ejemplo la de CLIENTES, o también

podremos presionar en el signo + para desplegar los campos de los que está compuesta la tabla.
En el siguiente ejemplo tomaremos determinados campos de las tablas de Clientes, Productos,
Categorías, y Productos.

Cada uno de los campos que queramos incorporar en la tabla dinámica lo pasaremos al área
derecha de la pantalla, en el área de columnas en la consulta.

Cuando presionamos el botón siguiente:

En esta pantalla tendremos la posibilidad de filtrar la información de los campos de acuerdo a uno
o varios criterios que seleccionemos.

En la siguiente pantalla podremos seleccionar un orden determinado a establecer, de acuerdo a
un campo que seleccionemos, en forma ascendente o descendente.

En la última pantalla seleccionamos la opción que aparece en forma predeterminada, y
devolvemos los datos directamente a Microsoft Excel, y le damos siguiente en la pantalla del
asistente:

Llegamos en esta etapa final, a la misma pantalla, que en el capítulo anterior donde tendremos el
esqueleto de la tabla dinámica:

Aquí podremos armar la tabla dinámica simplemente ajustando los campos y llevándolos al área
de fila, área de columnas, y al área de datos.

Recordemos que desde aquí podemos lograr lo mismo que ya realizamos en el capítulo anterior
con datos de una base de datos de Excel:

GRAFICOS DINÁMICOS

Para generar una tabla dinámica, y a partir de la misma, reflejar un gráfico dinámico, simplemente
nos posicionamos en cualquiera de los campos de la tabla dinámica y mediante el botón derecho
del Mouse tendremos la opción de generar el gráfico.

Veamos en el siguiente ejemplo:

Mediante la opción de Gráfico dinámico, este nos generará en una nueva hoja el gráfico dinámico
que se desprende de la tabla dinámica generada anteriormente.

Dentro del Gráfico dinámico podremos ajustar y cambiar de posición cualquiera de los campos,
pero siempre tomando en cuenta que al cambiar el gráfico dinámico, también cambiará en forma
simultanea la tabla dinámica de la cual depende.

El Gráfico dinámico tiene a su vez 4 áreas diferenciadas, y son:

1. Campos de categorías (en este caso vendedores)
2. Campos de serie (en este caso no tenemos)
3. Campos de página (en este caso no incluimos ninguno aún)
4. Campos de datos (en este caso el campo Ventas 2005)

En el siguiente ejemplo vemos el caso de tener un campo en cada posición:

MÓDULO

GRÁFICOS

PERSONALIZADOS

Y

FORMULARIOS

Módulo de Gráficos Personalizados y Formularios

Dentro de este módulo se verán diferentes opciones al momento de graficar en Excel así como
opciones de gráficos poco utilizadas, y casos prácticos donde apliquemos usos de gráficos para
diferentes actividades.

Comencemos con un gráfico sencillo en el que se pretenda gráficas exportaciones de un producto
a diversos países a través de 4 años.

Nos basaremos en la siguiente planilla:

Para comenzar nos posicionamos en cualquiera de los datos de nuestra planilla y vamos al
asistente para gráficos mediante el menú Insertar – Gráfico

En la primera pantalla que nos despliega el asistente para gráficos tendremos la posibilidad de
seleccionar la categoría del gráfico que generaremos y dentro de cada categoría también
podremos seleccionar la subcategoría de dicho gráfico, como vemos en la pantalla a continuación:

Veamos que tenemos un botón de Presionar para ver muestra, que, dependiendo en que
categoría nos posicionamos nos va a dar una imagen preliminar del gráfico que generaremos a
través de la lista o base de datos que tenemos seleccionada.

Al presionar siguiente, y pasando al segundo paso del asistente:

Aquí se destacan dos puntos, en primer lugar, el hecho de que Excel tomó en forma automática
como Rango de datos desde A1:E6, incluyendo aquí los títulos de ambos campos, pero tomando la
fila 1 como si fuera una serie a graficar, y esto nos genera un error, ya que aparecerá una serie que
no contiene información (veamos en la muestra).

En este caso corrigiendo el área a graficar y tomando desde la fila 2, o sea marcando como Rango
de datos de origen desde A2:E6, nos quedará la muestra correspondiente al área que
efectivamente debemos graficar.

Si vemos las opciones de graficar las series en: FILAS, COLUMNAS, en forma predeterminada Excel
marca las serien como columnas, y por lo tanto cada año formará una serie de nuestro gráfico, en
cambio si intercambiamos y pasamos a la opción de Series en FILAS, se verá de la siguiente
manera:

En este caso lo que estamos representando son las ventas de cada uno de los años (1, 2, 3,4) y
dentro de cada año las series están representadas por las exportaciones a cada país.

A su vez si damos clic en la solapa de SERIE en esta misma pantalla veremos lo siguiente:

En esta pantalla podremos definir:

• Nombre: El rango (o celda) donde encontramos el nombre de cada serie (en este caso de

cada país)

• Valores: El rango de celdas donde encontramos los valores correspondientes a dicha serie
(valores de exportaciones a través de los años de dicho país)
• Rótulos del eje de categorías (X): Aquí vamos a señalar el rango B1:E1 que es el rango
donde encontramos los títulos de las categorías (en este caso los años)

Presionamos en siguiente y pasamos al 3er paso del asistente:

Aquí completamos en la solapa de Títulos los títulos de cada sector del gráfico, en primer lugar el
Título General del gráfico, luego completamos el Título de Eje X, y por último el titulo de Eje Y.

Pasamos a la solapa de EJE:

Aquí podemos marcar o desmarcar las opciones que nos permitirán visualizar los ejes de valores y
categorías, o también podremos dejarlo desmarcado en caso de que querer ocultar dichos ejes en
el gráfico.

Al pasar a la solapa de Líneas de División:

El efecto que produce las casillas de verificación en esta solapa de categorías es el de agregar
referencias para identificar los valores en el gráfico, en un gráfico de líneas, y a nivel estadístico
esto es fundamental para tener una referencia mas precisa de los valores que vemos en el gráfico.

Pasando a la solapa de Leyenda:

Aquí seleccionamos la ubicación de la leyenda de referencia de series dentro del gráfico así como
también podemos destildar la casilla de verificación en caso de querer ocultar la leyenda del
gráfico.

En la solapa de Rótulo de Datos, tendremos la posibilidad de reflejar en el gráfico los Nombres de
la series (en este caso los países), Nombres de las categoría (años en este caso), y Valores (valores
correspondientes a cada dato graficado).

Debemos tener presente que marcar todas las opciones muchas veces puede resultar complejo
para poder entender correctamente tanta sintaxis dentro del gráfico, y muchas veces hace que el
grafico quede realmente complejo para un análisis posterior.

En esta última solapa, si nosotros pretendemos, dentro de la pantalla del gráfico agregar la
información de los datos graficados, ya sea porque los mismos se encuentran en otra ubicación, o
porque queremos tenerlos disponibles dentro del gráfico, marcamos la opción de Mostrar Tabla
de Datos, y de esa manera nos quedan los datos incrustados dentro del gráfico.

Al presionar siguiente, pasamos al paso 4 del asistente donde seleccionamos entonces, la
ubicación que le daremos al gráfico:

Podemos ubicar el gráfico tanto en una hoja nueva, como también podemos ubicarlo como un
objeto dentro de la hoja activa, o la hoja que seleccionemos.

Finalmente, vemos el gráfico dentro de nuestra hoja, el cual podremos seleccionar, y desde los
bordes, tal cual como si fuera una imagen cambiar sus dimensiones:

AREAS DEL GRÁFICO

El gráfico está formado básicamente por diversas áreas:

• Área del gráfico (el fondo blanco que vemos dentro del gráfico)
• Área de trazado (el fondo gris en el que posicionamos las series)
• Título del gráfico (en nuestro caso exportaciones)
• Series (en nuestro caso las columnas, que forman las exportaciones a cada país)
• Eje de categorías (eje x)
• Eje de valores (eje y)
• Leyenda (cuadro que tiene la representación de la series)
• Título del eje de categorías (Años en nuestro caso)
• Título del eje de valores (Importes en nuestro caso)

En el caso de querer cambiar cualquiera de las áreas del grafico recordar que simplemente nos
posicionamos sobre dicha área y con el botón derecho nos desplegará las opciones propias del
área marcada.

Para poder recurrir a la modificación de cualquiera de los pasos que recorrimos mediante el
asistente, nos posicionamos sobre el Área del Gráfico (área blanca) y con el botón derecho:

• Tipo de gráfico (paso 1 del asistente – donde seleccionamos la categoría del gráfico)
• Datos de origen (paso 2 del asistente – donde indicamos el rango de datos)
• Opciones del gráfico (paso 3 del asistente – donde indicamos títulos, leyendas, ejes)
• Ubicación (paso 4 del asistente – donde seleccionamos la ubicación deseada para el

gráfico).

Modificaciones de Gráficos

Para modificar el área de gráfico simplemente damos doble clic sobre dicha área y nos aparecerá
la siguiente pantalla:

Aquí podremos indicar no solo los bordes del área, permitiendo seleccionar el color del borde, el
estilo del mismo, así como también el grosor, sino que también podremos cambiar la fuente (junto
con sus propiedades), así como también el fondo del gráfico (área).

También podemos presionar sobre el botón de efecto de relleno para modificar los efectos que
apliquemos sobre el fondo del gráfico, entre los que podemos:

Aplicar degradado, con diferentes efectos del mismo, con un color, o dos, con efectos de
transparencias, y además con diversos estilos de sombreado.

Podemos aplicar también texturas:

Así como también indicarle con el botón de Otra Textura, y buscar el archivo donde se encuentre
la textura que queramos darle al área de gráfico.

Podremos además de seleccionar un color, y efecto de degradado aplicar una trama en particular:

Por último si nos parece conveniente, también podremos ubicar como fondo del gráfico una
imagen, seleccionando la misma desde su ubicación en el disco:

Este mismo tipo de efectos se puede aplicar sobre cualquier área del gráfico, por ejemplo también
sobre las series, obteniendo entonces un gráfico como el que se refleja a continuación:

Si bien no son los mismos datos que en el ejemplo visto anteriormente la idea es reflejar no solo
los cambios del área de gráfico sino también del área de trazado, y a su vez del área de series,
modificando cada serie y viendo como agregar la bandera del país como identificación de dicha
serie.

Gráficos Personalizados

Generaremos en el siguiente ejemplo un Gráfico que denominaremos pirámide poblacional a
partir de la siguiente planilla:

En la misma encontramos un total de la muestra, en este caso del barrio MALVIN y separado por
sexo (hombres, y mujeres) y a su vez el total dividido por grupo etario. La idea es graficar esto y
que podamos representar las cantidades de personas de cada sexo y cada barra represente a un
grupo etario diferente.

El resultado final se muestra a continuación y luego veremos el paso a paso a seguir para obtener
dicho gráfico:

Para llegar a este resultado final, comenzaremos por generar con los datos un gráfico de barras
seleccionando el rango a graficar (en este caso desde A1:K5). Allí vamos a Insertar – Gráfico:

Seleccionamos el gráfico de tipo BARRAS – primer subtipo que es el de BARRA AGRUPADA,  luego
le damos clic en el botón siguiente:

Notemos que aquí corregimos en primer lugar el Rango de datos (A4:K5) para tomar únicamente
los sexos y los grupos de edades, que comprenden únicamente lo que vamos a graficar, pero
además vamos a dar clic sobre la solapa series:

Aquí lo que hicimos fue agregar en el Rótulo del eje de categorías X el rango que va desde B2:K2
donde indicamos los títulos de grupos de edades que formarán parte de nuestro gráfico.

En nuestro siguiente paso:

Aquí definimos los nombres tanto del gráfico general como también de los ejes.

Este fue el resultado final que obtuvimos, ahora veamos los criterios que tenemos que utilizar para
perfeccionar la pirámide poblacional.

En primer lugar, para que un sexo tome valores a la derecha del corte de eje X y el otro sexo tome
valores a la izquierda del corte de eje X debemos tomar en cuenta que lo logramos fácilmente
cambiando el signo en la planilla original como vemos a continuación:

Veamos que agregamos una línea donde simplemente le cambiamos el signo a los valores
correspondientes al sexo femenino, e incluimos esta serie dentro del gráfico de la siguiente
manera:

Aquí incluimos dentro de la categoría mujeres, el rango B6:K6 en lugar del rango B5:K5 que tenía
anteriormente valores negativos.

Recordar para reasignar las direcciones de dicho rango accedemos clickeando con el botón
derecho sobre el área de gráfico (fondo blanco del gráfico) y seleccionando como opción Datos de
Origen, y allí presionamos sobre la pestaña de Serie.

Ahora cambiaremos la posición de cada una de las barras para que se dispongan alineadas y sin
espacio sin separación entre las mismas. Esto lo logramos presionando en una de las barras del
gráfico (cualquiera de las series), y luego con el botón derecho del Mouse, seleccionamos la opción
de Formato de Serie de Datos, y en la solapa Opciones veremos justamente dos opciones:

En dichas opciones cambiaremos el dato de Superposición, el cual pasaremos a un valor de 100,
para que las barras queden alineadas, y el ancho de rango a valor 0, para que cada barra ocupe el
total de área de trazado, y no existan espacios intermedios entre una barra y otra.

Veamos el efecto del mismo:

En este siguiente paso vamos a quitar el rótulo de las leyendas en cada grupo de edad:
Esto lo logramos presionando con el botón derecho del Mouse sobre el área de gráfico y luego
vamos a Opciones de Gráfico y luego en la solapa de Eje desmarcamos la casilla de verificación
correspondiente al Eje de Categorías X, como vemos a continuación:

Vemos que el efecto inmediato de esta acción es quitar la referencia al eje X.

En este siguiente paso vamos a cambiar el formato de Eje categorías con la posibilidad de que
podamos ver siempre dígitos positivos, pero a ambos lados del cruce del eje.

Esto lo logramos seleccionando en primer lugar el eje de categorías X, y luego con el botón
derecho del Mouse damos clic en la opción de Formato de Ejes, y allí en la pestaña Número,
aplicamos como Tipo (0;0) para que, tanto los valores positivos como negativos aparezcan sin
signo (ni + ni ‐).

Aplicando los retoques de Formato de área, degradados, vistos en el capítulo anterior, llegamos a
una imagen similar del gráfico que debíamos generar:

Gráficos con Doble Eje

Dada la siguiente planilla, generaremos un gráfico de líneas que la represente:

Generamos entonces el gráfico de líneas correspondiente, obteniendo el siguiente resultado:

Veamos que mas allá de que graficamos ambas series, Ventas y Porcentajes, al tener ambas
valores totalmente disímiles, esto nos genera un impacto visual ya que la serie de porcentaje
contiene valores entre 0 y 1 y por lo tanto la línea queda pegada al eje de categorías.

Para que la serie de Porcentaje tome como referencia un eje secundario, seleccionamos la serie
dando clic sobre cualquiera de los valores de la línea que representa a dicha serie en el gráfico y
con el botón derecho accedemos a la opción Formato Serie de Datos. En este punto damos clic
sobre la pestaña Ejes, y allí agregamos o marcamos la opción de Eje Secundario.

El impacto del mismo será el siguiente:

Para separar ambas series y que los valores queden distanciados, y a su vez que cada una de las
series haga referencia a un eje diferente, presionamos sobre el eje secundario agregado, y con el
botón derecho seleccionamos la opción Formato de Ejes – en la pestaña de Escala – Cambiaremos
la escala para que el valor máximo este dado en el 0,5 (o sea 50 %).

Pasamos entonces a obtener el siguiente gráfico:

De esta manera, a la persona que tenga que dar una lectura del gráfico le resultará mas facil
analizar ambas series sabiendo que ambas toman escalas diferentes y hacen referencias a ejes
diferentes del gráfico (una al eje primario, y otra al secundario).

Gráficos de GANTT

Dada la siguiente planilla, generaremos un gráfico de GANTT que nos muestre la duración de las
tareas, y nos de la opción de adaptarse automáticamente ante cambios en fechas de inicio, o
duración de las mismas.

Este gráfico es muy usado, en proyectos para encontrar puntos críticos, así como también
determinar atrasos en las entregas y evaluar decisiones a tomar ante desvíos en el cronograma
propuesto.

En la siguiente planilla vemos que tenemos fecha inicial de cada tarea, fecha de fin de cada tarea,
y mediante una formula calculamos los días que demoramos en el desarrollo de cada tarea.

A partir de allí generamos un gráfico de barras, y llegaremos al siguiente gráfico:

Formularios

Este conjunto de herramientas nos aportará en Excel, un estilo gráfico que nos permitirá manejar
la planilla desde un entorno visual más ameno.

En el siguiente ejemplo veremos como utilizar la barra de herramientas, personalizando varias
opciones al respecto.

En la planilla aplicaremos varias herramientas del tema formularios, para esto, el primer paso será
dejar visible dicha barra de herramientas, y para eso vamos al menú Ver – Barra Herramientas –
Formularios, como vemos a continuación:

Esta opción nos desplegará la siguiente barra con la que trabajaremos en los siguientes pasos:

La primera herramienta que aplicaremos será la de Cuadro Combinado para las propuestas de
diferentes tipos de habitaciones con las que cuenta el hotel. Para esto, vamos a colocar una
planilla auxiliar que nos provea de la siguiente información:

Vamos a tomar entonces de la barra de herramientas, el Cuadro Combinado, y al seleccionar nos
permitirá dibujar dicho cuadro sobre la planilla:

Para que dicho cuadro despliegue las opciones, de tipos de habitaciones, daremos clic derecho
sobre el cuadro combinado que dibujamos, y seleccionamos la opción de Formato de Control.

Esto nos desplegará la siguiente pantalla:

Aquí completaremos el Rango de Entrada: en nuestro caso formado por el rango E1:E3 (los
distintos tipos de habitaciones que se desplegarán al presionar sobre el cuadro combinado).

La vinculación con la celda la haremos con una celda arbitraria (H1), en ella mas adelante
visualizaremos el número de índice o posición que el usuario seleccione del cuadro combinado.

Por último en este cuadro las líneas de unión verticales representan la cantidad de datos que se
van a visualizar por pantalla que se muestre en el cuadro combinado.

Veamos que al seleccionar en este caso la habitación SINGLE, aparecerá el número 1 en la celda
H1 que fue la celda con la que vinculamos el cuadro combinado. En caso que el usuario seleccione
la habitación doble, se reflejará el número 2 en H1, y número 3 en caso de seleccionar la SUITE.

Para que automáticamente podamos determinar el precio de la habitación por DIA, utilizaremos
una función de Excel que será INDICE:

=INDICE (F1:F3; H1)

Con esto obtendremos del rango F1:F3, el número de posición que se determina en la celda H1.

En este siguiente paso vamos a utilizar otro de los controles de la barra de formularios, que será el
Control de Números:

En esta pantalla controlaremos nuestro formulario. Aplicaremos un valor actual. El valor mínimo lo
estableceremos en 1, y el valor máximo en 30, y el incremento en 1. Esto quiere decir que el

mínimo de días de estadía será 1, y el máximo de días de estadía será 30. La celda con la cual
vincularemos será la celda H2 (celda arbitraria).

En la celda B5, aplicaremos como fórmula una referencia a la celda H2 ya que esta contendrá el
valor seleccionado en el formulario.

Para el caso de la elección de cochera optaremos por un control denominado Casilla de
Verificación (de la misma barra de formularios). Esto nos dará un checkbox con valores de
verdadero o falso, según la casilla este marcada o no.

Estableceremos el valor de la cochera en base a la celda H3, por lo tanto en nuestra celda B6
aplicaremos la siguiente formula:

=SI (H3; 5; 0) * B5

Esta formula nos presentará el valor 5 en caso de que la casilla de verificación este marcada y cero
en caso de que no este marcada, basándose en el valor de la celda H3 que será verdadero o falso,
y esto lo multiplicamos por la celda B5 que tiene la cantidad de días de estadía en el hotel.

La  idea es que mediante el ejemplo veamos el uso de diferentes formularios, pero también cada
uno lo puede adaptar a las necesidades de la planilla que este implementando.

En el siguiente caso para las formas de pago, dibujaremos un cuadro de lista, y entonces daremos
como rango de entrada las celdas que contienen las diferentes opciones en cuanto a formas de
pago.

En el caso del porcentaje de interés nuevamente utilizaremos la función INDICE como aplicamos
anteriormente.

Veamos la planilla finalizada, e implementando los diferentes formularios:

Existen diferentes botones de la barra de formularios que, si bien no fueron utilizados en este
ejemplo son útiles en diferentes casos como son:

• Etiqueta
• Cuadro de grupo
• Botón
• Botón de opción
• Barra desplazamiento

MÓDULO

MACROS

EN

EXCEL

Módulo Macros en Excel

Concepto General:

Macro:

Un programa escrito o grabado por el usuario que almacena una serie de comandos de Microsoft
Excel que pueden utilizarse posteriormente como un único comando. Mediante las macros
pueden automatizarse las tareas complejas y pueden reducirse el número de pasos necesarios
para realizar las tareas que se ejecutan con más frecuencia. Las macros se graban en el lenguaje de
programación de Visual Basic para Aplicaciones de Microsoft. También pueden escribirse las
macros directamente en el Editor de Visual Basic.

La idea de generar macros en Microsoft Excel radica en la automatización de tareas en la planilla
electrónica. De esta manera quedará implementada una solución en Visual Basic para aplicaciones
(VBA) que es el lenguaje de programación que se utiliza en la suite de Office para desarrollar
Macros.

Existen básicamente dos formas de desarrollar macros:

• Mediante el uso de la Grabadora de Macros
• Mediante el Editor de Visual Basic para aplicaciones

Comencemos con el uso de la grabadora en un ejemplo donde apliquemos tres tareas, en primer
lugar escribiremos Hola en la celda A1, luego pondremos Negrita y por último pintaremos de
fondo amarillo dicha celda.

Para esto, comenzaremos por encender la grabadora, para que capte cada una de las tareas que
vamos realizando:

La grabadora la encendemos mediante el menú de Herramientas – Macro – Grabar nueva macro,
como vemos a continuación:

Nos aparecerá la siguiente pantalla para configurar la grabación de dicho macro:

A cada macro que grabemos le podemos asignar un nombre, en forma predeterminada la
grabadora asignará Macro1, Macro2….

Luego podremos también asignar un Método Abreviado, para que el usuario que desee ejecutar
rápidamente un macro pueda acudir a este atajo de teclado (por ejemplo ctrl. + T).

Podremos grabar el macro en el mismo libro en el cual estamos trabajando, podremos grabarlo en
un libro independiente, o también como opción adicional podremos grabarlo en el Libro Personal,
que es algo así como una biblioteca de macros personales que podemos ejecutar en cualquier
archivo de Excel que deseemos el día de mañana.

En la descripción podemos dar pautas precisas de determinados detalles de las tareas que
ejecutará nuestro macro.

Cuando configuramos dicha pantalla, al presionar Aceptar, la grabadora de Macros generará un
código VBA por cada una de las tareas que vayamos realizando de ahora en mas (no capta los
movimientos del Mouse, ni del cursor que realicemos, pero si el ingreso a cualquiera de las
opciones de Excel).

Realizamos a continuación las tres tareas propuestas, y luego detenemos la grabación mediante el
menú de Herramientas – Macro – Detener Grabación.

Bueno, ahora veamos como repetimos las tareas ejecutando el macro grabado en esta etapa
anterior.

Una de las posibilidades que tenemos es ejecutar el macro mediante el menú de Herramientas –
Macro – Macros

Seleccionamos el macro a ejecutar y luego presionamos sobre el botón ejecutar tal cual aparece
en la pantalla a continuación:

En esta pantalla no solo podemos elegir el macro a ejecutar, y luego realizar la ejecución sino que
también en caso que queramos dar un método abreviado bastará con seleccionar el macro y con
el botón de opciones nos aparecerá el siguiente cuadro donde asignaremos el método abreviado
que deseemos:

En este caso el usuario que presione la combinación CTRL + t ejecutará el macro que
desarrollamos anteriormente.

No olvidemos que el macro no elimina el contenido de la celda para ejecutar, sino que lo hace
sobrescribiendo el contenido anterior de dicha celda.

Podríamos bien crear un macro que nos permita borrar para luego volver a ejecutar.

En el caso que deseemos cambiar el método abreviado volveremos a repetir el procedimiento de
ir al menú Herramientas – Macro – Macros (o mediante el acceso directo de ALT + F8),
seleccionamos el Macro al que le queramos cambiar el método abreviado y con el botón opciones
accedemos a la misma pantalla donde reasignaremos el abreviado.
Ahora, si nosotros quisiéramos ejecutar el macro de una forma más simple y rápida también
tenemos la posibilidad de insertar un botón desde la barra de formularios, y asignarle al mismo un
macro.

Esto lo haremos mediante el menú Ver – Barra Herramientas – Formularios, como vemos a
continuación:

En la barra de herramientas de formularios seleccionaremos el botón de comando y lo
dibujaremos en la planilla con la que estamos trabajando.

El botón de comando nos permitirá dibujarlo sobre cualquier lugar de la planilla con
la cual estemos trabando.

Es importante acotar que dicho botón quedará sobre la planilla y no formando parte
de la misma en una celda en particular.

Una vez que dibujemos dicho botón de comando, al soltar el Mouse nos permitirá
asignarle un macro al mismo.

En el caso de que hayamos soltado el Mouse y nos quedemos sin asignar un macro al
mismo, podemos mediante el botón derecho sobre el botón dibujado seleccionar la
opción de Asignar Macro.

A dicho botón podremos cambiarle el nombre, modificarle el tamaño cambiar el texto que aparece
dentro del botón.

Recordar que para seleccionar el botón simplemente con el CTRL presionado damos clic sobre
dicho botón y ya pasamos al modo edición donde aparecen los puntos de agarre sobre dicho
botón.

De ahora en mas, simplemente el usuario presionará dicho botón para ejecutar el macro asignado.

NOTA: Si queremos asignar un macro a una imagen o a un macro podemos hacer el mismo
procedimiento, o sea, insertar la imagen o el gráfico y con el botón derecho seleccionar la opción
de asignar macro para indicar que macro asignaremos a dicha imagen.

Por otro lado otra manera que tenemos de generar una forma rápida de ejecución de macros es
generando un icono en la barra de herramientas de Excel.

Para esto presionaremos sobre la barra de herramientas estándar con el BOTÓN DERECHO DEL
MOUSE, y seleccionamos la opción PERSONALIZAR.

Nos aparecerá la siguiente pantalla:

En la solapa Comandos, buscaremos la categoría Macros y a la derecha en la lista de comandos
veremos dos tipos que serán: Personalizar elemento de menú y Personalizar botón, esta última
opción será la que utilicemos para arrastrar el icono (mediante el botón izquierdo del Mouse
presionado) hacia un lugar de la barra de herramientas estándar de Excel.

El botón nos quedó en la barra de herramientas y simplemente cuando presionemos por primera
vez en dicho botón nos permitirá asignarle el macro correspondiente.

En caso de que nosotros queramos modificar el macro y de ahora en más deseemos cambiar la
estructura, para que lo aplique a un conjunto de celdas, o para que nos escriba diferentes palabras
por cada celda, no nos quedará otra que acudir al editor de Visual Basic para Aplicaciones para
cambiar la sintaxis de la grabación.

Con la combinación ALT+F11 pasaremos rápidamente al entorno VBA, también podríamos pasar a
dicha pantalla mediante el menú de Herramientas – Macros – Editor Visual Basic

Nos desplegará la pantalla que vemos a continuación:

En esta pantalla trabajaremos escribiendo nuestros propios macros.

Como vemos sobre la parte izquierda de esta pantalla, tenemos una carpeta de Módulos donde
encontraremos los diferentes macros que se hayan desarrollado. En nuestro caso solo contamos
con el Módulo 1 que es donde se encuentra el macro grabado anteriormente.

Al dar doble clic sobre el Módulo 1 veremos a la derecha de la pantalla el código que
anteriormente la grabadora fue escribiendo automáticamente mientras nosotros realizábamos las
tareas.

CÓDIGO VBA

El código VBA se maneja en idioma inglés. En general el lenguaje básicamente se maneja orientado
a eventos.
Cada objeto se separa mediante el .  (Punto) de las diferentes propiedades que posee.

Conceptos esenciales.

Clase: Es una agrupación de objetos con las mismas características y propiedades.

Objeto: Son elementos que se caracterizan por poseer propiedades en común.

Método: Cualquier operación pasible de ser ejecutada sobre un objeto.

Ejemplo:

Clase: Medios de Transporte (generalización)
Subclase: Autos (especialización)

Variable:

Un lugar de almacenamiento con nombre que puede contener cierto tipo de datos. Cada variable
tiene un nombre único que la identifica. Nombres de variable deben comenzar con un carácter
alfabético, deben ser únicos dentro del mismo ámbito, no deben contener más de 255 caracteres
y no pueden contener un punto.

Cada macro que vayamos escribiendo en el editor de visual Basic, debe comenzar con la sentencia
Sub, y terminar con la sentencia End Sub.

Veamos en nuestro primer ejemplo. Dentro de la carpeta Módulos tenemos nuestro Modulo 1 y
dentro del mismo desarrollamos dos macros.

Nuestro Macro1 fue grabado mediante el uso de la grabadora para macros y luego comenzamos
mediante la orden Sub el macro denominado Primero que simplemente escribe la palabra HOLA
en la celda A1.

En forma predeterminada cuando hacemos referencia a la celda A1, Microsoft Excel lo tomará
sobre la hoja activa (hoja en la que estamos posicionados al ejecutar el macro).

Formas de referir a la hoja:

ActiveSheet.Range(“A1”).value

Aquí hacemos referencia a la celda A1 de la hoja activa

Sheets(1).Range(“A1”).Value

Aquí hacemos referencia a la hoja con índice 1, celda A1 del libro activo

Sheets(“Hoja1”).Range(“A1”).Value

Aquí hacemos referencia a la hoja denominada Hoja1, celda A1

Repetimos que en forma predeterminada Excel toma Activesheet cuando nos referimos a una
celda determinada.

Métodos.

La mayoría de objetos tienen comportamientos o realizan acciones, por ejemplo, una acción
evidente de un objeto coche es el de moverse o lo que es lo mismo, trasladarse de un punto inicial
a un punto final.

Cualquier proceso que implica una acción o pauta de comportamiento por parte de un objeto se
define en su clase para que luego pueda manifestarse en cualquiera de sus objetos. Así, en la clase
coche se definirían en el método mover todos los procesos necesarios para llevarlo a cabo (los
procesos para desplazar de un punto inicial a un punto final), luego cada objeto de la clase coche
simplemente tendría que invocar este método para trasladarse de un punto inicial a un punto
final, cualesquiera que fueran esos puntos.

Repasemos a continuación todos estos conceptos pero ahora desde el punto de vista de algunos
de los objetos que nos encontraremos en Excel como WorkSheet (Objeto hoja de cálculo) o Range
(Objeto casilla o rango de casillas).

Un objeto Range está definido por una clase donde se definen sus propiedades, recordemos que
una propiedad es una característica, modificable o no, de un objeto. Entre las propiedades de un

objeto Range están Value , que contiene el valor de la casilla , Column y Row que contienen
respectivamente la fila y la columna de la casilla, Font que contiene la fuente de los caracteres que
muestra la casilla, etc.

Range, como objeto, también tiene métodos, recordemos que los métodos sirven llevar a cabo
una acción sobre un objeto. Por ejemplo el método Activate, hace activa una celda determinada,
Clear, borra el contenido de una celda o rango de celdas, Copy, copia el contenido de la celda o
rango de celdas en el portapapeles,...

Conjuntos.

Una conjunto es una colección de objetos del mismo tipo, para los que conozcan algún lenguaje de
programación es un array de objetos. Por ejemplo, dentro de un libro de trabajo puede existir más
de una hoja (WorkSheet), todas las hojas de un libro de trabajo forman un conjunto, el conjunto
WorkSheets.

Cada elemento individual de un conjunto se referencia por un índice, de esta forma, la primera,
segunda y tercera hoja de un libro de trabajo, se referenciarán por WorkSheets(1), WorkSheets(2)
y WorkSheets(3).

Objetos de Objetos.

Es muy habitual que una propiedad de un objeto sea otro objeto. Siguiendo con el coche, una de
las propiedades del coche es el motor, y el motor es un objeto con propiedades como cubicaje,
caballos, número de válvulas, etc. y métodos, como aumentar_revoluciones, cargar_combustible,
mover_pistones, etc.

En Excel, el objeto WorkSheets tiene la propiedad Range que es un objeto, Range tiene la
propiedad Font que es también un objeto y Font tiene la propiedad Bold (negrita). Tenga esto muy
presente ya que utilizaremos frecuentemente Propiedades de un objeto que serán también
Objetos.

Dicho de otra forma, hay propiedades que devuelven objetos, por ejemplo, la propiedad Range de
un objeto WorkSheet devuelve un objeto de tipo Range.

Insertar un nuevo módulo.

Un módulo sirve para agrupar procedimientos y funciones. El procedimiento y la función son
entidades de programación que sirven para agrupar instrucciones de código que realizan una
acción concreta.
Para insertar un módulo active opción del menú Insertar/ Módulo. Se activará una nueva ventana,
si aparece demasiado pequeña, maximícela.

Insertar un procedimiento.

Ya hemos dicho que un procedimiento es un bloque de instrucciones de código que sirven para
llevar a cabo alguna tarea específica. Un procedimiento empieza siempre con la instrucción

Sub Nombre_Procedimiento

Y termina con la instrucción End Sub.

A continuación crearemos un procedimiento para poner el texto "Hola" en la casilla A1.

Ejemplo 1

Sub Primero

Range("A1").Value = "Hola"

End Sub

Observe el código.

Range("A1").Value="Hola"

En esta línea estamos indicando que trabajamos con un objeto Range. Para indicarle que nos
referimos a la casilla A1, encerramos entre paréntesis esta referencia (más adelante verá otra
forma de referirnos a las casillas). De este objeto, indicamos que queremos establecer un nuevo
valor para la propiedad Value, observe que para separar el objeto de su propiedad utilizamos la
notación punto.
Recuerde que el conjunto Range es un objeto que pende del objeto WorkSheets, así por ejemplo
el siguiente código haría lo mismo que el anterior.

WorkSheets(1).Range("A1").Value = "Hola"

Bueno, de hecho no hace lo mismo, en la primera opción, el texto "Hola" se pone dentro de la
casilla A1 de la hoja activa, mientras que en el segundo es en la casilla A1 de primera hoja ( del
conjunto de hojas).

La segunda notación es más larga, pero también más recomendable ya que se especifican todos
los objetos. En muchas ocasiones se pueden omitir algunos objetos precedentes, no le
aconsejamos hacerlo, sus programas perderán claridad y concisión.

Si desea hacer referencia a la hoja activa puede utilizar ActiveSheet, así, el primer ejemplo lo
dejaremos de la manera siguiente.

Sub Primero

ActiveSheet.Range("A1").Value = "Hola"

End Sub

Si desea poner "Hola" (o cualquier valor) en la casilla activa, puede utilizar la propiedad (objeto)
Activecell de WorkSheets. Así para poner "Hola" en la casilla activa de la hoja activa seria,

Sub Primero

ActiveSheet.ActiveCell.Value = "Hola"

End Sub

Para terminar con este primer ejemplo. WorkSheets están dentro del Objeto WorkBooks (libros
de trabajo) y WorkBooks están dentro de Application.

Application es el objeto superior, es el que representa la aplicación Excel. Así, el primer ejemplo,
siguiendo toda la jerarquía de objetos quedaría de la forma siguiente.

Sub Primero

Application.WorkBooks(1).WorkSheets(1).Range("A1").Value = "Hola"

End Sub

Insistiendo con la nomenclatura, Application casi nunca es necesario especificarlo, piense que
todos los objetos penden de este, WorkBooks será necesario implementarlo si en las macros se
trabaja con diferentes libros de trabajo (diferentes archivos), a partir de WorkSheets, es
aconsejable incluirlo en el código, sobre todo si se quiere trabajar con diferentes hojas, verá, sin
embargo, que en muchas ocasiones no se aplica.

Ejecutar un procedimiento o función.

Pruebe ejecutar el primer procedimiento de ejemplo.

1. Sitúe el cursor dentro del procedimiento.
2.  Active opción de la barra de menús Ejecutar/ Ejecutar Sub Userform. También puede hacer
clic sobre el botón o pulsar la tecla F5.

Para ejecutar el procedimiento desde la hoja de cálculo.

Debe estar en una hoja, no en el editor de Visual Basic

1. Active opción de la barra de menús Herramientas/ Macro/ Macros. Se despliega una
ventana que muestra una lista donde están todas las macros incluidas en el libro de
trabajo.
2. Seleccione la macro de la lista y pulse sobre el botón Ejecutar.

Ejemplo 2

En este segundo ejemplo simplemente ampliaremos la funcionalidad de la macro del ejemplo 1.
Además de escribir "Hola" en la casilla A1 de la celda A1, la pondremos en negrita y le daremos
color al texto.

Para ello utilizaremos las propiedades Bold y Color del objeto Font.

Sub Segundo

ActiveSheet.Range("A1").Value = "Hola"
ActiveSheet.Range("A1").Font.Bold = True
ActiveSheet.Range("A1").Font.Color = RGB(255,0,0)

End Sub

True.

True, que traducido es verdadero, simplemente indica que la propiedad Bold está activada. Si se
deseara desactivar, bastaría con igualarla al valor False.

La función RGB.

Observe que para establecer el color de la propiedad se utiliza la función RGB(Red, Green, Blue),
los tres argumentos para esta función son valores del 0 a 255 que corresponden a la intensidad de
los colores Rojo, Verde y Azul respectivamente.

Referenciar un rango de celdas.

Sólo tiene que cambiar a la forma Casilla_Inicial:Casilla_Final. Por ejemplo aplicar el último
ejemplo al rango de casillas que va de la A1 a la A8, ponga.

Sub Segundo

ActiveSheet.Range("A1:A8").Value = "Hola"
ActiveSheet.Range("A1:A8").Font.Bold = True
ActiveSheet.Range("A1:A8").Font.Color = RGB(255,0,0)

End Sub

Variables.

A continuación vamos a repetir el programa Ejemplo1, pero en lugar de poner "Hola" en la casilla
A1 de la hoja activa, dejaremos que el usuario entre un texto desde teclado y a continuación
guardaremos ese valor en esa casilla.

Observe que el valor que ingrese el usuario debe guardarse en algún lugar para poder ponerlo
después en la casilla A1; pues bien, ese valor se guardará en una variable.

Una variable es simplemente un trozo de memoria que la función o procedimiento se reserva para
guardar datos, la forma general de declarar una variable es

DIM variable AS tipo.

Siendo variable el nombre que se asigna a la misma y Tipo el tipo de datos que se guardarán
(números, texto, fecha, booleanos,...).

En nuestro ejemplo, declararemos la variable de tipo String (tipo texto), y lo haremos de la forma
siguiente.

Dim Texto As String

Con esto estamos indicando que se reserve un trozo de memoria (el que sea) , que se llama Texto
y que el tipo de datos que se guardarán ahí serán caracteres.

La Función InputBox.

Esta función muestra una ventana para que el usuario pueda teclear datos. Cuando se pulsa sobre
Aceptar, los datos entrados pasan a la variable a la que se ha igualado la función. Vea la línea
siguiente.

Texto = InputBox("Introduzca el texto", "Entrada de datos").

Si en la ventana que muestra InputBox pulsa sobre el botón Aceptar, los datos tecleados se
guardarán en la variable Texto.

Sintaxis de InputBox.

InputBox(Mensaje, Título, Valor por defecto, Posición horizontal, Posición Vertical, Archivo
Ayuda, Número de contexto para la ayuda).

Mensaje: Es el mensaje que se muestra en la ventana. Si desea poner más de una línea ponga
Chr(13) para cada nueva línea, vea el ejemplo siguiente.

Título: Es el título para la ventana InputBox. Es un parámetro opcional.

Valor por defecto: Es el valor que mostrará por defecto el cuadro donde el usuario entra el valor.
Parámetro opcional.

Posición Horizontal: La posición X de la pantalla donde se mostrará el cuadro, concretamente es la
posición para la parte izquierda. Si se omite el cuadro se presenta horizontalmente centrado a la
pantalla.

Posición Vertical: La posición Y de la pantalla donde se mostrará el cuadro, concretamente es la
Posición para la parte superior. Si se omite el cuadro se presenta verticalmente centrado a la
Pantalla.

Archivo Ayuda: Es el archivo que contiene la ayuda para el cuadro. Parámetro opcional.

Número de contexto para la ayuda: Número asignado que corresponde al identificador del archivo
de ayuda, sirve para localizar el texto que se debe mostrar. Si se especifica este parámetro, debe
especificarse obligatoriamente el parámetro Archivo Ayuda.

Ejemplo 3

Sub Entrar_Valor

Dim Texto As String

' Chr(13) sirve para que el mensaje se muestre en dos Líneas

Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos")

ActiveSheet.Range("A1").Value = Texto

End Sub

Este ejemplo también se puede hacer sin variables.

Sub Entrar_Valor

ActiveSheet.Range("A1").Value = InputBox("Introducir un texto " & Chr(13) & "Para la casilla
A1", "Entrada de datos")

End Sub

Ejemplo 4

Repetiremos el ejemplo 3, pero en lugar de entrar los valores sobre la casilla A1, haremos que el
usuario pueda elegir en que casilla quiere entrar los dat os, es decir, se le preguntará al usuario
mediante un segundo Inputbox sobre que casilla quiere entrar el valor del primer Inputbox. Serán
necesarias dos variables, una para guardar la casilla que escoja el usuario y otra para guardar el
valor.

Option Explicit

Sub Entrar_Valor

Dim Casilla As String
Dim
 Texto As String

Casilla = InputBox("En que casilla quiere entrar el valor", "Entrar Casilla")

Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla " & Casilla , "Entrada de datos")

ActiveSheet.Range(Casilla).Value = Texto

End Sub

La sentencia Option Explicit.

En visual basic no es necesario declarar las variables, por ejemplo, en el programa anterior se
hubiera podido prescindir de las líneas

Dim Casilla As String
Dim
 Texto As String

A pesar de ello, le recomendamos que siempre declare las variables que va a utilizar, de esta
forma sabrá cuales utiliza el procedimiento y qué tipo de datos guarda cada una, piense que a
medida que vaya aprendiendo, creará procedimientos cada vez más complicados y que requerirán
el uso de más variables, si no declara las variables al principio del procedimiento ocurrirán dos
cosas. Primero, las variables no declaradas son asumidas como tipo Variant (este es un tipo de
datos que puede almacenar cualquier valor, número, fechas, texto, etc. pero tenga en cuenta que
ocupa 20 Bytes y para guardar una referencia a una casilla, la edad de alguien, etc. no son
necesarios tantos bytes); segundo, reducirá considerablemente la legibilidad de sus
procedimientos ya que las variables las irá colocando a medida que las necesite, esto, a la larga
complicará la corrección o modificación del procedimiento.

Bueno, pues toda la explicación anterior es para que declare todas las variables que va a utilizar.
La sentencia Option Explicit al principio del módulo fuerza a que se declaren todas las variables. Si
al ejecutar el programa, se encuentra alguna variable sin declarar se producirá un error y no se
podrá ejecutar el programa hasta que se declare.

Si todavía no se ha convencido sobre la conveniencia de declarar las variables y utilizar Option
Explicit
, pruebe el procedimiento siguiente, cópielo tal cual (Texto y Testo están puestos adrede
simulando que nos hemos equivocado al teclear).

Sub Entrar_Valor

Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos")

ActiveSheet.Range("A1").Value = Testo

End Sub

Observe que el programa no hace lo que se pretendía que hiciera. Efectivamente, Texto y Testo
son dos variables diferentes, como no se ha declarado ninguna ni se ha utilizado Option Explicit
Visual Basic no da ningún tipo de error y ejecuta el programa. Pruebe el siguiente módulo e
intente ejecutarlo.

Option Explicit

Sub Entrar_Valor

Dim Texto As String

Texto = InputBox("Introducir un texto " & Chr(13) & "Para la casilla A1", "Entrada de datos")
ActiveSheet.Range("A1").Value = Testo

End Sub

Observe que el programa no se ejecuta, al poner Option Explicit, forzamos a que se declaren todas
las variables. Visual Basic detecta que la variable Testo no ha sido declarada y así lo indica
mostrando Error, entonces es cuando es más fácil darnos cuenta del error que hemos cometido al
teclear y cambiamos Testo por Texto. Ahora imagine que el error se produce en un programa de
cientos de líneas que necesita otras tantas variables.

Tipos de datos en Visual Basic para Excel. (Tabla copiada de la ayuda en
línea
 de Visual Basic para Excel).

Tipo de datos

Tamaño Almacenamiento Intervalo

Byte

1 byte

0 a 255

Boolean

2 bytes

True o False

Integer

2 bytes

‐32.768 a 32.767

Long(entero largo)

4 bytes

‐2.147.483.648 a 2.147.483.647

Single (coma flotante/
precisión simple)

4 bytes

‐3,402823E38 a ‐1,401298E‐45 para
valores negativos;
1,401298E‐45 a 3,402823E38 para
valores positivos

Double (coma flotante/
precisión doble)

8 bytes

‐1,79769313486232E308 a ‐
4,94065645841247E‐324
para valores negativos;
4,94065645841247E‐324 a
1,79769313486232E308 para valores
positivos

Currency (entero a
escala)

8 bytes

‐922.337.203.685.477,5808 a
922.337.203.685.477,5807

Decimal

14 bytes

+/‐
79.228.162.514.264.337.593.543.950.335
sin punto
decimal; +/‐
7,9228162514264337593543950335 con
28 posiciones a la derecha del signo
decimal; el
número más pequeño distinto de cero
es+/‐
0,0000000000000000000000000001

Date

8 bytes

1 de enero de 100 a 31 de diciembre de

9999

Object

4 bytes

Cualquier referencia a tipo Object

String (longitud
variable)

10 bytes + longitud de
la cadena

Desde 0 a 2.000 millones

String(longitud fija)

Longitud de la cadena

Desde 1 a 65.400 aproximadamente

Variant(con números)

16 bytes

Cualquier valor numérico hasta el
intervalo de un tipo
Double

Variant(con
caracteres)

22 bytes + longitud de
cadena

El mismo intervalo que para un tipo
String de longitud
variable

Definido por el
usuario
 (utilizando
Type)

Número requerido por
los elementos

El intervalo de cada elemento es el
mismo que el
intervalo de su tipo de datos.

Conversión de Tipos de datos.

Copie el siguiente Ejemplo. Simplemente se piden dos números, se suman y se guardan el la casilla
A1 de la hoja activa.

Ejemplo 5

Option Explicit

Sub Sumar()

Dim Numero1 As Integer
Dim
 Numero2 As Integer
Numero1 = InputBox("Entrar el primer valor", "Entrada de datos")
Numero2 = InputBox("Entrar el primer valor", "Entrada de datos")
ActiveSheet.Range("A1").Value = Numero1 + Numero2

End Sub

Ejecute el procedimiento y ponga respectivamente los valores 25 y 25. Observe que todo ha ido
correctamente y en la casilla A1 de la hoja activa aparece un 50.

Ahora, vuelva a ejecutar el programa y cuando se le pide el primer valor teclee "Hola". Observe
que el programa se detiene indicando un error en el tipo de datos. Efectivamente, observe que la
función InputBox devuelve siempre datos tipo String, en el primer ejemplo no ha habido ningún
problema, al entrar caracteres numéricos1, estos pueden asignarse a variables tipo Integer porque
Visual Basic hace automáticamente la conversión, pero al entrar texto e intentarlo asignar a una
variable Integer Visual Basic muestra un error indicando que la variable no es adecuada para los
datos que se desean guardar.

Para solucionar estos problemas se deben utilizar funciones de conversión de tipo. Estas
funciones, como su nombre indica, convierten datos de un tipo a otro, de String a Integer, de
Integer a String, de Date a String ,... Así el procedimiento anterior quedaría.

Option Explicit

Sub Sumar()

Dim Numero1 As Integer
Dim
 Numero2 As Integer
Numero1 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
Numero2 = Val(InputBox("Entrar el primer valor", "Entrada de datos"))
ActiveSheet.Range("A1").Value = Numero1 + Numero2

End Sub

La función Val(Dato String), convierte una cadena de caracteres a valor numérico. Si la cadena a
convertir contiene algún carácter no numérico devuelve 0. Así, si al pedir un valor se teclea "Hola",
la función Val, devolverá un cero.

Funciones de conversión de tipos. (Tabla copiada de la ayuda en línea de
Visual
 Basic para Excel).

Val(Cadena). Convierte la cadena a un valor numérico.
Str(Número). Convierte el número a una expresión cadena.
CDate(Fecha). Convierte cualquier cadena a fecha.

Objeto Cells(fila, columna).

Sirve, como el objeto range, para referenciar una casilla o rango de casillas, pero en lugar de
utilizar la referencia de la forma A1, B1, X320,... utiliza la fila y la columna que ocupa la casilla
dentro de la hoja (o objeto WorkSheet). Por ejemplo, para poner hola en la casilla A1 de la hoja
activa seria:

ActiveSheet.Cells(1,1).Value="Hola"

Utilizar Cells para referenciar un rango.

Esto sería el equivalente a Range("Casilla_Inicial:Casilla_Final").

La forma que se obtiene utilizando Cells es un poco más larga, pero se verá que a veces resulta
mucho más funcional que utilizando únicamente range. Para referirnos al rango A1:B8,
pondremos:

Range(Cells(1, 1), Cells(8, 2)).Value = "Hola"

Otra forma interesante de Cells es la siguiente:

Range("A5:B10").Cells(2, 1).Value = "Hola"

Pondrá en la celda A6 el valor "Hola", observe que en este ejemplo Cells comienza a contar filas y
columnas a partir del rango especificado en el objeto Range.

Variables de Objetos.

Una variable objeto sir ve para hacer referencia a un objeto, esto significa que podremos acceder a
las propiedades de un objeto e invocar a sus métodos a través de la variable en lugar de hacerlo
directamente a través del objeto. Posiblemente no se utilice demasiado esta clase de variables
(está claro que esto dependerá de las preferencias del programador), pero hay casos en los que no
hay más remedio que utilizarlas, por ejemplo en estructuras For Each ... Next como veremos, o
cuando sea necesario construir funciones que devuelvan rangos, referencias a hojas, etc.

Para declarar una variable objeto se utiliza también la palabra Dim de la forma siguiente,

Dim Var_Objeto As Objeto

Por Ejemplo:

Dim R As Range

Dim Hoja As WorkSheet

Para asignar un objeto a una variable debe u tilizar la instrucción Set.

Set Variable_Objeto = Objeto

Por Ejemplo

Set R= ActiveSheet.Range("A1:B10")
Set Hoja = ActiveSheet
Set Hoja = WorkSheets(1)

Veamos a continuación un ejemplo de cómo utilizar este tipo de variables,

Ejemplo 6.

Algo muy simple, llenar el rango de A1 a B10 con la palabra "Hola" y después poner negrita,
observe como se asigna una variable objeto al objeto y luego como se trabaja con esa variable de
la misma forma que trabajaría directamente sobre el objeto.

Sub obj()

Dim R As Range
Set
 R = ActiveSheet.Range("A10:B15")
R.Value = "Hola"
R.Font.Bold = True

End Sub

Estructuras condicionales.

Ahora que ya ha experimentado con unos cuantos objetos y propiedades, nos detendremos a
estudiar las estructuras condicionales. Las estructuras condicionales son instrucciones de
programación que permiten controlar la ejecución de un fragmento de código en función de si se
cumple o no una condición.

Estudiaremos en primer lugar la instrucción if Condición then..End if (Si Condición Entonces...Fin
Si
)

La estructura condicional que se construye con la instrucción Si Condición Entonces... Fin Si tiene
la forma siguiente.

Si Condición Entonces
Senténcia1
Senténcia2
.
.
SenténciaN

Fin Si

.
.
Cuando el programa llega a la instrucción Si Condición Entonces , se evalúa la condición, si esta se
cumple (es cierta), se ejecutan todas las sentencias que están encerradas en el bloque, si no se
cumple la condición, se saltan estas sentencias. Esta estructura en Visual Basic tiene la sintaxis
siguiente:

If Condición Then
Senténcia1
Senténcia2
.
.
SenténciaN

End If

Ejemplo 6

Entrar una cantidad que representa el precio de algo por el teclado con la instrucción InputBox y
guardarlo en la celda A1 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A1)
es superior a 1000, pedir descuento con otro InputBox y guardarlo en la casilla A2 de la hoja
activa.

Calcular en A3, el precio de A1 menos el descuento de A2.

Sub Condicional()

ActiveSheet.Range("A1").Value = 0 ' Poner las casillas donde se guardan los valores 0.
ActiveSheet.Range("A2").Value = 0
ActiveSheet.Range("A3").Value = 0
ActiveSheet.Range("A1").Value = Val(InputBox("Entrar el precio", "Entrar"))

' Si el valor de la casilla A1 es mayor que 1000, entonces, pedir descuento

If ActiveSheet.Range("A1").Value > 1000 Then

ActiveSheet.Range("A2").Value = Val(InputBox("Entrar Descuento", "Entrar"))

End If

ActiveSheet.Range("A3").Value = ActiveSheet.Range("A1").Value ‐ _
ActiveSheet.Range("A2").Value

End Sub

Ejemplo 7.

El mismo que el anterior pero utilizando variables.

Option Expl icit

Sub Condicional()
Dim Precio As Integer
Dim
 Descuento As Integer

Precio = 0
Descuento = 0
Precio = Val(InputBox("Entrar el precio", "Entrar"))

' Si el valor de la variable precio es mayor que 1000, entonces, pedir descuento

If Precio > 1000 Then
Descuento = Val(InputBox("Entrar Descuento", "Entrar"))

End If

ActiveSheet.Range("A1").Value = Precio
ActiveSheet.Range("A2").Value = Descuento
ActiveSheet.Range("A3").Value = Precio ‐ Descuento

End Sub

Viendo los dos programas anteriores puede que le surja la duda de si emplear variables o
directamente valores almacenados en las celdas. La solución es fácil, lo que le parezca más
conveniente en cada caso concreto que desee solucionar. Las variables, aunque muchas veces
"innecesarias", quizás dejan los programas más legibles y claros. Y la legibilidad de un programa es
lo más valioso del mundo para un programador (profesionalmente hablando), sobre todo si se da
el caso (inevitable el 99,999...% de las ocasiones) que se tenga que modificar un programa para
dotarle de más funcionalidades, facilitar su manejo, etc. En la mayoría de ejemplos que encontrará
en este manual verá que se utilizan variables preferentemente. Aunque muchas veces su función
sea simplemente recoger datos de las celdas para operarlas y dejarlas en otras celdas y,
consecuentemente, aumente el número de operaciones, creemos que con ello se gana en
legibilidad y flexibilidad.

Ejemplo 8.

Macro que compara los valores de las casillas A1 y A2 de la hoja activa. Si son iguales pone el color
de la fuente de ambas en azul.

Sub Condicional2()

If ActiveSheet.Range("A1").Value = ActiveSheet.Range("A2").Value Then

ActiveSheet.Range("A1").Font.Color = RGB(0, 0, 255)
ActiveSheet.Range("A2").Font.Color = RGB(0, 0, 255)

End If

End Sub

Estructura If..Else

Esta estructura se utiliza cuando se requiere una respuesta alternativa a una condición. Su
estructura es la siguiente.

Si Condición Entonces

Senténcia1
Senténcia2
.
.
SenténciaN

Sino

Senténcia1
Senténcia2
.
.
SenténciaN

Fin Si
Observe que, si se cumple la condición, se ejecuta el bloque de sentencias delimitado por Si
Condición Entonces y Si no se cumple la condición se ejecuta el bloque delimitado por Sino y Fin
Si
.

En Visual Basic la instrucción Si Condición Entonces ... Sino ... Fin Si se expresa con las
instrucciones siguientes.

If Condición Then

Senténcia1
Senténcia2
.
.
SenténciaN

Else

Senténcia1
Senténcia2
.
.
SenténciaN

End If

Ejemplo 9.

Entrar una cantidad que representa el precio de algo por el teclado con la instrucción InputBox y
guardarlo en la celda A1 de la hoja activa. Si el valor entrado desde el teclado (y guardado en A1)
es superior a 1000, se aplica un descuento del 10% si no se aplica un descuento del 5%, el
descuento se guarda en la casilla A2 de la hoja activa. Colocar en A3, el total descuento y en A4 el
total menos el descuento.

Sub Condicional_Else()

Dim Precio As Single
Dim
 Descuento As Single

Precio = 0

Precio = Val(InputBox("Entrar el precio", "Entrar"))

' Si el valor de la variable precio es mayor que 1000, entonces, aplicar descuento del 10%

If Precio > 1000 Then

Descuento = Precio * (10 / 100)

ActiveSheet.Range("A2").Value = 0,1

Else ' Sino Aplicar descuento del 5%

Descuento = Precio * (5 / 100)

ActiveSheet.Range("A2").Value = 0,05

End If

ActiveSheet.Range("A1").Value = Precio
ActiveSheet.Range("A3").Value = Descuento
ActiveSheet.Range("A4").Value = Precio ‐ Descuento

End Sub

Ejemplo 10.

Restar los valores de las casillas A1 y A2. Guardar el resultado en A3. Si el resultado es positivo o 0,
poner la fuente de A3 en azul, sino ponerla en rojo.

Sub Condicional_Else2()

ActiveSheet.Range("A3").Value = AvtiveSheet.Range("A1").Value ‐ _
ActiveSheet.Range("A2").Value

If ActiveSheet("A3").Value < 0 Then

ActiveSheet.Range("A3").Font.Color = RGB(255,0,0)

Else

ActiveSheet.Range("A3").Font.Color = RGB(0,0,255)

End If

End Sub

∙  Estructuras If anidadas.

No tiene que sorprenderle, dentro de una estructura if puede ir otra, y dentro de esta otra, y
otra... Vea el ejemplo siguiente.

Ejemplo 11.

Comparar los valores de las casillas A1 y A2 de la hoja activa. Si son iguales, escribir en A3 "Los
valores de A1 y A2 son iguales", si el valor de A1 es mayor que A2, escribir "A1 mayor que A2",
sino, escribir "A2 mayor que A1" .

Sub Condicional()

If ActiveSheet.Range("A1").Value = ActiveSheet.Range("A2").Value Then

ActiveSheet.Range("A3").Value = "Los Valores de A1 y A2 son iguales"

Else

If ActiveSheet.Range("A1").Value > ActiveSheet.Range("A2").Value Then

ActiveSheet.Range("A3").Value = "A1 mayor que A2"

Else

ActiveSheet.Range("A3").Value = "A2 mayor que A1"

End If

End If

End Sub

Observe que la segunda estructura If..Else..End If queda dentro del Else de la primera estructura.
Esta es una regla general, cuando pone un End If, este cierra siempre el último If ( o Else) abierto.
∙  Operadores lógicos.

Estos operadores se utilizan cuando se necesitan evaluar dos o más condiciones para decidir si se
ejecutan o no determinadas acciones.

Operador Lógico And (Y).

Utilizaremos este operador cuando sea preciso que para ejecutar un bloque de instrucciones se
cumpla más de una condición. Observe que deberán cumplirse todas las condiciones. Vea el
ejemplo siguiente.

Ejemplo 12.

Entrar el Nombre, la cantidad y el precio de un producto desde el teclado y guardarlos
respectivamente en
A1, A2 y A3. Calcular el total y guardarlo en A4. Si el total es superior a 10.000 y el nombre del
producto es "Patatas", pedir un descuento, calcularlo el total descuento y guardarlo en A5, luego
restar el descuento del total y guardarlo en A6.

Sub Ejemplo_12()

Dim Producto As String
Dim
 Cantidad As Integer
Dim
 Precio As Single
Dim
 Total As Single
Dim
 Descuento As Single
Dim
 Total_Descuento As Single

Precio = 0
Producto = InputBox("Entrar Nombre del Producto","Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Precio = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad

ActiveSheet.Range("A1").Value = Producto
ActiveSheet.Range("A2").Value = Precio
ActiveSheet.Range("A3").Value = Cantidad
ActiveSheet.Range("A4").Value = Total

' Si total mayor que 10.000 y el producto es Patatas, aplicar descuento.

If Total > 10000 And Producto = "Patatas" Then

Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total ‐ Total_Descuento
ActiveSheet.Range("A5").Value = Total_Descuento
ActiveSheet.Range("A6").Value = Total

End If

End Sub

Observe que para que se ejecute el bloque de instrucciones entre If.. End If deben cumplirse las
dos condiciones que se evalúan, si falla cualquiera de las dos (o las dos a la vez), no se ejecuta
dicho bloque.

Operador Lógico Or (O).

Utilizaremos este operador cuando sea preciso que para ejecutar un bloque de instrucciones se
cumpla alguna de una serie de condiciones. Observe que sólo es necesario que se cumpla alguna
de las condiciones que se evalúan. Vea el ejemplo siguiente.

Ejemplo 13.

Entrar el Nombre, la cantidad y e l precio de un producto desde el teclado y guardarlos
respectivamente en A1, A2 y A3. Calcular el total y guardarlo en A4. Si el total es superior a 10.000
o el nombre del producto es "Patatas", pedir un descuento, calcularlo el total descuento y
guardarlo en A5, luego restar el descuento del total y guardarlo en A6.

Sub Ejemplo_13()

Dim Producto As String
Dim
 Cantidad As Integer
Dim
 Precio As Single
Dim
 Total As Single
Dim
 Descuento As Single
Dim
 Total_Descuento As Single

Precio = 0
Producto = InputBox("Entrar Nombre del Producto","Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Precio = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad

ActiveSheet.Range("A1").Value = Producto
ActiveSheet.Range("A2").Value = Precio
ActiveSheet.Range("A3").Value = Cantidad
ActiveSheet.Range("A4").Value = Total

' Si total mayor que 10.000 o el producto es Patatas, aplicar descuento.

If Total > 10000 Or Producto = "Patatas" Then

Descuento = Val(InputBox("Entrar Descuento", "Ent rar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total ‐ Total_Descuento
ActiveSheet.Range("A5").Value = Total_Descuento
ActiveSheet.Range("A6").Value = Total

End If

End Sub

Observe que para que se ejecute el bloque de instrucciones entre If.. End If sólo es necesario que
se cumpla alguna de las dos condiciones que se evalúan (o las dos a la vez). Sólo cuando no se
cumple ninguna de las dos no se ejecutan las instrucciones del bloque.

∙  Estructura Select Case.

En ocasiones se dará el caso que en función del valor o rango de valores que pueda tener una
variable, una casilla, una expresión, etc. deberán llevarse a cabo diferentes acciones o grupos de
acciones. Vea el ejemplo siguiente.

Ejemplo 15.

Macro que suma, resta, multiplica o divide los valores de las casillas A1 y A2 dependiendo de si B1
contiene el signo +, ‐, x, :. El resultado lo deja en A3. Si en B1 no hay ninguno de los signos
anteriores en A3 debe dejarse un 0.

Sub Ejemplo_15()

Dim Signo As String
Dim
 Valor1 As Integer, Valor2 As Integer, Total As Integer

Valor1 = ActiveSheet.Range("A1").Value
Valor2 = ActiveSheet.Range("A2").Value
Signo = ActiveSheet.Range("B1").Value
Total=0

If Signo = "+" Then
Total = Valor1 + Valor2

End if

If Signo = "‐" Then
Total = Valor1 ‐ Valor2

End if

If Signo = "x" Then
Total = Valor1 * Valor2

End if

If Signo = ":" Then
Total = Valor1 / Valor2

End if

ActiveCell.Range("A3").Value = Total

End Sub

Observe que en el ejemplo anterior todas las instrucciones if evalúan la misma variable. El
programa funciona correctamente pero para estos casos es mejor utilizar la instrucción Select Ca
se, el motivo principal es por legibilidad y elegancia. Select Case tiene la sintaxis siguiente,

Select Case Expresión

Case valores :

Instrucciones.

Case valores :
Instrucciones.
.
.
Case valores:

Instrucciones.

Case Else

Instrucciones en caso que no sean ninguno de los valores anteriores.

End Select

Vea el ejemplo anterior solucionado con esta estructura.

Ejemplo 16.

Sub Ejemplo_16()

Dim Signo As String
Dim
 Valor1 As Integer, Valor2 As Integer, Total As Integer

Valor1 = ActiveSheet.Range("A1").Value
Valor2 = ActiveSheet.Range("A2").Value
Signo = ActiveSheet.Range("A3").Value

Select Case signo

Case "+"

Total = Valor1 + Valor2

Case "‐"

Total = Valor1 ‐ Valor2

Case "x"

Total = Valor1 * Valor2

Case ":"

Total = Valor1 / Valor2

Case Else

Total = 0

End Select

ActiveCell.Range("A3").Value = Total

End Sub

Vea el ejemplo siguiente donde cada sentencia Case evalúa un rango de valores.

Ejemplo 17.

Programa que pide tres notas de un alumno mediante la función InputBox. Las notas van a parar
respectivamente a las casillas A1, A2 y A3 de la hoja activa. El programa calcula la media y la deja
en A4.

Si la media está entre 0 y 2 deja en A5 el mensaje "Muy deficiente", si la nota es 3 deja en A5 el
mensaje "Deficiente", si la nota es 4 deja "Insuficiente", si es 5 "Suficiente", si es 6 "Bien", si está
entre 7 y 8 deja "Notable", si es mayor que 8 deja "Sobresaliente".

Sub Ejemplo_17()

Dim Nota1 As Integer, Nota2 As Integer, Nota3 As Integer
Dim
 Media As Single

Nota1 = Val(InputBox("Entrar Nota primera evaluación", "Nota"))
Nota2 = Val(InputBox("Entrar Nota Segunda evaluación", "Nota"))
Nota3 = Val(InputBox("Entrar Nota Tercera evaluación", "Nota"))

Media = (Nota1 + Nota2 + Nota3) / 3

ActiveSheet.Range("A1").Value = Nota1
ActiveSheet.Range("A2").Value = Nota2
ActiveSheet.Range("A3").Value = Nota3
ActiveSheet.Range("A4").Value = Media

Select Case Media

Case 0 To 2

ActiveSheet.Range("A5").Value = "Muy deficiente"

Case 3

ActiveSheet.Range("A5").Value = "Deficiente"

Case 4

ActiveSheet.Range("A5").Value = "Insuficiente"

Case 5

ActiveSheet.Range("A5").Value = "Suficiente"

Case 6

ActiveSheet.Range("A5").Value = "Bien"

Case 7 To 8

ActiveSheet.Range("A5").Value = "Notable"

Case >8

ActiveSheet.Range("A5").Value = "Sobresaliente"

End Select

End Sub

∙  La función MsgBox.

Esta función muestra un mensaje en un cuadro de diálogo hasta que el usuario pulse un botón. La
función devuelve un dato tipo Integer en función del botón pulsado por el usuario. A la hora de
invocar está función, se permiten diferentes tipos de botones.

Sintáxis de MsgBox.

MsgBox( Mensaje, Botones, Título, Archivo de ayuda, contexto)

Mensaje: Obligatorio, es el mensaje que se muestra dentro del cuadro de diálogo.

Botones: Opcional. Es un número o una suma de números o constantes (vea tabla Valores para
botones e Iconos), que sirve para mostrar determinados botones e iconos dentro del cuadro de
diálogo. Si se omite este argumento asume valor 0 que corresponde a un único Botón OK.

Título: Opcional. Es el texto que se mostrará en la barra del título del cuadro de diálogo.

Archivo de Ayuda: Opcional. Si ha asignado un texto de ayuda al cuadro de diálogo, aquí debe
especificar el nombre del archivo de ayuda donde está el texto.

Context: Opcional. Es el número que sirve para identificar el texto al tema de ayuda
correspondiente que estará contenido en el archivo especificado en el parámetro Archivo de
Ayuda.

Tabla para botones e iconos del cuadro MsgBox. (Tabla copiada del archivo
de
 ayuda de
Microsoft
 Excel).

Constante

Valor Descripción

VbOKOnly

0  Muestra solamente el botón Aceptar.

VbOKCancel

1  Muestra los botones Aceptar y Cancelar.

VbAbortRetryIgnore

2  Muestra los botones Anular, Reintentar e Ignorar.

VbYesNoCancel

3  Muestra los botones Sí, No y Cancelar.

VbYesNo

4  Muestra los botones Sí y No.

VbRetryCancel

5  Muestra los botones Reintentar y Cancelar.

VbCritical

16  Muestra el icono de mensaje crítico.

VbQuestion

32  Muestra el icono de pregunta de advertencia.

VbExclamation

48  Muestra el icono de mensaje de advertencia.

VbInformation

64  Muestra el icono de mensaje de información.

VbDefaultButton1

0  El primer botón es el predeterminado.

VbDefaultButton2

256  El segundo botón es el predeterminado.

VbDefaultButton3

512  El tercer botón es el predeterminado.

VbDefaultButton4

768  El cuarto botón es el predeterminado.

VbApplicationModal

0  Aplicación modal

VbSystemModal

4096  Sistema modal

El primer grupo de valores (0 a 5) describe el número y el tipo de los botones mostrados en el
cuadro de diálogo; el segundo grupo (16, 32, 48, 64) describe el estilo del icono, el tercer grupo (0,
256, 512) determina el botón predeterminado y el cuarto grupo (0, 4096) determina la modalidad
del cuadro de mensajes. Cuando se suman números para obtener el valor final del argumento
buttons, se utiliza solamente un número de cada grupo.

Nota Estas constantes las especifica Visual Basic for Applications. Por tanto, el nombre de las
mismas puede utilizarse en cualquier lugar del código en vez de sus valores reales.

Los valores que puede devolver la función msgbox en función del botón que pulse el usuario se
muestran en la tabla siguiente.

Tabla de valores que puede devolver MsgBox. (Tabla copiada del archivo de ayuda de Microsoft
Visual Basic para aplicaciones).

Constante

Valor

Descripción

VbOK

1

Aceptar

VbCancel    2

Cancelar

VbAbort    3

Anular

VbRetry    4

Reintentar

VbIgnore    5

Ignorar

VbYes

6

VbNo

7

No

Ejemplos de MsgBox.

Sub Tal()
.
.

' El cuadro Muestra los botones Si y No y un icono en forma de interrogante. Cuando se pulsa
' un botón, el valor lo recoge la variable X. En este caso los valores devueltos pueden ser 6 o 7
' que corresponden respectivamente a las constantes VbYes y VbNo, observe la instrucción If de
'después.

X = MsgBox("Desea Continuar", vbYesNo + vbQuestion, "Opción",,)

' Se ha pulsado sobre botón Si

If X = vbYes Then
.....
Else ' Se ha pulsado sobre botón No
.....

End If

.
.

End Sub

Algunas veces puede que le interese simplemente desplegar un cuadro MsgBox para mostrar un
mensaje al usuario sin que se requiera recoger ningún valor. En este caso puede optar por la forma
siguiente:

MsgBox Prompt:="Hola usuaria, Ha acabado el proceso", Buttons:=VbOkOnLy _
Title:="Mensaje"

Lo que no puede hacer porque Visual Basic daría error es poner la primera forma sin igualarla a
ninguna variable. Por ejemplo, la expresión siguiente es incorrecta:

MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")

Sería correcto poner:

X= MsgBox ("Hola usuario, Ha acabado el proceso", VbOkOnly, "Mensaje")

En este caso, aunque X reciba un valor, luego no se utiliza para nada, es decir simplemente se
pone para que Visual Basic dé error.

∙  La instrucción With.

Suponemos que llegado a este punto le parecerá engorroso tener que referirse a los objetos
siguiendo toda o casi toda la jerarquía. Ya hemos indicado que es mejor hacerlo de esta manera
porque el programa gana en claridad y elegancia y, consecuentemente, el programador gana
tiempo a la hora de hacer modificaciones o actualizaciones. La sentencia With le ayudará a tener
que escribir menos código sin que por esto el programa pierda en claridad. Concretamente esta
función sirve para ejecutar una serie de acciones sobre un mismo Objeto.

Su sintaxis es la siguiente:

With Objeto

Instrucciones

End With

Repetiremos el ejemplo 13 utilizando esta sentencia. Observe como con With se hace referencia al
objeto ActiveSheet.

Ejemplo 19.

Entrar el Nombre, la cantidad y el precio de un producto desde el teclado y guardarlos
respectivamente en A1, A2 y A3. Calcular el total y guardarlo en A4. Si el total es superior a 10.000
o el nombre del producto es "Patatas", pedir un descuento, calcularlo el total descuento y
guardarlo en A5, luego restar el descuento del total y guardarlo en A6.

Sub Ejemplo_19()

Dim Producto As String
Dim
 Cantidad As Integer
Dim
 Precio As Single
Dim
 Total As Single
Dim
 Descuento As Single
Dim
 Total_Descuento As Single

Precio = 0
Producto = InputBox("Entrar Nombre del Producto","Entrar")
Precio = Val(InputBox("Entrar el precio", "Entrar"))
Precio = Val(InputBox("Entrar la cantidad", "Entrar"))
Total = Precio * Cantidad

With ActiveSheet

.Range("A1").Value = Producto
.Range("A2").Value = Precio
.Range("A3").Value = Cantidad
.Range("A4").Value = Total

End With

' Si total mayor que 10.000 o el producto es Patatas, aplicar descuento.

If Total > 10000 Or Producto = "Patatas" Then

Descuento = Val(InputBox("Entrar Descuento", "Entrar"))
Total_Descuento = Total * (Descuento / 100)
Total = Total ‐ Total_Descuento

With ActiveSheet

.Range("A5").Value = Total_Descuento
.Range("A6").Value = Total

End With

End If

End Sub

Estructuras Repetitivas.

Este tipo de estructuras permiten ejecutar más de una vez un mismo bloque de sentencias.

Ejemplo 20.

Supongamos que tenemos que hacer un programa para entrar las notas de una clase de 5 alumnos
que se guardaran respectivamente en las celdas de A1 a A5 de la hoja activa. Después hacer la
media que se guardará en A6. Con las estructuras vistas hasta ahora, podríamos hacer:

Sub Ejemplo_20 ()

Dim Nota As Integer

Dim Media As Single

Media = 0
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("A1").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("A2").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("A3").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("A4").Value = Nota
Media = Media + Nota
Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))
ActiveSheet.Range("A5").Value = Nota
Media = Media + Nota
Media = Media / 5
ActiveSheet.Range("A6").Value = Media

End Sub

Observe que este programa repite el siguiente bloque de sentencias, 5 veces.

Nota = Val(InputBox("Entrar la 1 Nota : ","Entrar Nota"))

ActiveSheet.Range("A5").Value = Nota

Media = Media + Nota

Para evitar esta tipo de repeticiones de código, los lenguajes de programación incorporan
instrucciones que permiten la repetición de bloques de código.

∙  Estructura repetitiva Para (for).

Esta estructura sirve para repetir la ejecución de una sentencia o bloque de sentencias, un número
definido de veces. La estructura es la siguiente:

Para var =Valor_Inicial Hasta Valor_Final Paso Incremento Hacer

Inicio

Sentencia 1
Sentencia 2
.
.
Sentencia N

Fin

Var es una variable que la primera vez que se entra en el bucle se iguala a Valor_Inicial, las
sentencias del bucle se ejecutan hasta que Var llega al Valor_Final, cada vez que se ejecutan el
bloque de instrucciones Var se incrementa según el valor de Incremento.

En Visual Basic para Excel la estructura Para se implementa con la instrucción For ... Next.

For Varible = Valor_Inicial To Valor_Final Step Incremento

Sentencia 1
Sentencia 2
.
.
Sentencia N

Next Variable

* Si el incremento es 1, no hace falta poner Step 1.

Ejemplo 21.

Entrar 10 valores utilizando la función InputBox, sumarlos y guardar el resultado en la casilla A1 de
la hoja activa.

Sub Ejemplo_21()

Dim i As Integer
Dim
 Total As Integer
Dim
 Valor As Integer

For i=1 To 10

Valor= Val(InputBox("Entrar un valor","Entrada"))
Total = Total + Valor

Next i

ActiveCell.Range("A1").Value = Total

End Sub

Recorrer casillas de una hoja de cálculo.

Una operación bastante habitual cuando se trabaja con Excel es el recorrido de rangos de casillas
para llenarlas con valores, mirar su contenido, etc. Las estructuras repetitivas son imprescindibles
para recorrer grupos de celdas o rangos. Vea los siguientes ejemplos para ver ejemplos de
utilización de estructuras repetitivas para recorrer rangos de casillas, observe la utilización de las
propiedades Cells y Offset.

Propiedad Cells.

Ya conoce esta propiedad, sirve para referenciar una celda o un rango de celdas s egún
coordenadas de fila y columna.

Ejemplo 22

Llenar el rango de las casillas A1..A5 con valores pares consecutivos empezando por el 2.

Sub Ejemplo_22()

Dim Fila As Integer
Dim
 i As Integer
Fila = 1
For i=2 To 10 Step 2
ActiveSheet.Cells(Fila,1).Value = i
Fila = Fila+1

Next i

End Sub

Ejemplo 23.

Llenar un rango de filas, empezando por una celda, que se debe especificar desde teclado, con una
serie de 10 valores correlativos (comenzando por el 1).

Sub Ejemplo_23()

Dim Casilla_Inicial As String
Dim i As Integer
Dim
 Fila As Integer, Columna As Integer

Casilla_Inicial = InputBox("Introducir la casilla Inicial : ", "Casilla Inicial")
ActiveSheet.Range(Casilla_Inicial).Activate

‘ Tomar el valor de fila de la celda activa sobre la variable Fila

Fila = ActiveCell.Row

‘ Tomar el valor de columna de la celda activa sobre la variable Fila

Columna = ActiveCell.Column

For i = 1 To 10

ActiveSheet.Cells(Fila, Columna).Value = i
Fila = Fila + 1

Next i

End Sub

∙  Estructura repetitiva Do While..Loop (Hacer Mientras).

La estructura repetitiva for se adapta perfectamente a aquellas situaciones en que se sabe
previamente el número de veces que se ha de repetir un proceso, entrar veinte valores, recorrer
cincuenta celdas, etc.

Pero hay ocasiones o casos en los que no se sabe previamente el número de veces que se debe
repetir un proceso.

Por ejemplo, suponga que ha de recorrer un rango de filas en los que no se sabe cuantos valores
habrá (esto es, cuantas filas llenas habrá), en ocasiones puede que hayan veinte, en ocasiones
treinta, en ocasiones ninguna, etc. Para estos casos la estructura for no es adecuada y deberemos
recurrir a la sentencia Do While..Loop en alguna de sus formas. Esta estructura repetitiva está
controlada por una o varias condiciones, la repetición del bloque de sentencias dependerá de si se
va cumpliendo la condición o condiciones.

Hacer Mientras (se cumpla la condición)

Sentencia1
Sentencia2
.
.
Sentencia N

Fin Hacer Mientras

En Visual Basic

Do While (se cumpla la condición)
Sentencia1
Sentencia2
.
.
Sentencia N

Loop

** Los ejemplos que veremos a continuación sobre la instrucción Do While..Loop se harán sobre
una base de datos.

Una base de datos en Excel es simplemente un rango de celdas en que cada fila representa un
registro y cada columna un campo de registro, la primera fila es la que da nombre a los campos.

Para nuestra base de datos utilizaremos los campos siguientes, Nombre, Ciudad, Edad, Fecha.

Ponga estos títulos en el rango A1:D1 de la Hoja1 (En A1 ponga Nombre, en B1 ponga Ciudad, en
C1 ponga Edad y en D1 Fecha), observe que los datos se empezarán a entrar a partir de A2.

Ejemplo 27.

Programa para entrar registros en la base de datos. Cada campo se entra con InputBox. El
programa va pidiendo datos mientras se entre un valor en el InputBox correspondiente al nombre,
es decir cuando al preguntar el nombre no se entre ningún valor, terminará la ejecución del
bloque encerrado entre Do While...Loop.

Observe la utilización de la propiedad Offset para colocar los datos en las celdas correspondientes.

Sub Ejemplo_27()

Dim Nombre As String
Dim
 Ciudad As String
Dim
 Edad As Integer
Dim
 fecha As Date

‘ Activar hoja1

WorkSheets("Hoja1").Activate

‘ Activar casilla A2

ActiveSheet.Range("A2").Activate

Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

‘ Mientras la variable Nombre sea diferente a cadena vacía

Do While Nombre <> ""

Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))

‘ Copiar los datos en las casillas correspondientes

With ActiveCell
.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).Value = fecha

End With

‘Hacer activa la celda de la fila siguiente a la actual

ActiveCell.Offset(1,0).Activate
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

Loop
End
 Sub

Ejemplo 28.

Preste especial atención a este ejemplo ya que seguro que el código que viene a continuación lo
utilizará en muchas ocasiones.

Antes que nada observe el ejemplo anterior, fíjese en que siempre empezamos a llenar el rango de
la hoja a partir de la celda A2, esto tiene una nefasta consecuencia, la segunda vez que ejecute la
macro machacará los datos de A2:D2 y si continua ejecutando machacará los datos de los rangos
siguientes.

Una solución sería observar cual es la casilla vacía siguiente y cambiar en la instrucción
ActiveSheet.Range("A2").Activate , la referencia A2 por la que corresponde a la primera casilla
vacía de la columna A. El código que le mostramos a continuación hará esto por nosotros, es decir
recorrerá una fila de celdas a partir de A1 hasta encontrar una vacía y dejará a esta como celda
activa para que la entrada de datos comience a partir de ella.

Sub Ejemplo_28()
.
.

‘ Activar hoja1

WorkSheets("Hoja1").Activate

‘ Activar casilla A2

ActiveSheet.Range("A1").Activate

‘ Mientras la celda activa no esté vacía

Do While Not IsEmpty(ActiveCell)

‘ Hacer activa la celda situada una fila por debajo de la actual

ActiveCell.Offset(1,0).Activate

Loop
.
.
End
 Sub

Ejemplo 29.

Es la unión de los dos programas anteriores. Es decir habrá un bucle Do While que buscará la
primera casilla vacía de la base de datos y otro para pedir los valores de los campos hasta que se
pulse Enter en Nombre.

Sub Ejemplo_28()

Dim Nombre As String
Dim
 Ciudad As String
Dim
 Edad As Integer
Dim
 fecha As Date

WorkSheets("Hoja1").Activate
ActiveSheet.Range("A1").Activate

‘ Buscar la primera celda vacía de la columna A y convertirla en activa

Do While Not IsEmpty(ActiveCell)

ActiveCell.Offset(1,0).Activate

Loop

Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

‘ Mientras la variable Nombre sea diferente a cadena vacía

Do While Nombre <> ""

Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))

With ActiveCell

.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha

End With

ActiveCell.Offset(1,0).Activate
Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")

Loop

End Sub

Cuando se tienen que entrar desde el teclado conjuntos de valores, algunos programadores y
usuarios prefieren la fórmula de que el programa pregunte si se desean entrar más datos, la típica
pregunta ¿Desea Introducir más datos ?, si el usuario contesta Sí, el programa vuelve a ejecutar las
instrucciones correspondientes a la entrada de datos, si contesta que no se finaliza el proceso,
observe como quedaría nuestro bucle de entrada de datos con este sistema.

Mas_datos = vbYes

Do While Mas_Datos = vbYes

Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))

With ActiveCell

.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha

End With

ActiveCell.Offset(1,0).Activate

‘ Preguntar al usuario si desea entrar otro registro.

Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")

Loop

** Observe que es necesaria la línea anterior al bucle Mas_datos = vbYes, para que cuando se
evalúe la condición por vez primera esta se cumpla y se ejecuten las sentencias de dentro del
bucle, Mas_datos es una variable de tipo Integer. Vea la sección siguiente donde se estudia una
variante de la estructura Do While que es más adecuada para este tipo de situaciones.

∙  Estructura Do..Loop While.

El funcionamiento de esta estructura repetitiva es similar a la anterior salvo que la condición se
evalúa al final, la inmediata consecuencia de esto es que las instrucciones del cuerpo del bucle se
ejecutaran al menos una vez. Observe que para nuestra estructura de entrada de datos vista en el
último apartado de la sección anterior esta estructura es más conveniente, al menos más
elegante, si vamos a entrar datos, al menos uno entraremos, por tanto las instrucciones del cuerpo
del bucle se deben ejecutar al menos una vez, luego ya decidiremos si se repiten o no.

Do

Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Entre la Edad : ", "Edad"))
Fecha=Cdate(InputBox("Entra la Fecha : ", "Fecha"))

With ActiveCell

.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha

End With

ActiveCell.Offset(1,0).Activate
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")

‘Mientras Mas_Datos = vbYes

Loop While Mas_Datos = vbYes

Observe que en este caso no es necesario la línea Mas_Datos = vbYes antes de Do para forzar la
entrada en el bucle ya que la condición va al final.

∙  Estructura Do..Loop Until (Hacer.. Hasta que se cumpla la condición).

Es otra estructura que evalúa la condición al final observe que la interpretación es distinta ya que
el bucle se va repitiendo HASTA que se cumple la condición, no MIENTRAS se cumple la condición.

Cuál de los dos utilizar, pues, no se sorprenda, la que entienda mejor o le guste más.
La entrada de datos con este bucle quedaría:

Do

Nombre = InputBox("Entre el Nombre (Return para Terminar) : ", "Nombre")
Ciudad = InputBox("Entre la Ciudad : ", "Ciudad")
Edad = Val(InputBox("Ent re la Edad : ", "Edad")
Fecha=Cdate("InputBox("Entra la Fecha : ", "Fecha")

With ActiveCell

.Value = Nombre
.Offset(0,1).Value = Ciudad
.Offset(0,2).Value = Edad
.Offset(0,3).value = fecha

End With

ActiveCell.Offset(1,0).Activate
Mas_datos = MsgBox("Otro registro ?", vbYesNo+vbQuestion,"Entrada de datos")

‘Hasta que Mas_Datos sea igual a vbNo

Loop Until Mas_Datos=vbNo

∙  Estructura For Each.

Este bucle se utiliza básicamente para ejecutar un grupo de sentencias con los elementos de una
colección una matriz (pronto veremos los que es). Recuerde que una colección es un conjunto de
objetos, hojas, rangos, etc. Vea el ejemplo siguiente que se utiliza para cambiar los nombres de las
hojas de un libro de trabajo.

Ejemplo 29.

Programa que pregunta el nombre para cada hoja de un libro de trabajo, si no se pone nombre a la
hoja, queda el que tiene.

Sub Ejemplo_29()

Dim Nuevo_Nombre As String
Dim
 Hoja As WorkSheet

‘ Para cada hoja del conjunto WorkSheets

For Each Hoja In WorkSheets

Nuevo_Nombre=InputBox("Nombre de la Hoja : " & Hoja.Name,"Nombrar Hojas")

If Nueva_Nombre <> "" Then

Hoja.Name=Nuevo_nombre

End if

Next

End Sub

** Hoja va referenciando cada una de las hojas del conjunto WorkSheets a cada paso de bucle.

Ejemplo 30.

Entrar valores para las celdas del rango A1:B10 de la hoja Activa.

Sub Ejemplo_30()

Dim R As Range

‘ Para cada celda del rango A1:B10 de la hoja activa

For Each R in ActiveSheet.Range("A1:B10")

R.Value = InputBox("Entrar valor para la celda " & R.Address, "Entrada de valores")

Next

End Sub

** Observe que se ha declarado una variable tipo Range, este tipo de datos, como puede imaginar
y ha visto en el ejemplo sirve para guardar Rangos de una o más casillas, estas variables pueden
luego utilizar todas las propiedades y métodos propios de los Objetos Range. Tenga en cuenta que
la asignación de las varaibles que sirven para guardar o referenciar objetos (Range, WorkSheet,
etc.) deben inicializarse muchas veces a través de la instrucción SET , esto se estudiará en otro
capítulo.

∙  Insertar funciones de Microsoft Excel desde Visual Basic.

Copie el siguiente procedimiento y ejecútelo. Es un procedimiento que sencillamente va pidiendo
números y los va colocando en las celdas de la columna A partir de A1, al final coloca la función
=SUMA para sumar los valores introducidos y la función =PROMEDIO para hacer el promedio de
los mismos valores.

Sub Sumar()

Dim Valor As Integer
Dim
 Casilla_Inicial As String
Dim
 Casilla_Final As String

' Hacer activa la casilla A1 de la hoja activa

ActiveSheet.Range("A1").Activate

Do

' Entrar un valor y convertirlo a numérico

Valor = Val(InputBox("Entrar un valor", "Entrada"))

' Si el valor es distinto de 0

If Valor <> 0 Then

' Guardar el valor en la casilla activa

ActiveCell.Value = Valor

' Hacer activa la casilla de la fila siguiente

ActiveCell.Offset(1, 0).Activate

End If

Loop Until Valor = 0

' Establecer la casilla inicial del rango a sumar

Casilla_Inicial = "A1"

' Establecer la casilla final del rango a sumar.
' Coger la dirección de la casilla activa, la última

Casilla_Final = ActiveCell.Address
ActiveCell.Offset(1, 0).Activate

' Poner en la casilla activa la función SUMA

ActiveCell.Formula = "=Suma(" & Casilla_Inicial & ":" & Casilla_Final & ")"
ActiveCell.Offset(1, 0).Activate

' Poner en la casilla activa la función promedio

ActiveCell.Formula = "=Promedio(" & Casilla_Inicial & ":" & Casilla_Final & ")"

End Sub

Una vez haya ejecutado la macro, observe que en las celdas donde se han colocado
respectivamente las funciones =SUMA, =PROMEDIO aparece ¿NOMBRE? (es posible que aparezca
####, en ese caso amplíe la columna), esto significa que Excel no reconoce el nombre de la
función, que no existe. Sin embargo, estas funciones si existen y funcionan perfectamente cuando
se teclean directamente sobre la hoja de cálculo, se preguntará el porqué cuando se colocan
desde una macro no funcionan. Pues resulta que para que cualquier función de Excel insertada
desde una macro NO de error debe ponerse con su nombre en inglés, la traducción se hace luego
de forma automática. Es decir en la macro debe ponerla en inglés y luego cuando esta se inserte
en la hoja aparecerá con su nomenclatura en el idioma que corresponda.

Modifique el procedimiento del ejemplo y en lugar de poner

ActiveCell.Formula = "=Suma(" & Casilla_Inicial & ":" & Casilla_Final & ")"

Ponga

ActiveCell.Formula = "=Sum(" & Casilla_Inicial & ":" & Casilla_Final & ")"

Y ahora, en lugar de

ActiveCell.Formula = "=Promedio(" & Casilla_Inicial & ":" & Casilla_Final & ")"

Ponga

ActiveCell.Formula = "=Average(" & Casilla_Inicial & ":" & Casilla_Final & ")"

Ejecute la macro y compruebe que ahora todo funciona correctamente. Observe que en la hoja,
las funciones se han insertado con su nombre correcto según el idioma, es decir SUMA y
PROMEDIO.

De esta forma damos por terminado el módulo de Macros, que simplemente es una introducción
al tema.

El estudiante puede desarrollarse mucho más, este manual pretende realizar un bosquejo del
tema, e iniciar al alumno a la programación en lenguaje VBA.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->