Este es el 19 ° consejo semanal de Excel en.com. Muchos de los consejos de Excel implican algún tipo de truco macro. Esta semana, para los usuarios de Excel que nunca han escrito una macro, ofrezco una introducción sobre cómo grabar y luego personalizar una macro de Excel útil.
Supongamos que tiene 400 filas de datos de direcciones como el que se muestra en la figura superior a la izquierda. El campo de nombre está en la columna A, la dirección postal en la columna B y la ciudad en la columna C.
Su objetivo es convertir los datos en una sola columna como la que se muestra en la segunda figura.
Este simple problema se utilizará para ilustrar cómo grabar, modificar y luego ejecutar una macro simple.
Para usuarios de Excel 95: después de grabar la macro, Excel colocará su macro en una hoja llamada Módulo1 en su libro de trabajo. Puede simplemente hacer clic en la hoja para acceder a la macro.
Aunque hay 400 registros en esta hoja de trabajo, quiero registrar una pequeña parte de la macro que se ocupa solo de la primera dirección. La macro asumirá que el puntero de celda está en el primer nombre. Insertará tres filas en blanco. Copiará la celda a la derecha de la celda original a la celda debajo de la celda original. Copiará la celda de la ciudad a la celda 2 filas debajo de la celda original. Luego, debe mover el puntero de la celda hacia abajo para que esté en el siguiente nombre.
La clave es pensar en este proceso antes de grabarlo. No querrás cometer muchos errores al grabar la macro.
Entonces, coloque el puntero de su celda en la celda A1. Vaya al menú y seleccione Herramientas> Macro> Grabar nueva macro. El cuadro de diálogo Grabar macro sugiere un nombre de Macro1. Esto está bien, así que presiona OK.
La grabadora de macros de Excel tiene una configuración predeterminada muy estúpida que es absolutamente necesario cambiar para que esta macro funcione. En Excel 95, vaya a Herramientas> Macro> Usar referencias relativas. En Excel 97-2003, haga clic en el segundo icono en la barra de herramientas Detener grabación. El icono parece una pequeña hoja de trabajo. Un glóbulo rojo en C3 apunta a otro glóbulo rojo en A3. El icono se llama Referencia relativa. Cuando este icono está "encendido", hay algo de color alrededor del icono. El icono recuerda la última configuración de la sesión actual de Excel, por lo que es posible que deba hacer clic en él un par de veces para averiguar qué método está activado o no. En Excel 2007, use Ver - Macros - Usar referencias relativas.
OK, estamos listos para empezar. Sigue estos pasos:
- Pulsa la flecha hacia abajo una vez para pasar a la celda B1.
- Mantenga presionada la tecla Mayús y presione la flecha hacia abajo dos veces para seleccionar las filas 2, 3 y 4
- En el menú, seleccione Insertar, luego seleccione Filas para insertar tres filas en blanco.
- Presione la flecha hacia arriba y luego la flecha hacia la derecha para pasar a la celda B2.
- Presione Ctrl X para cortar la celda B2.
- Presiona la flecha hacia abajo, la flecha hacia la izquierda, luego Ctrl V para pegar en la celda A2.
- Presione flecha arriba, flecha derecha, flecha derecha, Ctrl X, flecha izquierda, flecha izquierda, flecha abajo, flecha abajo, Ctrl V para mover C1 a A3.
- Presione la flecha hacia abajo dos veces para que el puntero de la celda esté ahora en el siguiente nombre en la Fila A5.
- Haga clic en el icono "Detener grabación" en la barra de herramientas para detener la grabación de la macro.
Bueno, has grabado tu primera macro. Vamos a ver. Vaya a Herramientas> Macro> Macros. En la lista, resalte Macro1 y presione el botón Editar. Debería ver algo parecido a esto.
Sub Macro1() ' ' Macro1 Macro ' Macro recorded 4/18/99 by Reader ' ' ActiveCell.Offset(1, 0).Range("A1:A3").Select Selection.EntireRow.Insert ActiveCell.Offset(-1, 1).Range("A1").Select Selection.Cut ActiveCell.Offset(1, -1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Selection.Cut ActiveCell.Offset(2, -2).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(2, 0).Range("A1").Select End Sub
Oye, si no eres un programador, probablemente parece bastante intimidante. No dejes que sea así. Si hay algo que no comprende, existe una excelente ayuda. Haga clic con el cursor en algún lugar de la palabra clave Offset y presione F1. Siempre que haya instalado el archivo de ayuda de VBA, verá el tema de ayuda para la palabra clave Offset. La ayuda le dice la sintaxis de la declaración. Dice que es Offset (RowOffset, ColumnOffset). ¿Aún no está muy claro? Busque la palabra "ejemplo" subrayada en verde cerca de la parte superior de la ayuda. Los ejemplos de VBA de Excel le permitirán saber qué está pasando. En el ejemplo de Offset, dice que para activar la celda dos filas abajo y tres filas a la derecha de la celda actual, usaría:
ActiveCell.Offset(3, 2).Activate
Bien, eso es una pista. La función de compensación es una forma de moverse por la hoja de cálculo de Excel. Dada esta información, puede ver lo que está haciendo la macro. El primer desplazamiento (1, 0) es donde movimos el puntero de celda a A2. El siguiente Desplazamiento es donde subimos una fila (-1 filas) y más de 1 columna. Es posible que no comprenda nada más en la macro, pero sigue siendo útil.
Regrese a la hoja de cálculo de Excel. Coloque el puntero de su celda en la celda A5. Elija Herramientas> Macro> Macros> Macro1> Ejecutar. La macro se ejecuta y se formatea su segunda dirección.
Puede estar diciendo que seleccionar toda esta larga cadena de comandos es más difícil que simplemente formatear a mano. Aceptar, luego vaya a Herramientas> Macro> Macros> Opciones. En el cuadro de acceso directo, diga Ctrl + w es la tecla de acceso directo para esta macro. Haga clic en Aceptar, luego cierre el cuadro de diálogo Macro con Cancelar. Ahora, cuando presione Ctrl w, se ejecutará la macro. Puede formatear una dirección con una sola pulsación de tecla.
¿Estás listo para el gran momento? ¿Cuántas direcciones te quedan? Presioné Ctrl wa varias veces, así que me quedan 395. Vuelve a tu macro. Vamos a poner todo el código macro en un bucle. Inserte una nueva línea que diga "Hacer hasta activecell.value =" "" antes de la primera línea del código de macro. Inserte una línea que diga "Bucle" antes de la línea End Sub. El bucle Do ejecutará todo entre la línea Do y Loop hasta que se encuentre con una línea en blanco. La macro ahora se ve así:
Sub Macro1() ' ' Macro1 Macro ' Macro recorded 4/18/99 by Reader ' ' Do Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Range("A1:A3").Select Selection.EntireRow.Insert ActiveCell.Offset(-1, 1).Range("A1").Select Selection.Cut ActiveCell.Offset(1, -1).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Selection.Cut ActiveCell.Offset(2, -2).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(2, 0).Range("A1").Select Loop End Sub
Regrese a su hoja de Excel. Coloque el puntero de la celda en el siguiente nombre. Presione Ctrl w y la macro formateará todos sus registros en unos segundos.
Los autores de libros de Excel dicen que no se puede hacer nada útil grabando una macro. ¡No es verdad! Para la persona que iba a tener que cortar y pegar 800 veces, esta macro es muy útil. Tomó unos minutos grabar y personalizar. Sí, los programadores profesionales señalarán que el código es terriblemente ineficiente. Excel pone un montón de cosas allí que no necesita. Sí, si supiera lo que está haciendo, puede realizar la misma tarea con la mitad de las líneas que se ejecutarán en 1,2 segundos en lugar de 3 segundos. ¿Y QUÉ? 3 segundos es mucho más rápido que los 30 minutos que hubiera tomado la tarea.
Algunos consejos más para los grabadores de macros principiantes:
- El apóstrofo se utiliza para indicar un comentario. VBA ignora cualquier cosa después del apóstrofe
- Esta es la programación orientada a objetos. La sintaxis básica es object.action. Si un compilador orientado a objetos estuviera jugando al fútbol, diría "ball.kick" para patear la pelota. Entonces, "Selection.Cut" dice que haga un "editar> cortar" en la selección actual.
- En el ejemplo anterior, los modificadores de rango son relativos a la celda activa. Si la celda activa está en B2 y dice "ActiveCell.Range (" A1: C3 "). Seleccionar", entonces selecciona el área de 3 filas por 3 columnas que comienza en la celda B2. En otras palabras, selecciona B2: D4. Decir "ActiveCell.Range (" A1 ")" significa seleccionar el rango de celda 1 x 1 comenzando con la celda activa. Esto es increíblemente redundante. Es equivalente a decir "ActiveCell.Select".
- Guarde su libro de trabajo antes de ejecutar una macro por primera vez. De esta manera, si tiene un error y hace algo inesperado, puede cerrar sin guardar y volver a la versión guardada.
Con suerte, este sencillo ejemplo le dará a los grabadores de macros novatos el valor para grabar una macro simple la próxima vez que tenga una tarea recurrente que realizar en Excel.