You are on page 1of 9

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.

You might also like