Una variable en VBA es un espacio en memoria donde guardas un valor temporal para usarlo dentro de tu código.
Declararlas correctamente evita errores difíciles de detectar y hace que tus macros corran más rápido. En esta lección aprenderás a declarar variables con Dim, elegir el tipo de dato correcto y aplicarlos en cálculos reales de nómina e IVA.
Cómo declarar una variable con Dim
La palabra clave Dim (abreviatura de Dimension) reserva espacio en memoria para tu variable. La sintaxis básica es:
Dim nombreVariable As TipoDeDato
Siempre escribe Dim al inicio de tu procedimiento, antes de cualquier cálculo. Esto se llama declaración explícita y es la mejor práctica en VBA.
Ejemplo mínimo:
Sub EjemploBasico()
Dim nombreEmpleado As String
Dim salarioMensual As Double
nombreEmpleado = "Ana Torres"
salarioMensual = 18500
MsgBox nombreEmpleado & " gana $" & Format(salarioMensual, "#,##0")
End Sub
El resultado en pantalla sería: Ana Torres gana $18,500.
Tipos de datos principales en VBA
Elegir el tipo correcto reduce el consumo de memoria y previene errores de cálculo. La siguiente tabla resume los más usados:
| Tipo | Uso típico | Rango / Notas |
|---|---|---|
Integer |
Números enteros pequeños | -32,768 a 32,767 |
Long |
Números enteros grandes | -2,147,483,648 a 2,147,483,647 |
Double |
Decimales (montos, porcentajes) | Alta precisión |
Currency |
Cantidades monetarias exactas | Hasta 4 decimales fijos |
String |
Texto | Longitud variable o fija |
Boolean |
Verdadero / Falso | True o False |
Date |
Fechas y horas | 1/ene/100 a 31/dic/9999 |
Variant |
Cualquier tipo | Más lento; evítalo cuando puedas |
Regla práctica: usa Currency o Double para pesos mexicanos. Usa Long para contadores de filas en hojas con miles de registros.
Ejemplo 1 — Cálculo de IVA para una venta en Liverpool
Supón que tienes el precio antes de IVA de un artículo vendido en Liverpool y necesitas calcular el total.
Sub CalcularIVA()
Dim precioBase As Currency
Dim tasaIVA As Double
Dim montoIVA As Currency
Dim precioTotal As Currency
precioBase = 1200
tasaIVA = 0.16
montoIVA = precioBase * tasaIVA
precioTotal = precioBase + montoIVA
MsgBox "Precio base: $" & Format(precioBase, "#,##0") & Chr(13) & _
"IVA (16 %): $" & Format(montoIVA, "#,##0") & Chr(13) & _
"Total: $" & Format(precioTotal, "#,##0")
End Sub
Salida simulada:
Precio base: $1,200
IVA (16 %): $192
Total: $1,392
Nota el uso de Format(valor, "#,##0"). Esa función formatea el número con separador de miles para que la salida se vea profesional.
Ejemplo 2 — Nómina semanal en Bimbo
Ahora calcula el pago semanal de un repartidor que trabaja por hora. Este ejemplo usa tres tipos de datos distintos.
Sub NominaSemanal()
Dim nombreRepartidor As String
Dim horasTrabajadas As Integer
Dim pagoXHora As Currency
Dim totalSemanal As Currency
Dim esSindicalizado As Boolean
Dim bonoBienestar As Currency
nombreRepartidor = "Carlos Medina"
horasTrabajadas = 48
pagoXHora = 75
esSindicalizado = True
bonoBienestar = 0
totalSemanal = horasTrabajadas * pagoXHora
If esSindicalizado Then
bonoBienestar = 350
totalSemanal = totalSemanal + bonoBienestar
End If
MsgBox "Empleado: " & nombreRepartidor & Chr(13) & _
"Horas: " & horasTrabajadas & Chr(13) & _
"Bono: $" & Format(bonoBienestar, "#,##0") & Chr(13) & _
"Total: $" & Format(totalSemanal, "#,##0")
End Sub
Salida simulada:
Empleado: Carlos Medina
Horas: 48
Bono: $350
Total: $3,950
El tipo Boolean controla la lógica sin necesitar números. Eso hace el código más legible y fácil de mantener.
Ejemplo 3 — Reporte de comisiones en FEMSA
Este ejemplo más completo combina variables de distintos tipos y escribe resultados directamente en celdas de Excel.
Sub ReporteComisiones()
Dim vendedor As String
Dim ventasMes As Currency
Dim tasaComision As Double
Dim comision As Currency
Dim fechaCorte As Date
Dim filaDestino As Long
vendedor = "Sofía Ramírez"
ventasMes = 95000
tasaComision = 0.035
comision = ventasMes * tasaComision
fechaCorte = #5/31/2025#
filaDestino = 2
With ThisWorkbook.Sheets("Comisiones")
.Cells(filaDestino, 1).Value = vendedor
.Cells(filaDestino, 2).Value = ventasMes
.Cells(filaDestino, 3).Value = comision
.Cells(filaDestino, 4).Value = fechaCorte
End With
MsgBox "Comisión de " & vendedor & ": $" & Format(comision, "#,##0")
End Sub
Salida simulada en el mensaje:
Comisión de Sofía Ramírez: $3,325
Fíjate en la sintaxis de fecha: en VBA las fechas literales van entre almohadillas (#), no entre comillas.
Alcance de las variables
El alcance define desde dónde puedes leer o modificar una variable.
- Local (procedimiento): declarada con
Dimdentro de unSub. Solo existe mientras eseSubestá activo. - Módulo: declarada con
DimoPrivateen la sección Declarations (arriba del primerSub). Todos los procedimientos del módulo la pueden leer. - Global (proyecto): declarada con
Publicen la sección Declarations de cualquier módulo. CualquierSuboFunctiondel libro la puede usar.
Usa el alcance más reducido posible. Esto evita que una variable sea modificada accidentalmente por otro procedimiento.
Constantes: valores que no cambian
Cuando un valor es fijo (como la tasa de IVA), usa Const en lugar de Dim.
Const TASA_IVA As Double = 0.16
Const SALARIO_MINIMO As Currency = 248.93
Las constantes se nombran en MAYÚSCULAS por convención. Si intentas cambiar su valor en tiempo de ejecución, VBA lanza un error de compilación. Eso es exactamente lo que quieres: proteger valores críticos.
Errores comunes
Error 1 — Usar Variant sin necesidad.
Si declaras Dim monto As Variant y después asignas un número, VBA no sabe de inmediato si es texto o número. Eso puede causar sumas inesperadas o errores de tipo en cálculos. Siempre declara el tipo explícito.
Error 2 — Mezclar Integer con valores de nómina grandes.
Un Integer solo llega hasta 32,767. Si el salario anual de un empleado es $180,000, VBA lanzará un error de desbordamiento (overflow). Usa Long o Currency para cualquier cantidad monetaria en pesos mexicanos.
Error 3 — Omitir Option Explicit.
Sin Option Explicit activo, puedes escribir saalrio en lugar de salario y VBA creará una segunda variable vacía en silencio. El resultado del cálculo será $0 y no verás ningún aviso de error. Como viste en la lección anterior, activa esta opción desde Herramientas → Opciones → Requerir declaración de variables.
Error 4 — Formatear números como cadena demasiado pronto.
Si conviertes un monto a String antes de terminar los cálculos, la suma aritmética fallará. Primero termina todos los cálculos numéricos; aplica Format() solo en el momento de mostrar o escribir el resultado.
Buenas prácticas para nombrar variables
Una convención clara hace que tu código sea legible para ti y para tus compañeros de equipo.
- Usa camelCase:
precioBase,totalNomina,fechaCorte. - Incluye el tipo como prefijo opcional:
strNombre,curSalario,blnActivo. - Evita nombres de una sola letra, salvo contadores de bucle (
i,j). - No uses espacios ni acentos en nombres de variables.
Resumen rápido de sintaxis
' Declaración simple
Dim nombreVariable As TipoDeDato
' Múltiples variables en una línea (cada una necesita su tipo)
Dim nombre As String, edad As Integer, salario As Currency
' Constante
Const TASA_ISR As Double = 0.30
' Variable de alcance global (en la sección Declarations del módulo)
Public contadorGlobal As Long
Declarar cada variable con su propio As TipoDeDato es obligatorio. Si escribes Dim a, b As Integer, solo b es Integer; a queda como Variant.