Las macros que vamos a ver a lo largo de este curso las vamos a ir programando directamente con
el Editor de Visual Basic que viene incorporado con el mismo Excel.
Para ponerlo en funcionamiento deberemos realizar los siguientes pasos: 1.- Dentro del men Herramientas - Macro deberemos escoger la opcin: Editor de Visual Basic. !na vez seleccionada se abrir" una nueva ventana con dos ventanas acopladas a la izquierda. La superior es la ventana que llamamos: de Proyecto # la inferior la de Propiedades. En la primera aparecer"n los elementos que forman parte de cada Proyecto $grupo de macros # %o&as de Excel' # la segunda son las propiedades de los ob&etos que se pueden incorporar a nuestras macros. ("s adelante veremos como se utilizan estas dos ventanas # todas sus caracter)sticas. *amos a prepararnos para poder escribir nuestra primera macro +.- Escoge la opcin Mdulo del men Insertar. ,bserva como en la ventana superior aparece nos aparece una nueva carpeta llamada Mdulos # en su interior un nuevo elemento llamado Mdulo1. Dentro de este mdulo ser" donde guardemos las macros que creemos. -ambi.n podr"s ver como la parte derec%a de la ventana a%ora es completamente blanca. /qu) es donde podemos escribir las instrucciones que formar"n parte de nuestra (acro. *amos a crear una (acro # esta nos servir" de e&emplo para ver como se deben escribir. 0rearemos una (acro mu# sencilla la cual nos servir" para que la p"gina activa pase a ser la segunda. 1.- En la p"gina en blanco de la derec%a escribe lo siguiente: Sub Cambiardehoja() Worksheets(2).Activate End Sub El comando Sub indica el principio de la (acro2 mientras que End Sub marca el 3nal de esta. / continuacin del comando Sub %emos puesto el nombre que deseamos dar a nuestra (acro. ,bserva como despu.s del nombre aparece un par.ntesis que se cierra # otro que se abre. Entre el principio # el 3nal de la (acro escribimos las instrucciones que deseamos se realicen en esta (acro. 4i deseamos guardar la (acro simplemente deberemos guardar el libro activo con el nombre que deseamos. /mbos elementos se guardar"n &untos. En la siguiente leccin veremos como podemos poner en funcionamiento una (acro creada por nosotros. En la leccin anterior vimos cmo podemos crear # guardar una macro. En esta leccin veremos cmo e&ecutarla # ver lo que esta realiza. Es recomendable poner el nivel de Seguridad a Alto2 de esta forma evitaremos que se e&ecuten macros de libros sin nuestro permiso. El nivel de seguridad lo podremos modi3car desde el men: Herramientas - Macro - Seguridad...2 escoger la opcin: Alta. 1.- /bre el libro donde tienes guardada la (acro que creamos en la leccin anterior. +.- Despliega el men: Herramientas - Macro !na vez all) podr"s ver como aparece un peque5o submen. 1.- 4elecciona la opcin Macros... -e aparecer" una nueva ventana en la que podr"s ver el nombre que nosotros escribimos detr"s del comando Sub. 6.- 7az un clic sobre este nombre # despu.s pulsa el botn Ejecutar. La (acro se pone en funcionamiento2 podemos observar como la %ora activa pasa a ser la segunda. 8a %emos visto como crear2 guardar # e&ecutar (acros creadas utilizando el Editor de *isual 9asic. / partir de esta leccin iremos viendo peque5as (acros que realizar"n cosas mu# concretas. Estas (acros se podr"n ir entrelazando para as) poder conseguir lo que nosotros deseamos. / partir de este momento vamos a ver peque5as macros que realizan tareas mu# concretas. Para poder ver cmo funcionan simplemente tienes que copiarlas en nuestro Editor de Visual Basic2 segn vimos en la primera leccin # despu.s e&ecutarla2 segn vimos en la segunda. *amos a ver tres (acros que traba&ar"n directamente con libros. 0on ellas podremos abrir un libro existente2 activar un libro # por ltimo crear un libro nuevo. Abrir un libro eistente! para abrir un libro utilizaremos la siguiente (acro. Sub AbrirLibro() Workbooks.Open ("C!"is documentos!Ejemp#o.$#s") End Sub ,bserva cmo entre par.ntesis # comillas dobles %emos escrito el camino # el nombre del arc%ivo que deseamos abrir. Este arc%ivo debe existir2 si no fuera as) esta (acro nos dar)a error. Acti"ar un libro ya abierto! con esta (acro podemos cambiar el libro activo. Es mu# importante que el libro #a est. abierto2 si no fuera as)2 la (acro dar)a error. Sub ACtivarLibro() Workbooks("Ejemp#o.$#s").Activate End Sub ,bserva como en esta (acro no indicamos el camino donde se encuentra el arc%ivo2 no %ace falta #a que este debe estar abierto. #rear un libro nue"o! con la siguiente (acro podremos crear un libro nuevo. Esta (acro es exactamente igual que si activ"semos la opcin Arc$i"o - %ue"o. Sub %uevoLibro() Workbooks.Add End Sub 4i modi3c"semos este libro despu.s Excel nos preguntar)a si deseamos guardar los cambios. Los nombres de las (acros no tienen porqu. ser necesariamente los mismos que %emos puesto nosotros. En esta leccin veremos algunas macros que nos permitir"n mover por las celdas que contiene un libro. Es recomendable traba&ar con libros que contengan datos para as) poder ver el efecto que la macro %ace sobre la %o&a. Buscar el &nal de una lista! podemos utilizar esta (acro para podernos situar al 3nal de una lista de elementos. :nterpretaremos que el 3nal de la misma est" en el momento en el que encontramos una celda vac)a. Sub &ina#() Whi#e ActiveCe##.'a#ue () "" ActiveCe##.O*set(+, -)..an/e("A+").Se#ect Wend End Sub Deberemos observar que con esta (acro siempre queda activada la primera celda que est" en blanco despu.s de toda la lista. Buscar el &nal de una lista y situarnos en la 'ltima entrada! esta (acro es exactamente igual que la anterior pero con la nica diferencia que la celda activada es la ltima entrada de la lista. Sub &ina#Lista() Whi#e ActiveCe##.'a#ue () "" ActiveCe##.O*set(+, -)..an/e("A+").Se#ect Wend ActiveCe##.O*set(0+, -)..an/e("A+").Se#ect End Sub En esta (acro se realiza el bucle %asta que se encuentra la celda vac)a # despu.s subimos una posicin para situarnos en la ltima entrada de la tabla. En esta leccin continuaremos con las macros que nos permiten movernos por nuestro documento. Buscar una entrada en una lista y borrar toda la &la! vamos a imaginar que tenemos una tabla de datos en la cual nos interesa buscar un elemento determinado # borrar todos los datos que %a# en la misma 3la. Pongamos el caso que tenemos una tabla con nombre2 poblacin # tel.fono # deseamos buscar todos los datos de una poblacin determinada # borrar el nombre # la poblacin Para %acer la bsqueda deberemos situarnos en la 3la que se encuentra la poblacin. Sub 1orrar&i#as() Whi#e ActiveCe##.'a#ue () "" 23 ActiveCe##.'a#ue () "1arce#ona" 4hen ActiveCe##.O*set(+, -)..an/e("A+").Se#ect E#se Se#ection.Entire.o5.6e#ete End 23 Wend End Sub Es importante %acer notar que si e&ecutamos esta (acro no se podr" des%acer el borrado de las 3las que se %an eliminado con la (acro. Buscar el &nal de una lista con espacios en blanco dentro de ella! imaginemos que tenemos una lista de datos dentro de la que %a# espacios en blanco2 como muc%o un espacio en blanco entre dato # dato. 4i utiliz"semos la primera macro que %emos creado esta interpretar)a como 3nal de la lista el primer espacio en blanco que encontrara. ;ealizaremos una macro que interpretar" el 3nal de la lista cuando encuentre + espacios en blanco seguidos. Sub &ina#ListaEspecia#() Sa#ir 7 "%o" Whi#e Sa#ir 7 "%o" Whi#e ActiveCe##.'a#ue () "" ActiveCe##.O*set(+, -)..an/e("A+").Se#ect Wend ActiveCe##.O*set(+, -)..an/e("A+").Se#ect 23 ActiveCe##.'a#ue () "" 4hen Sa#ir 7 "%o" E#se Sa#ir 7 "Si" End 23 Wend End Sub En lecciones anteriores %emos visto cmo movernos por una lista # cmo eliminar algunos de ellos segn nos conviniera. /%ora vamos a ver cmo podr)amos utilizar estas dos cosas vistas en lecciones anteriores para poder eliminar elementos repetidos de una lista. Eliminar elementos repetidos en una lista! vamos a realizar una macro la cual nos va#amos desplazando por una lista2 %asta encontrar un elemento vac)o e ir comprobando si un elemento es igual al anterior2 si esto es as) lo eliminaremos # <subiremos< un lugar la lista para que as) no existan lugares vac)os en la lista El nico requisito que %a# que cumplir para realizar esta macro es que la lista debe estar completamente ordenada. Sub E#iminar.epetidos() contador 7 - va#or 7 ActiveCe##.'a#ue ActiveCe##.O*set(+, -)..an/e("A+").Se#ect Whi#e ActiveCe##.'a#ue () "" 23 ActiveCe##.'a#ue 7 va#or 4hen Se#ection.6e#ete Shi3t7$#8p contador 7 contador 9 + E#se va#or 7 ActiveCe##.'a#ue ActiveCe##.O*set(+, -)..an/e("A+").Se#ect End 23 Wend .espuesta 7 "s/1o$("Se han encontrado " : contador : " e#ementos repetidos", +, "%;mero de repetidos") End Sub En esta macro estamos utilizando una variable llamada contador la cual nos servir" para contabilizar el nmero de elementos repetidos que encontramos en la lista. Este valor lo mostramos al 3nalizar la macro. En esta leccin seguiremos con la creacin de macros que nos servir"n para eliminar elementos repetidos de una lista. Eliminar elementos repetidos en una lista y reali(ar un registro! en la primera macro que %emos mostrado en esta p"gina eliminamos todos los elementos que aparecen repetidos dentro de una lista quedando uno solo de todos los elementos repetidos. 4egn para qu. realiz"semos este proceso nos podr)a interesar llevar un control de la cantidad de elementos que estaban repetidos2 por esto ser)a conveniente crear en una %o&a nueva2 un registro de cual es el elemento repetido # el nmero de veces que aparec)a dentro de la lista. La macro siguiente necesita que los elementos est.n ordenados en una primera %o&a # que la segunda %o&a est. vac)a2 #a que ser" aqu) donde se realizar" el registro de los elementos repetidos. Sub E#iminar.epetidos<.e/istro() contador 7 + va#or 7 ActiveCe##.'a#ue ActiveCe##.O*set(+, -)..an/e("A+").Se#ect Whi#e ActiveCe##.'a#ue () "" 23 ActiveCe##.'a#ue 7 va#or 4hen ActiveSheet.%e$t.Se#ect 23 ActiveCe##.'a#ue () va#or 4hen ActiveCe##.O*set(+, -)..an/e("a+").Se#ect ActiveCe##.'a#ue 7 va#or End 23 ActiveSheet.=revious.Se#ect Se#ection.6e#ete Shi3t7$#8p contador 7 contador 9 + E#se 23 contador () + 4hen ActiveSheet.%e$t.Se#ect ActiveCe##.O*set(-, +)..an/e("a+").Se#ect ActiveCe##.'a#ue 7 contador ActiveCe##.O*set(-, 0+)..an/e("a+").Se#ect ActiveSheet.=revious.Se#ect End 23 contador 7 + va#or 7 ActiveCe##.'a#ue ActiveCe##.O*set(+, -)..an/e("A+").Se#ect End 23 Wend 23 contador () + 4hen ActiveSheet.%e$t.Se#ect ActiveCe##.O*set(-, +)..an/e("a+").Se#ect ActiveCe##.'a#ue 7 contador ActiveCe##.O*set(-, 0+)..an/e("a+").Se#ect ActiveSheet.=revious.Se#ect End 23 End Sub / partir de este momento vamos a ver peque5as macros que realizan tareas mu# concretas. Para poder ver cmo funcionan simplemente tienes que copiarlas en nuestro Editor de Visual Basic2 segn vimos en la primera leccin # despu.s e&ecutarla2 segn vimos en la segunda. *amos a ver tres (acros que traba&ar"n directamente con libros. 0on ellas podremos abrir un libro existente2 activar un libro # por ltimo crear un libro nuevo. Abrir un libro eistente! para abrir un libro utilizaremos la siguiente (acro. Sub AbrirLibro() Workbooks.Open ("C!"is documentos!Ejemp#o.$#s") End Sub ,bserva cmo entre par.ntesis # comillas dobles %emos escrito el camino # el nombre del arc%ivo que deseamos abrir. Este arc%ivo debe existir2 si no fuera as) esta (acro nos dar)a error. Acti"ar un libro ya abierto! con esta (acro podemos cambiar el libro activo. Es mu# importante que el libro #a est. abierto2 si no fuera as)2 la (acro dar)a error. Sub ACtivarLibro() Workbooks("Ejemp#o.$#s").Activate End Sub ,bserva como en esta (acro no indicamos el camino donde se encuentra el arc%ivo2 no %ace falta #a que este debe estar abierto. #rear un libro nue"o! con la siguiente (acro podremos crear un libro nuevo. Esta (acro es exactamente igual que si activ"semos la opcin Arc$i"o - %ue"o. Sub %uevoLibro() Workbooks.Add End Sub 4i modi3c"semos este libro despu.s Excel nos preguntar)a si deseamos guardar los cambios. Los nombres de las (acros no tienen porqu. ser necesariamente los mismos que %emos puesto nosotros. En las lecciones anteriores %emos visto como eliminar elementos repetidos existentes en una misma 3la. En este e&emplo realizaremos comparaciones entre diferentes columnas2 eliminando de la primera los elementos que existan en la segunda. En la primera columna est"n todos los elementos que forman parte de la lista # en la segunda columna se van colocando los elementos que se desean buscar para eliminar de la primera. / continuacin escribiremos la macro completa # despu.s explicaremos que realiza cada una de las l)neas. El nmero que aparece al principio de cada una de las l)neas nos servir" como gu)a en la explicacin2 no debes copiarlos en el Editor. + Sub .epetidos() 2 .an/e("1+").Se#ect > =osicion 7 + ? Whi#e ActiveCe##.'a#ue () "" @ va#orcomparacion 7 ActiveCe##.'a#ue A .an/e("a+").Se#ect B Sa#ir 7 "no" C Whi#e ActiveCe##.'a#ue () "" And Sa#ir 7 "no" D 23 ActiveCe##.'a#ue 7 va#orcomparacion 4hen +- respuesta 7 "s/1o$("E6eseas borrar esta entradaF", ?, "GGEncontradoHH") ++ 23 respuesta 7 vb<es 4hen +2 Se#ection.6e#ete Shi3t7$#8p +> End 23 +? Sa#ir 7 "si" +@ E#se +A ActiveCe##.O*set(+, -)..an/e("A+").Se#ect +B End 23 +C Wend +D =osicion 7 =osicion 9 + 2- .an/e("b+").Se#ect 2+ ActiveCe##.O*set(=osicion 0 +, -)..an/e("a+").Se#ect 22 Wend 2> End Sub /ntes de realizar la explicacin tenemos que de&ar mu# claro que la columna A2 ser" donde tenemos todos los datos de nuestra lista # la columna B2 los datos que deseamos buscar # eliminar de la primera columna. En esta leccin realizaremos la explicacin paso a paso de la macro que %emos escrito anteriormente para la comparacin entre dos columnas. )*nea +! con esta instruccin nos situamos en la primera celda de la columna B para empezar a buscar los datos que deseamos borrar. )*nea ,! creamos una variable llamada Posicin para controlar en que 3la nos encontramos de la segunda columna )*nea -! aqu) creamos un bucle que se repetir" %asta que no se terminen los elementos a buscar. )*nea .! creamos una variable llamada "alorcomparacion con la que traba&aremos para ir comparando los elementos de la primera # segunda columna. El valor de la celda en la que nos encontramos en la columna B2 pasa a estar en la variable "alorcomparacion. )*nea /! cambiamos a la columna A para iniciar el proceso de comparacin. )*nea 0! creamos una nueva variable llamada Salir con la que controlaremos si debemos salir del bucle o no. 4olamente saldremos en el momento en el que se encuentre un elemento que est" en la segunda # primera columna. )*nea 1! aqu) iniciamos un bucle que se repetir" %asta que se llegue al 3nal de la primera columna2 $caso que se dar" cuando no existan elementos comunes' o %asta que se encuentre un elemento comn2 $esto nos lo indicar" la variable 4alir'. )*nea 2! en esta l)nea preguntaremos si la celda en la que nos encontramos $primera columna' es igual que el valor que tenemos dentro de la variable: "alorcomparacion. )*nea 13! si se %a producido la coincidencia de elementos procedemos a preguntar si realmente deseamos borrar este elemento. )*nea 11! miramos si la respuesta del usuario %a sido a3rmativa. 4eguiremos la explicacin paso a paso en la siguiente leccin.