Upload
christopher-gibson
View
58
Download
0
Embed Size (px)
Citation preview
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 1/16
Cómo hacer que un macro se repita
EL BUCLE DO
Un bucle Do« cuenta las filas de un grupo de datos siempre que no haya ninguna fila
vacía.
Suponga que desea contar el número de filas de un grupo de datos que a veces es
pequeño y otras extraordinariamente grande. Quiere utilizar un bucle Do«. Este tipo de bucle realiza una acción tantas veces como sea necesario. Contaría el número de filas
que encontrara en el conjunto de datos. O suponga que desea realizar una acción en dosgrupos de datos que contienen un número diferente de filas. También utilizaría un bucle
Do«. El bucle se ejecutaría tantas veces como fuera necesario para los dos grupos de
datos. ¿Cómo sabe el bucle lo que es necesario? Usted se lo indica. El bucle deja de
ejecutarse cuando encuentra un segmento de datos específico, como una línea en blanco
o un determinado texto.
Para especificar cuándo debe parar el bucle Do«, se utiliza la condición While o lacondición Until. El bucle se ejecuta mientras se cumplan determinadas condiciones o
hasta que se cumpla una determinada condición. Por tanto, para que un bucle se detengacuando encuentre una celda en blanco en la primera columna, utilizaría una condición
While como la siguiente:
Aquí se utiliza la condición While para que el bucle se ejecute mientras la celda en la
que trabaja no esté en blanco. La celda en la que el bucle trabaja es x, y (x,1) es la
primera celda de esa fila. Utilizados juntos, los signos <> significan "no es igual". Las
comillas con nada en medio indican una celda en blanco.
Si quisiera que el bucle se ejecutara hasta que encontrara una celda con el número 365,utilizará la condición Until. De esa forma, le indicaría al bucle cuándo debe parar.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 2/16
BUCLE FOR EACH
Un bucle For Each«Next permite que la palabra "Aceptar" aparezca más oscura que
otro texto, en cualquier lugar de una selección.
Utilizaría el bucle For Each«Next para realizar una acción en cada celda de un grupo
de datos. Suponga, por ejemplo, que desea que la palabra "Aceptar" aparezca másoscura que el resto del texto en cualquier lugar del grupo de datos seleccionado. El
código sería similar al siguiente:
"MyCell" indica cualquier celda en la que trabaje el bucle, y "For Each" indica que el
bucle actuará sobre todas las celdas de la selección. Si el bucle encuentra una celda que
contiene la palabra "Aceptar", la mostrará más oscura. (La apariencia del texto se
controla mediante la propiedad Font, y la propiedad Bold indica un texto más oscuro.)
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 3/16
Los bucles Do« y For Each«Next son eficaces aunque simples. Ahora vamos acomplicar un poco las cosas introduciendo bucles anidados. Los bucles anidados se
utilizan cuando hay que realizar una acción en un grupo de datos varias veces, o a través
de varios grupos de datos. Para establecer una analogía con los bucles anidados,considere el movimiento de traslación de la Tierra. Una vuelta completa alrededor delSol, un año, es similar al bucle exterior, y el movimiento de rotación de la Tierra en
torno a su eje es similar al bucle interior anidado dentro del bucle exterior. Cada año se
producen 365 bucles interiores, y el bucle exterior se repite cada primero de enero:
Es cierto que este código no se ejecutaría en Excel, pero ilustra el hecho de que para
cada gran bucle (alrededor del Sol) hay 365 bucles más pequeños (alrededor del eje de
la Tierra).
Considere también un proceso que sí que se ejecutaría en Excel. Suponga que desea
quitar las filas duplicadas de una hoja de cálculo. Podría comparar la primera fila con
todas las demás, buscar los duplicados y eliminarlas. A continuación, compararía la
segunda fila con todas las demás, y así una y otra vez. El bucle exterior permitiría que el
bucle se repitiera para cada fila, y el bucle interior realizaría la tarea de comparar y
eliminar.
En la siguiente lección veremos exactamente cómo se realiza esta operación
EJEMPLO 1
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 4/16
Con esta macro, podría combinar valores de dos columnas en una tercera columna, con
un espacio en medio. En los datos de la práctica, las columnas que se van a combinar son First Name, Last Name y Full Name, como se muestra en la ilustración. Tal vez esté
pensando "Esto lo podría hacer con una fórmula. ¿Para qué necesito una macro?", yestaría en lo cierto. Puede hacer muchas cosas en Excel con fórmulas, y este proceso
parece ser el candidato ideal para una fórmula. Sin embargo, también sirve para explicar
cómo funciona un bucle Do« y qué se puede hacer con este tipo de bucle.
En este ejemplo, el primer nombre y el apellido se copian en la columna Full Name
(nombre completo) con un espacio en medio. Esta operación se realiza mientras el valor
de Cells(x,3) no esté en blanco. La variable x se utiliza para controlar el número de fila
actual y, cuando x aumenta, la operación continúa en la fila siguiente. Las columnas seespecifican mediante los valores constantes 3, 4 y 5, que representan las columnas C, D
y E, respectivamente.
Sugerencia Preste especial atención al texto comentado en verde cuando intentecomprender el funcionamiento de estas macros de VBA. Cuando trabaje con el Editor
de Visual Basic, podrá insertar más comentarios escribiendo un apóstrofo al principiode una nueva línea. VBA omite esa línea cuando ejecuta la macro.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 5/16
EJEMPLO 2
Con esta macro, podría definir los colores de fondo de las celdas del rango
seleccionado. El fondo será rojo si la celda contiene la palabra "book" (libro), verde si
contiene la palabra "movie" (película), azul si contiene otro valor y claro si la celda está
en blanco.
Este proceso se podría realizar mediante la característica Formato condicional, pero este
ejemplo de código muestra cómo operar en todas las celdas de un rango seleccionado
con un bucle.
"MyCell" es una variable que controla la celda en la que actúa el bucle. Los asteriscos
del ejemplo de código permiten que el código busque el texto especificado cuando está
integrado en otro texto. Como se muestra en la ilustración, este código no busca sólo el
texto que empieza por mayúsculas. Encuentra "Book" y "Read the book". Para
conseguir este comportamiento, tendría que especificarlo antes de entrar en la macro.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 6/16
Al principio del módulo, antes de escribir Sub o de pegar otro código, debería
introducir el siguiente código:
Esta opción especifica que todo el código posterior que utilice el operador Like nodistinga entre mayúsculas y minúsculas en el texto en el que actúa. Sin esta opción, el
ejemplo de código sólo cambiaría el color del fondo cuando encontrara texto con la
inicial en mayúsculas.
EJEMPLO 3
Con esta macro podría eliminar las filas que contiene valores duplicados en las
columnas D y F. Lo bueno de esta macro es que puede adaptarla para que actúe en
valores duplicados de otras columnas en sus datos.
Nota Tenga cuidado cuando ejecute esta macro. Eliminará los datos de su hoja decálculo. Y cuando se ejecuta una macro, no hay un comando Deshacer. Lo hecho,
hecho está. Para su seguridad, copie primero los datos y ejecute esta macro en la copia
para probar los resultados.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 7/16
El bucle interno busca todas las filas que son un duplicado de la fila inicial y las quita.
El bucle externo desplaza la fila inicial hacia abajo de la selección, fila por fila, hastaque compara cada fila con todas las que están debajo en la selección.
EJEMPLO 4
Como puedo hacer un bucle en una macro para que se ejecute desde la primera hasta la
ultima fila de la hoja excel?
Sub CambiaColor()
'
ActiveSheet.Range("A1").Activate
Do While Not IsEmpty(ActiveCell)
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
Un saludo,
Javi
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 8/16
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 9/16
13.Modifica el código de la macro como este último ejemplo, sitúate en la celda D3 y
ejecuta la macro.
¿A que ya va pareciendo otra cosa? No obstante continúan los inconvenientes. La macrose detiene. Tendríamos que volver a situar el cursor en la primera celda a comprobar de
la segunda columna. Vamos a desplazar la celda activa para que se sitúe
automáticamente en la siguiente columna.
Podríamos, al finalizar el bucle, añadir la siguiente línea:
Loop
R ange( E3 ) Select
End Sub
Y Excel situaría el cursor automáticamente en la siguiente columna. A continuación
sólo quedará volver a ejecutar la macro. El problema viene cuando haya que volver a
ejecutarla en la siguiente columna; el cursor volverá a la celda E3
Vamos a añadir líneas de código que desplacen el cursor hacia arriba y lo sitúen en lasiguiente celda con un valor numérico. Corresponde a las pulsaciones Flecha derecha,
Flecha arriba, Fin, Flecha arriba, Flecha abajo que serían las encargadas de situar elcursor en la siguiente columna.
Acti eCell Offset(0, 1) Acti ate
Acti eCell Offset(-1, 0) Acti ate
Selection End(xlUp) Select
Acti eCell Offset(1, 0) Acti ate
De esta forma, controlamos la posición del cursor de forma que se sitúe en la primera
celda numérica de la siguiente columna.
1.Modifica la macro de esta forma.
2.Prueba la macro.
3.En la siguiente columna, vuelve a ejecutar la macro.
La macro debería pasar siempre de una columna a otra
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 10/16
Estructuras de Repeticion (Bucles For ..Next )Las estructuras For...Next las emplearemos en los casos cuando s conocemos el número de
veces que es necesario repetir la ejecucion de determinadas instrucciones
Sub obtener_los_56_colores()
'aqui es conocido que Excel maneja una paleta de 56 colores
'entonces sabemos tambien que es necesario repetir cierta seccion del codigo
Dim a As Byte
Range("A1:A56").Select
For a = 1 To 56 'repetir 56 veces
Selection.Cells(a).Interior.color = ActiveWorkbook.Colors(a)
'asignar colores del libro a la respectiva celda
Next a
End Sub
Do While« Loop
Instrucción que repite las instrucciones mientras una condición esTRUE/VERDADERO.
Ejemplo
Excel tiene valores en las celdas B1:B100. Quieres buscar la primera celda que tenga un
valor más alto/igual que 1,50.
i = 1
Do While Cells(i, 2) <> ""
f Cells(i, 1) >= 1.5 Then Exit Do
i = i + 1
Loop
MsgBox "El valor se encontró en fila no. " & i
i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 2) significará línea i
(=1), columna 2. Es decir celda B1. Al final del bucle, i nos dará la línea que buscamos.
Do While Cells(i, 2) <> ³´ significa que queremos que un bucle siga hasta que no hayan
más celdas con valores en esta columna.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 11/16
Aplicamos la condición a cada celda, para luego salir del bucle (Exit Do) si encuentra
un valor igual a ó más alto que 1,50 (VBA utiliza punto en vez de coma paradecimales).
Al final devolvemos un Messagebox para presentar el resultado.
ba_ bucles_dowhile«loop asp
Instrucción que repite las instrucciones hasta que una condición se convierta en
TRUE/VERDADERO.
Ejemplo
Una hoja Excel tiene datos (en este caso nombres) en las celdas A1:A5. Queremos que
el bucle pare en ³Alexis´.
A B
1 Alberto
2 Alejandro
3 Alex
4 Alexis
5 Allain
6
i = 1
Do Until Cells(i, 1) = "Alexis"
i = i + 1
Loop
MsgBox "El nombre Alexis se encontró en la línea " & i
i = la línea donde empezamos el bucle. Ponemos i = 1. Cells(i, 1) significará línea i
(=1), columna 1.
Es decir celda A1. Al final del bucle, i nos dará la línea que buscamos.
Do Until Cells(i, 1) = ³Alexis´ significa que queremos que un bucle que siga hasta que
encuentre la cadena de texto ³Alexis´.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 12/16
Al final presentamos una caja de diálogo para presentar el resultado, cual en este caso
sería 4.
For i« Next
Esta instrucción se repite el número de veces (i) que tú indicas.
Ejemplo
Creamos un bucle sencillo. Queremos que se repita 4 veces, y que la variable intValor
(al empezar = 1) se incremente con 2 cada vuelta. Este nos da el resultado intValor = 9
(1+2+2+2+2).
Observa que el bucle tiene step 1. Esto significa que i se incrementa con 1 cada vuelta.Esto es, que si queremos un bucle que vaya para atrás, pondríamos step -1.
intValor = 1
For i = 1 to 4 step 1
intValor = intValor + 2
Next i
For Each« Next
Instrucción que repite las instrucciones según el número de objetos especificados.
Por ejemplo, For each Cell de un rango en Excel.
Ejemplo
En este ejemplo vamos a construir un bucle que evalua cada celda de un rango. El rango
será celdas A1:A5, que se
escribe como Range(Cells(1, 1), Cells(5, 1). Con el Exit For salimos del bucle al
cumplir la condición.
Dim rngArea
rngArea = Range(Cells(1, 1), Cells(5, 1))
For Each Cell In rngArea
If Cell = "Alexis" Then
MsgBox "¡Encontró Alexis"
Exit For
End If
Next
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 13/16
Macro para crear una tabla dinámica
En esta lección continuaremos profundizando en el estudio de las macros y crearemos
nuevas para nuestra ho ja de Pedidos. ls.
En tu capacidad de contable y analista de la empresa cuya ho ja utilizamos en la pasadalección, te habrás sentido admirado de cómo se distr i buyen en las diferentes líneas de
diseño de camisetas en las diferentes áreas geográf icas de Amér ica y por los diferentes
canales de ventas.
Vamos a crear una tabla dinámica que muestre las unidades de los pedidos por
categor ías, resaltando celdas que contengan ventas excepcionales. Más adelante
crearemos otra tabla para producir gráf icos.
Macro para crear una tabla dinámica de referencias cruzadas.-
1.Sin nada en pantalla, abre la ho ja Pedidos.db para abr ir nuestra base de datos
histór ica de pedidos que realizamos en la lección anter ior.
2.Accede a atos - Informe de tablas y gráf icos dinámicos.
3.En el paso 1, pulsa en iguiente.
4.En el paso 2, selecciona todo el rango de datos y pulsa enSiguiente.
5.En el paso 3 f inaliza y después coloca los campos como sigue:
6.Pulsa en Siguiente.
7.En el último paso, acepta de forma que la tabla se cree en una nueva ho ja.
8.Ba ja el zoom al 75%
9.Cámbiale el nombre a la ho ja por el de: Tabla dinámica.
10.Desde la opción rchivo - Guardar como... guarda el li bro con el nombre: ategorías. ls (asegúrate de que guardas con formato XLS).
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 14/16
La tabla muestra una información global de los productos, pero vamos a ver la relación
que existe entre las distintas categor ías de diseño. Para ello, conver tiremosla tabla para
que produzca en porcenta jes y así poder comparar me jor la relación existente.
11.Ve a la celda A1.
12.Pulsa sobre el botón onf iguraci n de campo de la barra de herramientas:
Aparece el cuadro de diálogo del campo de la tabla con información sobre el campo
Suma de unidades.
13.Pulsa sobre el botón pciones para expandir el cuadro de diálogo.
14.Selecciona de la lista la opción Mostrar datos como... - % de la f ila.
15.Selecciona la palabra Suma del nombre del cuadro y sustitúyelo por Porcentajes:
16.Sal del cuadro aceptando los cambios.
Observa cómo los datos se han conver tido a porcenta jes. La columna de la derecha
visualiza los porcenta jes al 100%. Vamos a hacer que no se visualicen:
17.Selecciona cualquier celda de la columna K .
18.Accede a ormato - Columna - Ocultar.
Ahora nadie podrá ver que el total es el porcenta je 100% del total de la f ila.
Crear una macro que marque las excepciones manualmente.- Imaginemos que queremosmarcar en color amar illo todas aquellas celdas cuya cantidad sea super ior al número 30.
Manualmente, si la ho ja es muy grande, puede ser un traba jo mor tal.
1.Selecciona la celda .
2.Abre la paleta por tátil de colores y selecciona el color amar illo. (El sexto color). El
fondo se conver tirá en amar illo.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 15/16
3.Busca hacia aba jo en la columnaD para la siguiente columna con valor super ior al
30%, es decir, la celdaD7, y cambia su fondo a amar illo igual que la celda anter ior.
Dar formato a una celda para que disponga de color y un aspecto especial puede ser
diver tido las dos o tres pr imeras veces. Pero cuando se repite la misma acción una y otra
vez, puede ser bastante aburr ido.
Vamos a crear una macro que mirará si la celda es super ior a un valor. Si lo es, le dará
el color amar illo de fondo.
1.Crea una nueva macro y la llamas: FormatoCelda.
2.En Opciones, asígnale la combinación Ctrl + K
3.Coloca el fondo amar illo.
4.Finaliza la grabación de la macro.
5.Sitúa el cursor en cualquier celda con valor super ior a 30%
6.Pulsa Ctrl + K
Evidentemente, esto es como hacer lo manualmente, pero con una combinación de teclas
que llame a una macro. Veamos cómo modif icar la:
7.Accede a Herramientas - Macro - Macros, selecciona la macro y pulsa enModif icar.
8.Observa el código. Siempre hará lo mismo.
9.Modif ícalo añadiendo estas líneas:
La rutina If ...Then - End If comprueba si la condición que sigue a If es cier ta. Si lo es,
se e jecutan las sentencias del inter ior. Si no lo es, no se e jecutan. Esta orden debe acabar
con la sentencia End If .
10.Cierra la ventana del editor y sitúa el cursor sobre alguna celda cuyo valor no pase
del 30%. E jecuta la macro pulsando Ctrl + K y observa que no aparece el color de
fondo.
11.Haz lo mismo con cualquier celda que sí pase del 30%.
7/16/2019 55504001 Creacion de Bucles Para Macros en Excel[1]
http://slidepdf.com/reader/full/55504001-creacion-de-bucles-para-macros-en-excel1 16/16
La macro va tomando cuerpo, pero todavía tenemos que desplazar el cursor
manualmente y mirar si el contenido de la celda es super ior a la condición establecida.
Vamos a hacer que el cursor se desplace automáticamente una celda hacia aba jo. Para
ello, utilizaremos la orden offset (f ila,columna).
12.Agrega estas líneas: