Macro en Visual Basic para calcular la producción diaria

Sin duda Excel es una herramienta muy potente y flexible, y su verdadero poder se esconde en su integración con Visual Basic. ¿Por qué deberíamos tomarnos el tiempo de aprender a programar en este lenguaje? Sencillamente, porque nos abre infinitas posibilidades, nos permite realizar macros prolijas y silenciosas y nos da control absoluto sobre todo nuestro trabajo.

Hoy les mostraremos cómo comenzar a construir un documento que nos permita ingresar los gastos y ganancias de un día determinado en un pequeño y cómodo formulario y que estos datos actualicen la fila correspondiente en una tabla general. Intentaremos tocar las bases, para no agobiarlos con muchos conceptos, y más adelante iremos completando este proyecto.

En principio, hemos diseñado dos tablas muy simples, que vemos a continuación:

Luego, para comenzar a codificar la macro, vamos a tomar un camino poco ortodoxo pero accesible:

  • en la pestaña Vista (de Excel 2007 en adelante), vamos a Macros y Grabar Macro...;
  • escogemos un nombre (en este ejemplo usaremos “Almacenar”) y un atajo y cliqueamos Aceptar;
  • seguidamente, volvemos a Macros y seleccionamos Detener Grabación;
  • finalmente, en el mismo menú, seleccionamos Ver Macros, y vamos a Modificar.

En pocas palabras, hemos creado una macro vacía y le hemos asignado un nombre y una combinación de teclas para su ejecución. En este momento, se nos presentará la ventana de Visual Basic, y nos mostrará lo siguiente:

El texto en verde representa los denominados comentarios, que no son más que texto que podemos utilizar para hacer anotaciones que de ninguna manera afectarán el código.

En Visual Basic, para obtener el valor de una determinada celda, existen varias formas; para este tutorial, utilizaremos la siguiente estructura: “nombre de la hoja”.Range(“nombre de la celda”). Si quisiéramos, por ejemplo, asignar el valor 40 a la celda A1 de la Hoja1, deberíamos escribir

Hoja1.Range(“A1”) = 40

De esta manera, tan flexible y directa, podemos tomar valores de diferentes tablas y páginas y realizar operaciones entre ellos. En este caso, esperamos que el usuario se dirija al formulario, ingrese la fecha sobre la que desea trabajar, y complete los campos Venta y Servicio. Luego, al teclear el atajo de la Macro, estos valores deberán ser sumados en la tabla general, en la fila correspondiente a la fecha indicada. Si no existiera un registro para ese día, deberá ser agregado automáticamente.

Para encontrar la fecha ingresada, deberemos recorrer todas las celdas de la hoja 2 que se encuentren debajo de la etiqueta Fecha, y comparar los valores hasta que coincidan. Como no dejaremos espacios en blanco entre las filas, le indicaremos a la función que si encuentra una celda vacía, asuma que no hay más días registrados y que inserte el actual en esa posición. El código para esta primera parte es el siguiente:

Dim fila As Integer

Dim encontrado As Boolean

 

fila = 2

encontrado = False

 

Do Until encontrado = True

 

If Hoja2.Range("A" & fila) = Hoja1.Range("B1") Then

encontrado = True

ElseIf Hoja2.Range("A" & fila) = "" Then

Exit Do

Else

fila = fila + 1

End If

Loop

Lo que hemos hecho aquí es crear una variable llamada fila, donde almacenaremos temporalmente la fila que estamos revisando, y otra llamada encontrado, que nos servirá para saber si, luego de la búsqueda, hemos hallado o no la fecha correspondiente. El bloque Do Until.. Loop, encierra las líneas que se ejecutarán una y otra vez, hasta dar con la celda adecuada:

Si la fecha ingresada por el usuario coincide con la de la fila que estoy analizando,

le asigno el valor True a la variable encontrado.

De no ser así, si me encuentro con una celda vacía,

entonces salgo del bucle, acabo la búsqueda.

Si nada de lo anterior se cumple

incremento el valor de fila en 1, para continuar buscando.

Nótese que en la función Range, para formar el nombre de la celda, usamos el texto de la columna y lo concatenamos con el número de la fila valiéndonos del operador &. Una vez que se complete este proceso, tendremos la información necesaria para proceder y lo haremos de la siguiente manera:

If encontrado = False Then

Hoja2.Range("A" & fila) = Hoja1.Range("B1")

End If

Hoja2.Range("B" & fila) = Hoja2.Range("B" & fila) + Hoja1.Range("B2")

Hoja2.Range("C" & fila) = Hoja2.Range("C" & fila) + Hoja1.Range("B3")

Hoja1.Range("B2") = ""

Hoja1.Range("B3") = ""

En otras palabras, si el valor de encontrado es False, entonces insertaremos la fecha en la última fila que se haya revisado, ya que ésta debería estar vacía. Hayamos hecho esto o no, pasamos a las últimas cuatro líneas del código, en las que, primero sumamos el valor de Venta y Servicio a los subtotales que teníamos en la Hoja2, y finalmente limpiamos las celdas del formulario para continuar con el ingreso.

Hemos adjuntado el archivo de ejemplo, para que puedan estudiarlo con paciencia y experimentar. En futuros artículos, ahondaremos más en las infinitas posibilidades que nos brinda Visual Basic.

Descargar archivo

Contenido relacionado:
Compartirlo
Gerencie.com en su correo.

Suscríbase y nosotros colocaremos en su bandeja de entrada la mejor información que generamos diariamente.


Déjenos su opinión

En Gerencie.com está permitido opinar, criticar, discutir, controvertir, disentir, etc., pero debe hacerlo con respeto, sin insultar y sin ofender a otros.

Información legal aplicable para Colombia.