“Las computadoras son inútiles, solo pueden darte respuestas”
Pablo Picasso
Bajo esa premisa y habiendo probado en carne propia (la carne de mis dedos, se entiende) lo útil que puede resultar la programación en Excel, me anime y me puse a escribir este tutorial acerca de Visual Basic for Applications (VBA). No pienso definir Programación, Programa o Programador; no quiero entrar en el debate si VBA es un lenguaje de programación como tal, básicamente porque no soy Programador. Soy un simple mortal que aprendió a escribir en este lenguaje y cree que es útil para quienes manejan volumen de datos en Excel.
Entre las cosas que hay que tener claras es que el computador no piensa, solo hace. Si le damos una instrucción y no le decimos explícitamente que se detenga en algún punto, va a ejecutar el proceso hasta el fin de los tiempos, no es capaz de darse cuenta que se debe detener. Ni se le ocurre que debe detenerse, ni cuestiona la instrucción (es cosa de ver en la películas los botones de auto destrucción, se le dice Explota, y va y explota). Por lo tanto, al escribir el código es una excelente idea sentarse y pensar antes de echar manos a las teclas, sino van a tener que reescribir 10 veces la cosa que sea que estén escribiendo. Otra cosa es darse cuenta si vale la pena darse la pega de escribir el código, contra lo que se demorarían en hacerlo con alguna de las funciones de Excel. Me explico, escribir una Macro para que sume los valores de una columna es una estupidez, pero hacer una Macro que sume los valores de una columna que si se encuentra valores pares multiplique por 2 y si encuentra valores impares multiplique por 3, antes de realizar la suma, puede ser más razonable (si se que se puede hacer más rápido con funciones de Excel, pero es un ejemplo solamente).
Voy a tratar de avanzar a un paso más o menos lógico en este Tutorial, pero si alguien quiere que repita alguna instrucción puede irse a la m***** y releer el párrafo, que es más cómodo para ambos y nos ahorra tiempo. Ahora sí, sin más preámbulos, sin más dilación, no le doy más la lata, porque si están aquí es para aprender, vamos, directamente, ahora ya… al dichoso tutorial.
Macros
Las macros son instrucciones que uno le da al programa para que realice un proceso (Ademas de una excelente serie Japnesa… ah, no … esa era Macross, Sorry). No es más que eso. Una serie de pasos, ojala lógicos (por Diox que sean lógicos) que llevan a un resultado (el resultado podría ser otro paso). Supongamos que siempre vamos a realizar una misma tarea, como seleccionar la primera columna de un Libro, darle Negrita, poner la primera celda de color rojo, la segunda en azul, de la tercera a la quinta fucsia, y de la quinta a la novena naranja. Las letras todas en color morado, con fuente Comic Sans y tamaño 15,3. Aparte del shock ocular que los puede dejar ciegos y joderles de por vida la pantalla, se estarían agarrando un síndrome de túnel carpiano que se los encargo, por el uso indiscriminado de mouse, además de la pérdida de tiempo que acarrea esa serie de cambios, y que además es siempre lo mismo. Aunque si dependiera de mi los despediría por usar esa selección de colores en el informe anual de resultados. Acaso no ven que lo tenemos que presentar a la mesa directiva, o qué, creen que estamos trabajando en Play Doh. Seriedad señores.
En fin, como el proceso es siempre lo mismo lo mejor en este caso es automatizarlo: grabarlo en una macro, y llamarlo cuando sea necesario.
Programación Orientada a Objetos (POO, OOP)
No pienso definir lo que es la Programación Orientada a Objetos, véanlo en la Wikipedia, pero voy a definir algunos términos para que sepamos de que estamos hablando: Objeto, Propiedades y Métodos
Objeto.
Un Objeto, es básicamente lo que sea. Cualquier cosa. Mira justo frente a ti… si… dale, soy síquico, mira frente a ti. Eso es un Computador, un objeto (si estas mirando un papel, dame la dirección del que te lo pasó, porque no he autorizado la impresión de este tutorial). Cuando generalizamos un objeto, lo estamos Definiendo, esa generalización de objetos se llama Clase. Entonces en la Clase Computador estarían definidos en forma abstracta todos los computadores del mundo, mientras que un Objeto Computador seria un Computador en concreto (ni se te ocurra meter tu computador en un bloque de cemento, no es necesario. Si ya lo hiciste mete la cabeza también y líbranos de tu casta). Por ahora llegamos hasta ahí con las Clases, y nos vamos a los Objetos. Solo tener claro que todos los Objetos están definidos por una Clase.
Cuando hablamos de la Clase computadores, estamos diciendo que esta Clase debe ser capaz de definir a todos los Computadores del mundo, o sea la Clase Computadores define una cosa con Pantalla, Procesador, Memoria, Disco Duro, Teclado, Mouse. Y cualquier cosa que cumpla al menos con esos requisitos es un Objeto de la Clase Computador.
Propiedades
Cualquier Objeto tiene características (Propiedades), la marca, el color, olor, forma, peso, etc. Las Propiedades se definen en la Clase y se especifican en cada Objeto. La Clase Computador podemos definir las Propiedades: Color, Forma, Peso (no sé si olor, pero no me voy a meter en lo que cada uno hace con su computador… cerdos); y al definir un Objeto concreto las especificamos: Marca = DELL, Color = Rosa Chillón, Forma = NoteBook, Peso = 2 Kilos
Métodos
Los Objetos tienen comportamientos, hacen algo. Una acción de un Objeto Computador es abrir Excel (si, bajar películas, música y porno también). Los procesos que realizan las acciones o comportamientos de un Objeto se definen en la Clase para que las pueda aplicar cualquier objeto definido en ella. Entonces en la Clase Computadores se define el Método Abrir Excel todo lo necesario para hacerlo, entonces cada Objeto de la Clase Computadores debe invocar este Método para abrir Excel.
(Como decía la canción de Pin Pon, “Si quieres hacer algo bien necesitas Método, Método, Método, Método, Método… no se me cayó el carnet, lo perdí. ¡ESTAMOS!)
Vamos a resumir un poco estos conceptos desde el punto de vista que nos interesa, es decir, enmarcándolo en objetos de Excel. Objeto WorkSheet (hoja de cálculo), Objeto Range (Objeto casilla o rango de casillas), Objeto Cells (Celda).
Un Objeto Range está definido por una Clase donde se definen sus Propiedades (Sus características, modificables o no). Entre esas propiedades esta Value, que es donde se contiene el valor de la celda (o celdas, con “L”), Column y Row que contienen la Columna y la Fila de la Celda (o Rango, ahora sí con “R”), etc.
Range, como Objeto, también tiene Métodos (para llevar a cabo acciones). Método Actívate (para Activar), Método ClearContents (para borrar el contenido), Select (para seleccionar).
Conjuntos
Los Conjuntos son colecciones de Objetos del mismo tipo. Por ejemplo dentro de un libro de Excel pueden haber varias Hojas (WorkSheets), todas esas hojas forman un conjunto (conjunto WorkSheets). Cada elemento individual de un conjunto se referencia por un Índice. Entonces las tres primeras hojas de un libro serian: WorkSheets (1), WorkSheets (2), WorkSheets (3)… Vamos con en el Índice de un libro, Capitulo 1, Capitulo 2… Capitulo N… ya entendieron.
Objetos de Objetos.
En muchos casos las Propiedades de un Objeto puede ser otro Objeto. Sigamos con el ejemplo del Computador, una Propiedad es el Disco Duro y el Disco Duro es un Objeto con Propiedades como capacidad, tamaño, etc. y Métodos como escribir, leer, etc.
En Excel el Objeto WorkSheets tiene la Propiedad Range, y Range es también un Objeto. El Objeto Range tiene la Propiedad Font, y Font es también un Objeto. El Objeto Font tiene la Propiedad Bold, y Bold no es un Objeto. Ojo con esto: Una Propiedad de un Objeto puede devolver otro Objeto (la Propiedad Range del Objeto WorkSheets devuelve un Objeto del tipo Range)
Programación Orientada a Objetos o Programación Basada en Objetos
Solo una pequeña diferenciación acerca de estas dos definiciones.
En la Programación Orientada a Objetos, el programador implementa las Clases, crea los Objetos. Nosotros con VBA usaremos los Objetos que ya trae definido Excel, sin implementar nada nuevo, por lo que lo más correcto es hablar de Programación Basada en Objetos.
Después de esa “pequeña” introducción vamos a hacer un pequeño “Hola mundo pa’ que se queden con ganas y vuelvan por más.
Editor de Visual Basic
El editor de Visual Basic es el programa/herramienta que usaremos para crear nuestras dichosas Macros. Hay muchas formas de acceder a él, pero voy a indicar el comando con las teclas, ya que estoy usando Excel 2007 y los menús son diferentes a Excel 2003. Sin embargo este tutorial puede ser usado en cualquiera de esas dos versiones, al menos (No alcance a usar ninguna versión anterior a 2003 con Visual Basic, ni he usado Excel 2010).
1.- Abra un nuevo archivo de Excel (si tienen alguna de duda de cómo hacer eso, váyase a buscar un tutorial de Excel Básico y después vuelva)
2.- Abra el editor de Visual Basic. Presione Alt + F11 (Alt es la tecla que está al lado de la barra espaciadora, F11 es la tecla que está arriba de los números de su teclado, no la letra F y después 1, 1, por favor). Se van a encontrar con algo así:

