Actualmente me encuentro realizando mi tercera práctica profesional en la cual me han dado como tarea la de realizar un resumen anual de unos servicios de enlaces de internet y telefonía IP. Al ser anual estamos hablando de al menos unos 4000, si cuatro mil, datos en Excel, los cuales se deben filtrar, ordenar y hacer cálculos respectivos.
Para que este proceso no se haga tan tedioso es que he recurrido a una herramienta que muchos han escuchado pero creo estar en la razón al decir que pocos saben utilizar.
Estamos hablando de las Macros.
Cuando hablamos de una Macro en Excel nos referimos a un lenguaje de programación orientado a aplicaciones. En este caso particular, se utiliza VBA (Visual Basic for Applications) el cual es un lenguaje de programación desarrollado por Microsoft. Excel, al igual que los otros programas de Microsoft Office incluyen el lenguaje VBA.
Imaginen un Robot que conoce todo sobre Excel. Este robot puede leer instrucciones y operar sobre Excel de manera rápida y precisa. Simplemente escribimos un lenguaje que este robot comprenda, para que luego el robot haga el trabajo sucio mientras nos relajamos y tomamos una limonada. Eso es justamente VBA. Un lenguaje en código para robots. Pero Ojo, Excel no viene ni con un robot ni con la limonada. =)
La combinación entre la generación de un código VBA y su posterior ejecución en Excel es lo que se llama una Macro. A fin de cuentas una Macro es un programa el cual contiene un trozo de código de manera que podemos automatizar procesos que el realizarlos a mano nos pueden tomar mucho tiempo.
La palabra Macro proviene del griego makros que significa grande-lo cual podría describir el tipo de pago que podrías recibir por convertirte en un experto en programación de Macros.
Otra cosa que se debe tener en cuenta es que VBA no es lo mismo que VB (Visual Basic), ya que VB es un lenguaje de programación que permite crear programas auto ejecutables (conocidos como archivos EXE). A pesar de que VBA y VB tienen mucho en común, son dos cosas distintas.
La idea de crear una Macro es la de automatizar tareas que son repetitivas o que deben ser desarrollas con frecuencia. Por ejemplo, preparar reportes mensuales de manera que todos los meses podrás presentarle a tu jefe reportes con un mismo formato. Él quedará impresionado por tu consistencia y la gran calidad de tu trabajo, e incluso te promoverá a un nuevo cargo al cual no estás capacitado!!
Lo primero a realizar es hacer visible la lengüeta de “Programador”. Por defecto esta lengüeta viene oculta en Excel 2007. Iremos a Inicio y daremos click en “Opciones de Excel”.
La primera opción es “Más Frecuente” y dentro de ella debemos marcar la opción de “Mostrar Ficha Programador en la cinta de Opciones”. Acá podemos observar como la hemos marcado, que en este caso es la tercera opción. Con ello la lengüeta “Programador” está visible y podemos comenzar a utilizar Macros en nuestro libro de Excel.
Lo que cubriremos en este instructivo es la grabación de Macros. Esto es muy parecido a la grabación de acciones que alguna vez cubrimos en un tutorial de Photoshop.
Con ello nos aparece la ventana “Grabar Macro”.
En “Nombre de la macro” pondremos un nombre representativo (Ojo no puede llevar espacios por lo que si desean pueden usar guión bajo “_” para poner espacios entre palabras), en “método abreviado” pondremos una combinación de teclas como acceso directo (por defecto es CTRL +”algo ”, en mi caso utilizá la tecla Shift o Mayúscula más la tecla N), en “Guardar macro en: ” dejamos igual como está, y en “Descripción” anotamos justamente una descripción de lo que hará la macro.
Damos click en “Aceptar ”. Con ello la grabación de la Macro comienza, por lo tanto todos los movimientos que realicemos dentro del libro de Excel serán grabados.
Esta fórmula muestra la fecha y hora actual.
Esto convierte la fórmula a su valor correspondiente.
¡Felicitaciones! Acabas de grabar tu primera Macro. Esta es una buena oportunidad para llamar a tu madre y contarle las buenas noticias.
Ahora solo nos falta correr la Macro y ver los resultados. Para ello iremos a una nueva hoja de cálculo. Seleccionamos la celda A1.
En la lengüeta de Programador hacemos click en Macros con lo cual se nos abre la ventana que administra las Macros.
Elegimos nuestra Macro, que en este caso es única y le damos click al botón ejecutar. También si prefieren pueden seleccionar la celda A1 y simplemente utilizar la combinación de teclas que configuramos, en este caso Ctrl+Shift+N.
Como observarán se ha pegado la información y se le ha dado el formato de letra en negrita y tamaño 16. Con un simple click o combinación de teclas sin necesidad de anotar el nombre, aplicar una fórmula, copiarla, pegarla, seleccionar ambas celdas y darles formato.
Ahora analicemos el código o lenguaje que se ha grabado.
Para ello podemos dar click en el botón “Visual Basic” de la lengüeta Programador o utilizar la combinación de teclas ALT+F11.
Con ello se nos abre el editor de VBA.
Damos click en el símbolo “+” de “Módulos” de manera de ampliar el árbol de módulos y con ello nos aparecerá “módulo 1” tal como se observa en la fotografía.
Con ello se abre el módulo y podemos obsevar el código que se ha generado.
Los comentarios se pueden anotar anteponiendo el símbolo de apóstrofe (’).
En este caso para explicar el código dejaré comentarios en cada línea.
Sub NombreyTiempo() ‘ NombreyTiempo Macro ‘ Esta Macro anota mi nombre y el tiempo ‘ Acceso directo: Ctrl+Mayús+N Range(“A1”).Select ‘Se selecciona la celda A1 ActiveCell.FormulaR1C1 = “Dexter” ‘En ella se insertará Dexter Range(“A2”).Select ‘Se selecciona la celda A2 ActiveCell.FormulaR1C1 = “=NOW()” ‘Se aplica la fórmula Ahora() que en VBA se anota por su nombre en inglés NOW() Range(“A2”).Select ‘Nuevamente seleccionamos la celda A2 Selection.Copy ‘La selección se copia Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ‘Se vuelve a pegar pero como pegado especial, en este caso como Valor Range(“A1:A2”).Select ‘Tomamos el Rango desde la celda A1 a la A2 Application.CutCopyMode = False ‘Esta linea no hace nada en particular ya que no estamos ni copiando ni pegando With Selection.Font ‘Con la seleccion antes hecha, entramos a la configuracion de fuentes .Name = “Calibri” ‘Se selecciona el tipo de fuente, en este caso Calibri .Size = 16 ‘Se selecciona el tamaño de fuente, en este caso 16 .Strikethrough = False ‘los siguientes códigos representan otros parámetros que no son necesarios analizar .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With Selection.Font.Bold = True ‘Con la misma seleccion anterior (celdas A1 y A2), aplicamos el formato de Negrita End Sub
Este código lo pueden copiar y pegar en el editor de Macros de Excel, correrlo y funcionará correctamente.
Bueno con esto me despido, espero que les haya gustado.
Y como siempre, este tutorial ha sido
Felices proyectos!!!!!
Para cualquier consulta no duden en escribirnos.
Estaremos felices de responderles y ayudarles en todo lo posible.
Cómo Lo Hago, si se puede, te lo enseñamos.
8:24:50 am
MUY BUENOS DÍAS
RESULTA Y PASA QUE TENGO UN MODELO DE NOMINA (10 FILAS) EN DONDE CADA UNO DE LOS CAMPOS DE LA FILA ESTA FORMULADO PARA CALCULAR LO DEVENGADO Y LO DEDUCIDO DE CADA UNO DE LOS EMPLEADOS; MI PREGUNTA ES LA SIGUIENTE COMO CREO UNA MACRO QUE ME PERMITA INSERTAR UNA FILA Y QUE ME LA INSERTE CON TODAS LAS FORMULAS
MUCHAS GRACIAS POR SU COLABORACION
12:16:14 pm
estas por la verga
5:38:51 pm
parce muy buena su duplicación con imágenes y todo pero necesito es macros en excel 2010
4:59:21 pm
Muchas gracias por la información que brindás, lo cual será de gran ayuda para los neofitos en excel, lo cual permitirá seguir aprendiendo de este mar de bondades que brinda excel.
6:40:20 pm
Dexter, de antemano espero que estés muy bien y sabes, GRACIAS!!! Gracias a ti es q personas q desconocemos sobre el tema podemos ser mejores personas. Te escribo porque tengo un gran interés en conoces todo acerca de las macros, en que tipo de documentos lo puedo aplicar, y me imagino que también debe de haber muchas formulas para esto y me gustaría que me enseñaras en donde las puedo encontrar o indicarme como puedo aprender bastamente sobre en todo lo que las puedo aplicar. Como bien dices, en muchos trabajos lo solicitan y pocos lo conocemos, lamentablemente no tengo los recursos económicos para tomar un curso personalizado, por eso es q te estaría eternamente agradecido si me puedes indicar como empezar y lo que necesito saber para manejarlas a la perfección.
Dexter, de nueva cuenta gracias y si, talvez si Einstein hubiese tenido un hijo sería como tú, ya q tienen el gran don de dompartirlo con las personas.
Te deseo mucho éxito y gracias por leer este comentario.
Atte. Joseph Duran.
2:23:15 am
Para desarrollar un proyecto muy importante, requiero una macro que me permita traer datos de diferentes filas a las cuales se les asignó códigos o números. Es decir que al digitar el código traiga toda la información de las filas con ese número. Gracias.
4:56:48 pm
como hacerle para generar una macro que tome datos de otro libro, en excel que a su vez tenga la funcion de grabar datos, para que posteriormente puedan ser utilizados por el primer libro y asi generar graficos, o que me muestren todos los datos que requiera, de acuerdo obviamente a los que ingrese.
primeramente no he podido hacer que una macro generada en un libro tome datos de otro, sin que este este abierto o cerrado no los toma, por favor ayudame con un pequeño instructivo.gracias pro tu ayuda……
4:50:31 pm
Dexter, buena tarde, Muchas gracias por los tutoriales, soy nuevo en esto de las macros.
Mi pregunta es que tengo una hoja de calculo donde estoy tratando de automatizar las facturas, he utilizado listas desplegables dependientes, esto con el fin que si en la lista de cliente doy click a uno des los nombres de los clientes en una celda x me despliega la lista de los productos pertenecientes a ese cliente, copie de otor Blog el siguiente envento para que cuando haga click en la lista desplegable de los nombres del cliente, desaparezcan los productos del cliente anterior, lo que pasa es que cuando clierro la hoja de calculo me dice que no puede grabar el evento que le comente anteriormente.aun asi tengo que crear una macro o como hago…este ese el evento,,,
Private Sub Worksheet_Change(ByVal Target As Range)
If Union(Range(“A6”), Target).Address = Range(“A6”).Address Then
Range(“c14”).ClearContents
End If
End Sub
De antemano muchas gracias
2:41:18 am
Estimado Dexter, me encantari volverme experto creando en Excel sistemas de Facturacion sera me puedes enviar un ejemplo claro de como lograr este cometido, sera puedo usar macros para este fin
1:48:58 pm
Buenas tardes Dexter.
Tengo un negocio de piscinas y realicé una tabla excel con filtros con las columnas de proveedores (como una lista desplegable), ref. artículo, descripción, etc… de todos mis artículos.
Para cada artículo, tengo que buscar mirar el código alfanumerico del catálogo y el dto. que me aplican sobre esta categoría alfanumerica en cada articulo para saber el precio mio.
Lo que quiero hacer es una hoja dentro del mismo libro, que mediante un desplegable donde elijo el proveedor, me aparezca la tabla de categorías y descuentos correspondientes, y que cuando cambie estos dtos a mano cada año, automáticamente me detecte en el listado de artículos el cambio de ese dto y me lo aplique de forma automática.
Así evitaria tener que andar mirando y metiendo a mano el mencionado codigo alfanumeríco y dto. de cada uno de los productos, los cuales se modifican cada año, lo que me lleva a modificar un montón de celdas…
A ver si me pudieses indicar como puedo hacer esto porfa, porque me estoy rompiendo la cabeza a base de bien.
Te puedo mandar mi excel por mail para que te hagas una idea real de lo que tengo y sobre eso, que me puedas guiar en como puedo hacer.
Muchisimas gracias de antemano por tu ayuda!!
Un saludo!!!