Está en la página 1de 7

Excel incluye un intérprete de Visual Basic con el que se puede aumentar

el poder del programa definiendo nuevos comandos y funciones que pro-


porcionan una enorme potencia a las macros. Solamente se requieren
mínimos conocimientos de lógica y programación.

PCW 250
r-j- _, _ . : ^

1
Programación d e macros y funciones e n Excel

Excel, Visual Basic


y Master Mind
Claudio H. Sánchez claudio@pcw.idg.es

n a macro puede definirse como u n “súper


comando”, que permite ejecutar varias operaciones
sucesivas con u n a única orden. Por ejemplo, supon-
gamos u n a hoja de cálculo en la que tengamos que
ordenar u n a lista, luego copiarla ordenada en otra
hoja y, finalmente, imprimir esta segunda hoja. Se
trata de tres operaciones: ordenar, copiar, imprimir.
Una macro nos permitiría ejecutar las tres operacio-
nes de u n a sola vez: tomando u n a sola opción del
m e n ú , u s a n d o u n a única combinación de teclas o
haciendo clic sobre u n botón adecuado. Para obte-
ner u n a macro a s í , tenemos q u e escribir u n pro-
grama, u n a lista de instrucciones que, traducidas a
u n lenguaje que Excel pueda entender, equivalgan a
l a s o p e r a c i o n e s a n t e r i o r e s . Así, p o r ejemplo, la
acción de imprimir la hoja actual se representa en
u n a macro mediante la instrucción ActiveWindow.SelectedS-
heets.PrintOut Copies:=1
Esto podría traducirse como “imprimir u n a copia
de la hoja seleccionada en la ventana activa”. ¿En
qué idioma? E n VBA (Visual Basic para Aplicacio-
nes), u n a variante del lenguaje Visual Basic que se
u s a en la programación de Excel. Con ellas podemos
ampliar l a s opciones del p r o g r a m a , dotándolo d e
nuevos comandos y también nuevas funciones.
Por supuesto que para escribir u n a macro hay que
conocer las reglas del lenguaje VBA: cuál es la ins-
trucción correspondiente a cada operación de Excel.
Pero estas reglas son bastante sencillas y fáciles de

PCW 2 5 1
TUTOR

aprender. Por si esto no alcan- •} - -rj'IODEJCJ'IOCUFf'IC+íD Figura 1: la