3.- Vamos a agregar las cosas que vamos a necesitar:
- Código F7 Menú Ver /Código
- Explorador de Proyectos CTRL + R Menú Ver /Explorador de Proyectos
- Ventana Propiedades F4 Menú Ver /Ventana Propiedades
La forma más cómoda de trabajar es ubicando el Editor de Visual Basic en su monitor central, Excel en su monitor de la izquierda, y este tutorial en el monitor de la derecha. Si no tiene tantos monitores, vaya corriendo a comprarse los que le falten, para estar cómodo y si no puede, ya deje todo como esta y solo maximice la ventana del editor…
Si su Editor se ve distinto, relájese, deje de llorar, límpiese la nariz… eso… Ejecute igualmente los comandos de teclas si no sabe que es lo que tiene en pantalla, si algo desaparece de la pantalla en vez de aparecer solo presione el comando de nuevo y aparecerá. Si tiene algo más de lo que dice que debe tener, solo busque la ‘x’ para cerrar y quítelo para no meter la pata.
La idea es que el Editor de Visual Basic quede más o menos así:

No va a quedar exactamente así, ya que como se puede ver en la columna de la izquierda, ya tengo agregado un Libro de Macros Personal, en donde tengo algunas Macros de uso frecuente, para mí.
4.- Insertar un nuevo modulo: Los módulos, son el lugar en donde vamos a agrupar los procedimientos y funciones que vamos a ir creando. Puede tener un montón de Módulos en su libro de Excel (ni idea cuantos se puede tener. Yo he puesto hasta 7. Si quiere saber cuánto es el máximo vea aquí)
- Insertar Modulo: Menú Insertar/Modulo
5.- Insertar Procedimiento: El procedimiento son las instrucciones de código que van a hacer la tarea que estamos pidiendo. Para indicar que estamos escribiendo un procedimiento debemos empezar con la instrucción “SUB NOMBRE_PROCEDIMIENTO”, y terminar con “END SUB”
Ahora al fin vamos a escribir el mentado “Hola Mundo”
EJEMPLO 1
Escriba las Instrucciones tal como van a aparecer. Si quiere puede Seleccionar, Copiar y Pegar en el Editor, pero eso solo reafirmara mi impresión de que es un vago incompetente.
Sub Hola_Mundo ()
Range (“A1”).Value = “HOLA MUNDO”
End Sub
Teniendo el cursor (|) parpadenado en la zona de código (entre el nombre de la función y End Sub), presione F5. O dele al triangulito de lado en color verde que esta en la Barra de Herramientas 
Listo, así de fácil. Con esto nuestra macro va a escribir en la hoja activa, en la celda A1, “HOLA MUNDO”.
Hagamos un pequeño análisis línea a línea:
- Sub Hola_Mundo (): Esto es el “Titulo” o Nombre del procedimiento. No pueden haber espacios en el nombre comprendido entre “Sub” y “()”. No puede poner Espacios, puntos, comas, Slash (/), asteriscos, guiones medios, nada de eso. Letras, números y guiones bajos, se puede.
- Range (“A1”).Value = “HOLA MUNDO”: Con esto estamos indicando que vamos a usar el Objeto Range, ubicado en A1 (lo encerramos en paréntesis y comillas, hay otra forma diferente, pero lo vamos a tocas mas a adelante… la forma… degenerado). Además le estamos diciendo que queremos alterar su Propiedad Value, igualándolo a Hola Mundo. Dado que esto último es un valor constante (no lo vamos a cambiar) lo encerramos entre comillas (también la explicación a esto va a estar más adelante… la idea es que vuelva)
- End sub: Con esto indicamos el fin del procedimiento inmediatamente anterior, delimitado con Sub.
Otra forma de escribir lo mismo es: ActiveSheet.Range (“A1”).Value = “HOLA MUNDO”
Con esto estamos diciendo: En el Objeto Hoja Activa, Propiedad/Objeto Range. Propiedad/Objeto Range, Propiedad Value. Propiedad Value, igual a “Hola Mundo”. Lo mismo, pero más largo.
Otra mas, es: WorkSheets(1).Range (“A1”).Value = “HOLA MUNDO”
Esta ultima forma es CASI igual. Lo que hace esta forma es indicar que escribirá en la primera hoja del Libro (para ser mas preciso, en la primera hoja del índice). Pruebe lo siguiente: (… inserte el nombre de su marca aquí… [a ver si cae algún auspiciador]), luego escriba:
Sub Hola_Mundo ()
Worksheets (2).Range (“A1”).Value = “HOLA MUNDO”
End Sub
Al ejecutar esta macro, el valor se escribirá en la 2° hoja del índice (Hoja2, si no se ha puesto a manosear Excel sin la supervisión de este Tutorial), y en la celda A1 de esa hoja, “Hola Mundo”. Vea además que Visual Basic manipulo una Propiedad de un Objeto que no estaba en pantalla ni seleccionado.
Vamos a la última modificación a este ejemplo y terminamos por hoy:
Sub Hola_Mundo ()
ActiveCell. Value = “HOLA MUNDO”
End Sub
Con esto estamos haciendo referencia al Objeto ActiveCell (Celda Activa). A diferencia de los anteriores ejemplos no estamos apuntando a una celda desde el código, sino que el código va a afectar directamente a la celda activa (cualquiera), y a esa celda le va a modificar la Propiedad Value, dándole el Valor “HOLA MUNDO”, que es el que señalamos.
Intente cambiar algunas cosas, como el valor “HOLA MUNDO”, el Valor de Range (“A1”), y el índice en Worksheets(2).
Y con eso terminamos por hoy. Si le gusto vuelva y recomiende, para llenarme de visitas a ver si consigo algún auspiciador y puedo vivir de esto que me gusta: no hacer nada. Saludos