16
                 

55504001 Creacion de Bucles Para Macros en Excel[1]

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 

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: