lunes, 27 de febrero de 2012

Acelerando el uso de Excel con macros para envio de direcciones

En este ejemplo vas a asumir que quieres hacer envio de correspondencia de excel a word. Sin embargo, cuando la persona te envia la data, estaba en la secuencia equivocada. En lugar de tener la data distribuida en columnas, la data tenia la informacion en la columna A.
Aunque tu podrias arreglar este tipo de error manualmente, te tomaria mucho tiempo cortar y pegar. Esto se puede automatizar con una macro.

Grabar una macro
La meta es grabar una macro simple que resolvera un registro. Para esto tienes que poner activa la celda con la que vas a comenzar. La macro deberia mover los 2 campos que estan debajo, eliminar las 3 celdas vacias, y terminar con el siguiente nombre. De este modo, tu puedes ejecutar la macro una y otra vez.
Para comenzar vamos a poner la celda activa en A1.
Ahora vamos a Vista-Macros-Grabar Macro.
Le damos un nombre a la macro (sin espacios). Escribimos un atajo de teclado. Dado que para este ejemplo solo usaras una macro, algo como Ctrl+a podria ser facil de recordar.
Una vez que tu haz empezado a grabar una macro, puedes ver el boton de Detener Macro. Abajo esta el boton de Usar Referencias Relativas.
Si tu presionas empiezas a grabar la macro ahora, Excel usaria las direcciones. Esto quiere decir, que asumiria que tu quisiste mover A2 a V1 y A3 a C1. Esto funciona para un registro, pero tu necesitas que la macro funcione para todos los registros. Activa las Referencias Relativas dando click en el boton.

Pasos para completar la tarea
Todo lo que tu hagas sera grabado. De ser posible, usa pulsaciones en vez del mouse.
Acciones Teclas que vas a presionar Que es lo que graba
Bajar una fila
Seleccionar 2 filas
Abajo
Mientras mantienes presionada la tecla Shift, presiona abajo.
ActiveCell.Offset(1, 0).Range("A1:A2").Select
Cortar Ctrl+X Selection.Cut
Mover una fila arriba y a la derecha una columna Arriba, Derecha ActiveCell.Offset(-1, 1).Range("A1").Select
Pegar Ctrl+V ActiveSheet.Paste
Moverte a la fila 2, Columna B Abajo ActiveCell.Offset(1, 0).Range("A1").Select
Cortar Ctrl+X Selection.Cut
Mover una fila arriba y 2 columnas a la izquierda
Selecciona 3 celdas(filas)
Abajo, Izquierda, Izquierda
Mientras se mantiene presionada la tecla shift, presiona abajo, abajo, abajo
ActiveCell.Offset(1, -2).Range("A1:A3").Select
Desde el menu seleccione inicio, eliminar Poner el mouse en el menu inicio, luego poner el mouse en el boton eliminar Selection.Delete Shift:=xlUp
A este punto, esta casi finalizada la macro. El problema es que, como mostramos abajo, tu haz seleccionado 3 celdas y tu solo quieres el nombre seleccionado.
Acciones Teclas que vas a presionar Que es lo que graba
Selecciona el nombre de la persona en el siguiente registro Arriba, Abajo ActiveCell.Select
Detener la grabacion Click en el boton Detener Grabacion

Probar la macro
Es tiempo de ejecutar la macro. Antes que lo intentes, graba todo antes que algo inesperado ocurra.
Pulsa Ctrl+a o ejecuta la macro una vez. Si todo va bien la macro arreglara el siguiente nombre.
Ejecutar la macro muchas veces
Si funciono bien una vez, cada vez que pulses Ctrl+a otro registro sera corregido.
Asi es como se vera el codigo en el editor de Visual Basic.
Sub RearrangeAddressBook()
'
' RearrangeAddressBook. Macro Recorded by XSaint, 27/02/12
'
' Keyboard Shortcut: Ctrl+a
'
ActiveCell.Offset(1, 0).Range("A1:A2").Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, -2).Range("A1:A3").Select
Selection.Delete Shift:=xlUp
ActiveCell.Select
End Sub
Esta sencilla macro resuelve un problema de la vida real. La clave para lograrlo fue usar el modo de grabacion relativa.

0 comentarios:

Publicar un comentario