zara, Excel incluye un modo de A B C D E F G hoja de cál­
programación (el grabador de ■ f ™ culo con los
1 elementos
macros) que simplifica las cosas MÍTUÉS» !
O^BSZÍ necesarios
aún más (ver el recuadro El gra- s £.4545441? E para gene­
bador como asistente). í (V77WW- * rar el núme­
Este artículo explica cómo usar üí*9eme 1
M GJSUMA; !. ro de cuatro
la programación de Excel para O^HMIHT 1 dígitos dife­
ID CHUBIÜE. 7
crear una hoja de cálculo contra J.ÍH9PT.1?
rentes que
3
la cual jugar al Master Mind. 1! 0J&i*J4i fl habremos
Crear un juego de ordenador en de adivinar.
u n programa como Excel es de
Figura 2 : la
por sí u n desafío interesante.
macro que
Pero, además, el desarrollo de
genera el
esta hoja de cálculo constituye número a adi­
u n a forma muy atractiva de vinar.
comenzar a familiarizarse con las
herramientas de programación.

Master Mind
¿Conoce usted este juego?, con-
siste en adivinar un número pen-
sado por el adversario. El nos pero en distinta posición (el 7 y el adivinar y evaluar nuestros inten-
guiará hacia ese objetivo dicién- 4). Y que otro (el 8) se encuentra tos de adivinarlo en términos de
donos cuánto nos aproximamos en la misma posición. Pero no nos “bien” y “regular”, de acuerdo con
al número que él ha pensado. dice cuáles son esos dígitos. Sola- las reglas del juego. Veamos
Por ejemplo, supongamos que el mente evalúa nuestro intento en entonces cada problema.
piensa en el número 4587 (cosa términos de “bien” y “regular”.
que, por supuesto, no nos dice). Con esta información, y usando la Generando el número
Nosotros arriesgamos: “¿Es el lógica, podemos llegar a determi- Excel incluye un par de funciones
7482?” Entonces él nos dirá: nar cuál es el número. para generar números aleatorios
“Dos regular y uno bien”. Con esto Una hoja de cálculo capaz de de determinadas características.
nos quiere decir que dos dígitos jugar al Master Mind debe hacer Pero ninguna de ellas nos ase-
de nuestro número se encuentran dos cosas: generar el número de gura que el número generado
también en el que él ha pensado, cuatro cifras que tendremos que tenga todos sus dígitos diferen-
tes, condición necesaria en el
Master Mind. Entonces recurri-
Cómo se ejecuta una macro mos a la hoja de cálculo de la
En el texto se indica la forma más incómoda de ejecutar una macro: a través de las Figura 1.
opciones Herramientas∑Macro∑Macros. Hay muchas otras formas, pero las más simples y ele­ El rango E3:E12 contiene copias
gantes son las siguientes:
de la función =ALEATORIO(). E s t a
Asignando una combinación de teclas a la macro función devuelve u n n ú m e r o
Tomamos las opciones Herramientas∑Macro∑Macros. Aparecerá un cuadro con la lista de aleatorio cualquiera compren-
macros disponibles, en la cual seleccionamos (con un clic) la macro a la cual le que­ dido e n t r e 0 y 1 . El n ú m e r o
ramos asignar la combinación de teclas. Hacemos un clic en el botón Opciones y apare­
cerá el cuadro de la Figura 6. Donde dice Tecla de método abreviado escribimos una M
devuelto cambia cada vez que se
mayúscula y hacemos un clic en Aceptar. Cerramos el cuadro donde aparece la macro. recalcula la hoja, tanto porque
De acuerdo con la combinación de teclas usada, ahora podemos ejecutar la macro hacemos algún cambio en ella,
(generando el número a adivinar) mediante la combinación Control+Shift+M. Es conve­ como porque apretamos la tecla
niente elegir combinaciones de este tipo porque las combinaciones más sencillas
(de la forma Control+Letra) suelen tener alguna otra función asignada por el programa. F9.
El rango F3:F12 contiene simple-
Insertando un botón en la hoja de cálculo mente los números del cero al
Los que son más aficionados al ratón que al teclado, preferirán ejecutar la macro nueve. Si ordenamos esta tabla
haciendo clic en un botón insertado a tal efecto. Los botones de macros se obtienen
en la barra de herramientas Formularios (Figura 7). s e g ú n el c o n t e n i d o de la
Hacemos un clic en el botón Botón, dentro de la barra de herramientas Formularios y defi­ columna E , el resultado s e r á ,
nimos, arrastrando el ratón, un rectángulo del tamaño que tendrá el botón. Al soltar realmente, desordenar los dígi-
el botón del ratón aparecerá el cuadro de la Figura 8, con la lista de macros defini­
das en la hoja de cálculo. Hacemos un clic en la macro a la cual le queremos asignar
tos de la columna F. Leyendo de
el botón y hacemos un clic en Aceptar. De ahora en adelante, la macro puede ejecu­ arriba hacia abajo las cuatro
tarse con un clic en el botón creado. p r i m e r a s c e l d a s de e s t a
c o l u m n a , o b t e n d r e m o s el

PCW 252
TUTOR

Figura 3 : E n la s i g u i e n t e instrucción
la función (Range(“E3”).Select) e l o b j e t o e s la
BIEN. celda E3, y lo que se hace es selec-
cionarla. E n o t r a s p a l a b r a s , la
instrucción ubica el cursor e n la
celda E3. La estructura
Objeto.Acción e s típica del len-
guaje Visual Basic e n general y
d e VBA e n particular.
Figura 4 :
Luego sigue u n bucle: u n con-
la función junto de instrucciones q u e p u e -
REGULAR. d e n ejecutarse u n a o m á s veces.
Hay dos tipos de ciclos: aquellos
e n q u e las instrucciones s e eje-
cutan un número determinado
de veces y aquellos en que se
ejecutan s e g ú n s e c u m p l a o n o
cierta condición. El q u e aparece
e n el listado d e la Figura 2 perte-
n ú m e r o d e c u a t r o dígitos dife- nece a este segundo
r e n t e s q u e e s t a m o s necesitando. tipo.
Para construir este número Este ciclo comienza con
escribimos e n la celda E1 la fór- la p a l a b r a clave Do y s e
m u l a =F3*1000+F4*100+F5*10+F6 q u e cierra con Loop. E n esta
r e ú n e los c u a t r o primeros dígi- última instrucción se
tos en u n o solo n ú m e r o . E s t e i n d i c a q u e el c i c l o s e
s e r á el n ú m e r o a descubrir. repetirá hasta (en
inglés, until) q u e el valor
Automatizando el proceso d e la c e l d a F3 s e a d i s -
Figura 5 : la hoja de cálculo terminada. En la celda E1
E n r e s u m e n , p a r a o b t e n e r el está (oculto) el número a adivinar. A partir de la celda
tinta de cero. Aquí a p a -
n ú m e r o a adivinar, tenemos que A2 escribimos nuestros pronósticos y e n las columnas B r e c e u n a estructura
hacer lo siguiente: y C la hoja de cálculo nos mostrará la calificación obte­ similar a Objeto.Acción:
- Borrar el rango A2:A11, para eli- nida por cada intento. Objeto.Propiedad. E l o b j e t o e s
m i n a r los n ú m e r o s u s a d o s en la celda F3 y la propiedad
u n a partida anterior. e s s u valor.
- Colocar el cursor en la celda E3. Entendiendo el código La i n s t r u c c i ó n c o m p r e n d i d a
- Ordenar el rango E3:F12. Encabeza la macro la instrucción e n t r e e l Do y e l Loop e s Selection.Sort
- Asegurarnos q u e , al ordenar, Sub Ordenar(). T o d a m a c r o d e b e Key1:=Range(“E3”), Order1:=xlAscending.
se obtiene en E1 u n número cuatro comenzar con la palabra clave Sub, Aquí aparece de nuevo la e s t r u c -
cifras, es decir, que no comienza seguida del nombre elegido para t u r a objeto.acción: el objeto e s la
con cero. la macro. En principio, este nom- selección a c t u a l y la acción e s s u
- Colocar el cursor en la celda A2 bre puede ser cualquiera. Luego o r d e n a m i e n t o (en i n g l é s , sort).
para comenzar la tarea de deduc- s i g u e n d o s i n s t r u c c i o n e s d e la La i n s t r u c c i ó n i n d i c a t a m b i é n
ción. misma forma: Objeto.Acción. Es decir, q u e la c l a v e d e o r d e n a m i e n t o
Son demasiados pasos. Y, a u n - s e m e n c i o n a u n “objeto” ( q u e (Key1) e s la celda E3 y q u e el orden
que se tarde m á s en decirlos que p u e d e ser u n rango, u n gráfico, e s a s c e n d e n t e . Debido a la con-
en hacerlos, pueden simplificarse u n a línea, etc.) y u n a “acción” que dición e x p r e s a d a e n la i n s t r u c -
c o n u n a m a c r o . É s t a e s la q u e se efectuará sobre ese objeto. c i ó n Loop, el o r d e n a m i e n t o s e
a p a r e c e e n la F i g u r a 2 . Lo q u e La p r i m e r a i n s t r u c c i ó n e s h a r á t a n t a s veces como sea
vemos en la figura es el “código de Range(“A2:A11”).ClearContents. L a primera necesario h a s t a q u e el valor de
la macro”. E s la t r a d u c c i ó n al parte (el objeto) indica que se va a la celda F3 s e a distinto d e cero, lo
lenguaje VBA de la lista de cinco h a c e r u n a o p e r a c i ó n s o b r e el q u e a s e g u r a generar u n n ú m e r o
o p e r a c i o n e s q u e c o n d u c e n a la r a n g o A2:A11. La s e g u n d a p a r t e d e c u a t r o dígitos. U n a vez gene-
obtención del n ú m e r o . P a r a indica la acción que se hace sobre r a d o el n ú m e r o a a d i v i n a r , la
entender las instrucciones que ese objeto: borrar el contenido. Es i n s t r u c c i ó n Range(“A2”).Select u b i c a
aparecen en la macro de la Figura decir que esta instrucción borra el el c u r s o r e n l a c e l d a A2 p a r a
2 no se necesita u n gran conoci- contenido del r a n g o d o n d e se c o m e n z a r el j u e g o . F i n a l m e n t e
miento de VBA. Apenas si h a c e encontrarían los números escritos aparece la instrucción End Sub que
falta saber u n poco de inglés. en u n a partida anterior. señala el fin de la macro.

PCW 254
TUTOR

poner u n número (que llama- 2- Comparar cada dígito del pro-


remos el “pronóstico”) y obte- n ó s t i c o c o n el c o r r e s p o n d i e n t e
ner s u p u n t u a c i ó n respecto dígito del objetivo.
del n ú m e r o p e n s a d o por la 3- Si la comparación es satisfac-
hoja de cálculo (el “objetivo”) toria, c o n t a r ese dígito como
de acuerdo con las reglas del “bien”.
Master Mind. Cada una de estas operaciones se
Lo ideal sería disponer de dos hace con funciones y herramientas
Figura 6 : e n este cuadro podemos asignar una
combinación de teclas para ejecutar la macro.
funciones, BIEN() y REGULAR(), específicas del lenguaje VBA.
capaces de hacer la evaluación Para descomponer u n número
e n s u s dígitos d i s -
Cómo se escribe la macro ponemos de la fun-
El texto de la Figura 2 debe escri- ción Mid. Su sintaxis
birse en u n a hoja de módulos es: Mid(número, comienzo,
dentro del editor de Visual Basic. cantidad), d o n d e : número
Elejimos la opciones e s el n ú m e r o d e l
Figura 7 : esta es la barra de herramientas Formularios. El botón
Herramientas∑Macro∑Editor de Visual Basic y cual queremos
que aparece en la figura permite definir un botón al cual
aparecerá el editor (que es u n pro- extraer s u s dígitos,
asignarle luego una macro.
grama aparte). Entonces seleccio- comienzo es la posición
n a m o s Insertar∑Módulo, d e n t r o del a p a r t i r d e la c u a l
m e n ú del editor. El último p a s o en forma inmediata. Estas funcio- hacemos la extracción y cantidad es
abre u n a ventana de texto donde nes no existen pero pueden tam- la cantidad de dígitos que quere-
podemos escribir el código de la bién ser creadas en VBA, tal como mos extraer. En nuestro caso, u n
macro tal como aparece en la Figura hicimos con la macro. dígito por vez.
2. Por ejemplo, queremos saber si
Antes de seguir con la progra- La función BIEN el t e r c e r dígito del p r o n ó s t i c o
mación del juego es el momento Un dígito se califica como “bien” coincide con el tercer dígito del
d e p r o b a r si la m a c r o a n t e r i o r cuando ocupa la misma posición objetivo. Si coincide, u n a variable
funciona correctamente. Desde la en el número objetivo y en el pro- q u e lleva la c u e n t a del p u n t u a -
hoja de cálculo Excel (no desde el nóstico. La función BIEN d e b e r á , ción incrementa s u valor en u n a
e d i t o r d e VBA) s e l e c c i o n a m o s entonces, ser capaz de: unidad. Las instrucciones de VBA
Herramientas∑Macro∑Macros. A p a r e c e r á un 1- Descomponer el objetivo y el que hacen todo esto son:
cuadro con la lista de macros dis- pronóstico en cada u n o de s u s If Mid(pronóstico, 3, 1) = Mid(objetivo, 3, 1) Then
BIEN = BIEN + 1
ponibles. Seleccionamos la macro dígitos. End If
Ordenar y h a c e m o s u n clic e n el
botón Ejecutar. En ese momento la
c e l d a E1 d e b e r á m o s t r a r u n El grabador como asistente
número de cuatro cifras distintas, En la macro que genera el número a adivinar aparecen instrucciones en VBA corres­
a p t o p a r a s e r a d i v i n a d o p o r el pondientes a diversas operaciones de Excel: seleccionar una celda, borrar un
jugador. rango, ordenar una lista. ¿Cómo podemos saber cuáles son esas instrucciones sin
La ejecución de la macro puede disponer de un libro de VBA?
Para eso podemos recurrir al grabador de macros, que traduce a VBA las operacio­
simplificarse d e v a r i a s f o r m a s , nes que hacemos con Excel. Su manejo es muy sencillo. Por ejemplo, queremos
para ello vea el recuadro Cómo se saber cuál es la instrucción en VBA correspondiente a la acción de seleccionar un
ejecuta una macro. rango y borrarlo. Para ello seleccionamos Herramientas∑Macro∑Grabar nueva macro, lo que hace
aparecer un cuadro como el de la Figura 9. Hacemos un clic en Aceptar y aparece la
Tal c o m o fue c o n t a d a h a s t a
barra de botones de la Figura 10. Todo lo que hagamos de ahora en adelante será
aquí, la hoja de cálculo presenta registrado por el grabador y traducido a VBA. El primero de estos botones servirá
u n problema: el número a adivi- para apagar el grabador cuando hayamos completado la operación.
nar queda a la vista. Basta mirar Realizamos la operación cuya traducción a VBA queremos conocer, en este caso,
seleccionamos un rango y borramos su contenido apretando la tecla Suprimir. Hace­
la c e l d a E1 o l o s d í g i t o s d e la mos un clic en el botón de la Figura 10 para apagar el grabador y ahora podemos
columna F para saber qué número ver la macro obtenida abriendo el editor de VBA. Para ello vamos a
g e n e r ó el p r o g r a m a . La forma Herramientas∑Macro∑Macros. Aparece un cuadro parecido al de la Figura 8 con la lista de
macros disponibles. En la lista deberá aparecer la macro que acabamos de crear.
m á s simple d e resolver e s t o e s
La seleccionamos y hacemos un clic en Modificar.
ocultar las columnas E y F, selec- Se abrirá el editor de VBA (Figura 11) mostrando el código correspondiente a la ope­
cionándolas y pinchando en ración realizada mientras el grabador estaba funcionando. Asi nos enteramos de la
Formato∑Columna∑Ocultar. forma que tiene la instrucción.
El grabador funciona entonces como un asistente que nos dice cuál es la instrucción
VBA correspondiente a cualquier comando de Excel. Sin embargo, si queremos
Calculando las puntuaciones depurar nuestras macros y hacerlas más eficientes, debemos profundizar el conoci­
Habiendo obtenido (y ocultado) el miento del lenguaje. Abundan los libros sobre este tema.
número a adivinar, debemos pro-

PCW 255
TUTOR

nóstico debe ser com-


parado con todos los
demás dígitos del
objetivo. Esto se logra
usando dos ciclos For...
Next:
For i = 1 To 4
For j = 1 To 4
Figura 9 : este cuadro aparece al comenzar la If Mid(pronóstico, i, 1) =
Mid(objetivo, j , 1) Then
creación de una macro usando el grabador. Macro1
REGULAR = REGULAR + 1
es el nombre de la macro. End If
Next
Next
variable donde se guarda el
valor que la función Este juego de instrucciones
Figura 8 : en este cuadro debemos indicar la acro devuelve. La última instruc- realiza dieciséis comparaciones.
a la cual le asignaremos el botón. ción, que señala el fin de la Comienza con la variable i igual
f u n c i ó n e s End Function. a 1. Es decir, tomando el primer
Esto se lee “si el dígito que En la Figura 3 aparece el código dígito del pronóstico. Sin cam-
ocupa la tercera posición en el completo de la función, que se biar este valor, el segundo ciclo
pronóstico es igual al dígito que escribe en una hoja de módulos se ejecuta cuatro veces compa-
ocupa la tercera posición en el tal como se explicó en el caso de rando este primer dígito con
objetivo, entonces la variable BIEN la macro. cada uno de los cuatro del obje-
aumenta en una unidad”. tivo.
La comparación debe hacerse Luego el valor de i se incre-
con cada uno de los cuatro dígi- menta a 2. Es decir que se
tos que componen los números y toma el segundo dígito del
no solamente con el tercero. JGrabar mE3| pronóstico y, otra vez, el
Para eso no hace falta escribir ii ™ segundo ciclo recorre los
las instrucciones anteriores cua-
jgn- cuatro dígitos del objetivo.
tro veces. Podemos recurrir a
otro tipo de ciclos:
fe Detener grabación
Como antes, cada vez que la
comparación detecta dos
dígitos iguales, se incre-
For i = 1 To 4 menta el valor del puntua-
If Mid(pronóstico, i, 1) = Mid(objetivo, i, 1) Then
ción.
BIEN = BIEN + 1
End If
Pero hay algo mal: las ins-
Figura 10: esta barra de botones indica que está
Next trucciones anteriores califi-
encendido el grabador de macros. El botón seña­
can un dígito como “regular”
lado servirá para apagarlo y dar por terminada la
La instrucción For señala el grabación.
cuando aparece en ambos
comienzo del ciclo e indica que números, sin verificar que
todo lo que sigue hasta la apari- ocupen distintas
ción del Next (fin del ciclo) se eje- posiciones. Para
cutará cuatro veces. La variable restringir la com-
i controla el avance del ciclo y se paración a posi-
usa, al mismo tiempo, para ciones diferentes
designar la posición del dígito a se agrega una
analizar. Es decir, que el ciclo segunda condi-
comenzará comparando los pri- ción en la ins-
meros dígitos, luego comparará trucción If: If
los segundos y así sucesiva- Mid(pronóstico, i, 1) =
mente. Cada vez que se detecta Mid(objetivo, j , 1) And
que los dígitos comparados son Figura 11: el editor de VBA y la macro correspondiente a la
i<>j Then
iguales, la variable donde se selección y borrado de un rango.
El signo <> repre-
guarda el puntuación incre- senta la desi-
menta su valor en una unidad. La función REGULAR gualdad. Esta modificación ase-
En forma similar a lo que ocu- Un dígito se califica como “regu- gura que s o l a m e n t e se
rre con las macros, el código de lar” cuando está presente tanto comparan dígitos que ocupan
las funciones comienza con la en el número objetivo como en posiciones d i f e r e n t e s . L a
instrucción especial Function, nuestro pronóstico, pero en dis- función t e r m i n a d a aparece
seguido del nombre de la fun- tinta posición. Es decir que, en en la Figura 4 .
ción. Este nombre es el de la este caso, cada dígito del pro-

PCW 256
Usando las funciones
Habiendo creado las funciones en el editor de
VBA, ya las podemos usar. Considerando la
hoja de cálculo de la Figura 1, supondremos que
nuestros pronósticos serán escritos en la
columna A, debajo del número objetivo (que
permanecerá oculto al oscurecer su celda). En
las columnas B y C debemos obtener las respec-
tivas puntuaciones. En la celda B2 escribimos
=BIEN(E$1;A2), en la celda C2 escribimos
=REGULAR(E$1;A2). Estas dos fórmulas comparan el
objetivo que está en la
celda E1 con los pronósti-
cos que iremos escri- Excel incluye
biendo a partir de la celda
A2. Ambas deben exten-
un par de
derse hacia abajo para funciones para
poder conservar las pun-
tuaciones de todos nues-
generar
tros intentos. Diez inten- números
tos es una cantidad razo-
nable.
aleatorios de
La hoja de cálculo termi- determinadas
nada aparece en la Figura
5, con algunas opciones
características.
de formato para hacerla Pero ninguna de
más elegante. Del botón
que se ve a la derecha
ellas nos
hablamos en el apartado asegura que el
Cómo se ejecuta una
macro.
número
generado tenga
Comienza el juego
E s t á todo listo p a r a
todos sus
comenzar a jugar. Para dígitos
ello ejecutamos la macro,
escribimos nuestro pro-
diferentes,
nóstico en A2. Las celdas condición
B2 y C2 mostrarán la pun-
tuación de ese pronóstico.
necesaria en el
Con la información sumi- Master Mind
nistrada por estas pun-
tuaciones, escribimos otro
número en A3. Cuando la función escrita en la
columna B muestre el valor 4, es que hemos
acertado. Los cuatro dígitos de nuestro último
intento están “bien”.
Como dijimos antes, deberíamos adivinar el
número generado por la computadora en no
más de diez intentos.
Puede encontrar la hoja de cálculo terminada
y funcionando (con ligeras modificaciones
estéticas) en el área de descarga de listados de
nuestra páginas web: www.idg.es/pcworld PCW

Claudio Horacio Sánchez es ingeniero industrial


y profesor de física y de informática en la Uni-
versidad de Flores (Argentina). Ha escrito
varios libros sobre Excel.

También podría gustarte