Café y Código

2. Variables y Tipos de Datos

En esta lección aprenderás a:

  • Declarar variables con Dim y entender por qué es buena práctica.
  • Elegir el tipo correcto: Integer, Long, Double, String, Boolean.
  • Activar Option Explicit para evitar errores silenciosos.
  • Leer y escribir valores de celdas usando variables.

¿Por qué usar variables?

Una variable guarda un dato en memoria con un nombre descriptivo. Dim la declara y le asigna un tipo:

declaraciones.bas
VBA
1 Dim precio As Double ' número decimal
2 Dim cantidad As Integer ' número entero pequeño
3 Dim cliente As String ' texto
4 Dim activo As Boolean ' verdadero / falso

Tipos de datos más usados

Vista tipo Excel: la primera fila muestra las letras de columna; la primera columna muestra los números de fila. En las celdas con fórmula (=...), cada referencia lleva un color distinto. Clic en la referencia: resalta solo esa celda. Clic en el resto de la celda (por ejemplo el = o los operadores): resalta todas las celdas citadas. Repetir el mismo gesto sobre lo ya resaltado lo oculta.

Tipos de datos en VBAResumen

Evita Variant salvo que sea necesario: consume más memoria y puede ocultar errores de tipo.

ABC
1 TipoRango / DescripciónCuándo usarlo
2Integer−32 768 a 32 767Contadores pequeños, índices de bucles
3Long−2 mil millones a 2 mil millonesNúmeros de fila grandes, cantidades sin decimal
4DoubleDecimal de doble precisiónPrecios, porcentajes, cálculos financieros
5StringTexto de cualquier longitudNombres, categorías, mensajes
6BooleanTrue o FalseBanderas, resultados de condiciones
7DateFechas y horasTrabajar con Now(), cálculos de días
8VariantCualquier tipo (menos eficiente)Solo cuando el tipo es desconocido

Option Explicit

Escribe Option Explicit en la primera línea del módulo para que VBA exija declarar cada variable antes de usarla:

CalcularDescuento.bas
VBA
1 Option Explicit
2
3 Sub CalcularDescuento()
4 Dim precio As Double
5 Dim descuento As Double
6 Dim total As Double
7
8 precio = Range("B2").Value
9 descuento = 0.15 ' 15%
10 total = precio * (1 - descuento)
11
12 MsgBox "Total con descuento: " & total
13 End Sub

Leer y escribir valores de celdas

TransferirDato.bas
VBA
1 Sub TransferirDato()
2 Dim origen As String
3 Dim valor As Double
4
5 origen = Range("A1").Value ' lee el texto de A1
6 valor = Range("B1").Value ' lee el número de B1
7
8 Range("C1").Value = origen & " — " & valor
9 End Sub

Practica en Excel

Abre Excel (o copia los datos con el botón de la tabla), sigue los pasos y comprueba el resultado en tu hoja.

  1. Abre el editor VBA (Alt + F11) y escribe Option Explicit al inicio del módulo.
  2. Declara variables de tipo Double, String y Boolean y asígnales valores con Debug.Print.
  3. Escribe la Sub CalcularDescuento() con un precio en B2 y ejecútala.
  4. Intenta usar una variable sin declararla con Option Explicit activo y observa el error.
  5. Crea la Sub TransferirDato() y verifica que C1 combina los valores de A1 y B1.

Ejercicios de práctica

Ejercicio 1 — Tipos básicos

Declara una variable de cada tipo (Integer, Double, String, Boolean), asígnales un valor y muéstralos todos con Debug.Print.

Ver solución sugerida
TiposBasicos.bas
VBA
1 Sub TiposBasicos()
2 Dim edad As Integer
3 Dim precio As Double
4 Dim nombre As String
5 Dim activo As Boolean
6
7 edad = 30
8 precio = 99.99
9 nombre = "Laptop"
10 activo = True
11
12 Debug.Print "Edad: " & edad
13 Debug.Print "Precio: " & precio
14 Debug.Print "Nombre: " & nombre
15 Debug.Print "Activo: " & activo
16 End Sub

Ejercicio 2 — Área de un rectángulo

Declara variables Double para base y altura. Asígnales valores 12 y 7.5. Calcula el área y muéstrala con MsgBox.

Ver solución sugerida
AreaRectangulo.bas
VBA
1 Sub AreaRectangulo()
2 Dim base As Double
3 Dim altura As Double
4 Dim area As Double
5
6 base = 12
7 altura = 7.5
8 area = base * altura
9
10 MsgBox "Área: " & area & " cm²"
11 End Sub

Ejercicio 3 — Nombre completo

Declara variables String para nombre y apellido. Asígnales tus datos. Concatena ambas en una tercera variable y muéstrala.

Ver solución sugerida
NombreCompleto.bas
VBA
1 Sub NombreCompleto()
2 Dim nombre As String
3 Dim apellido As String
4 Dim completo As String
5
6 nombre = "María"
7 apellido = "López"
8 completo = nombre & " " & apellido
9
10 MsgBox "Nombre completo: " & completo
11 End Sub

Ejercicio 4 — Leer precio de celda y calcular IVA

Escribe un precio en B2. Crea una Sub que lea ese valor, calcule el IVA (19%) y escriba el total con IVA en C2.

Ver solución sugerida
PrecioConIVA.bas
VBA
1 Sub PrecioConIVA()
2 Dim precio As Double
3 Dim total As Double
4
5 precio = Range("B2").Value
6 total = precio * 1.19
7
8 Range("C2").Value = total
9 End Sub

Ejercicio 5 — Variable Boolean como bandera

Declara una variable Boolean llamada esMayor. Asígnale True. Muestra con MsgBox: si es True, "Acceso permitido"; si es False, "Acceso denegado".

Ver solución sugerida
ControlAcceso.bas
VBA
1 Sub ControlAcceso()
2 Dim esMayor As Boolean
3 esMayor = True
4
5 If esMayor Then
6 MsgBox "Acceso permitido"
7 Else
8 MsgBox "Acceso denegado"
9 End If
10 End Sub

Ejercicio 6 — Constante de tasa ⭐⭐

Declara una constante con Const TASA_IVA As Double = 0.19. Úsala para calcular el precio con IVA de tres artículos de distintos precios y muestra cada resultado con Debug.Print.

Ver solución sugerida
ConstanteTasa.bas
VBA
1 Sub ConstanteTasa()
2 Const TASA_IVA As Double = 0.19
3
4 Debug.Print "Laptop: " & 800 * (1 + TASA_IVA)
5 Debug.Print "Teclado: " & 45 * (1 + TASA_IVA)
6 Debug.Print "Monitor: " & 350 * (1 + TASA_IVA)
7 End Sub

Ejercicio 7 — Conversión de tipos ⭐⭐

Escribe el número 42 en A1. Léelo con una variable String usando CStr(). Luego escribe el texto "100" en B1, léelo con CInt() y multiplícalo por 3. Muestra ambos resultados.

Ver solución sugerida
Conversiones.bas
VBA
1 Sub Conversiones()
2 Range("A1").Value = 42
3 Range("B1").Value = "100"
4
5 Dim comoTexto As String
6 Dim comoNumero As Integer
7
8 comoTexto = CStr(Range("A1").Value)
9 comoNumero = CInt(Range("B1").Value)
10
11 Debug.Print "A1 como texto: " & comoTexto & " (longitud " & Len(comoTexto) & ")"
12 Debug.Print "B1 x 3: " & comoNumero * 3
13 End Sub

Ejercicio 8 — Cuál es mayor ⭐⭐

Escribe dos números en A1 y B1. Declara dos variables, léelas y muestra con MsgBox cuál de las dos es mayor (o si son iguales).

Ver solución sugerida
CualEsMayor.bas
VBA
1 Sub CualEsMayor()
2 Dim a As Double
3 Dim b As Double
4
5 a = Range("A1").Value
6 b = Range("B1").Value
7
8 If a > b Then
9 MsgBox "A1 es mayor: " & a
10 ElseIf b > a Then
11 MsgBox "B1 es mayor: " & b
12 Else
13 MsgBox "Son iguales: " & a
14 End If
15 End Sub

Ejercicio 9 — Suma de tres celdas ⭐⭐

Escribe números en A1, B1 y C1. Crea una Sub que los lea en tres variables Double, los sume en una cuarta variable y escriba el resultado en D1.

Ver solución sugerida
SumaTresCeldas.bas
VBA
1 Sub SumaTresCeldas()
2 Dim v1 As Double
3 Dim v2 As Double
4 Dim v3 As Double
5 Dim total As Double
6
7 v1 = Range("A1").Value
8 v2 = Range("B1").Value
9 v3 = Range("C1").Value
10 total = v1 + v2 + v3
11
12 Range("D1").Value = total
13 End Sub

Ejercicio 10 — Variable Long para número de fila ⭐⭐

Declara una variable Long y asígnale el valor 1048576 (la cantidad máxima de filas de Excel). Muéstrala con Debug.Print. Intenta lo mismo con Integer y observa el error.

Ejercicio 11 — Calculadora con variables ⭐⭐⭐

Escribe en A1 un precio unitario y en B1 una cantidad. Crea una Sub que calcule: subtotal, descuento del 10% si la cantidad es ≥ 5 (usa If simple por ahora), y total. Escribe los tres resultados en C1, D1 y E1 respectivamente.

Ver solución sugerida
CalculadoraVentas.bas
VBA
1 Sub CalculadoraVentas()
2 Dim precioUnit As Double
3 Dim cantidad As Integer
4 Dim subtotal As Double
5 Dim descuento As Double
6 Dim total As Double
7
8 precioUnit = Range("A1").Value
9 cantidad = CInt(Range("B1").Value)
10 subtotal = precioUnit * cantidad
11
12 If cantidad >= 5 Then
13 descuento = subtotal * 0.1
14 Else
15 descuento = 0
16 End If
17
18 total = subtotal - descuento
19
20 Range("C1").Value = subtotal
21 Range("D1").Value = descuento
22 Range("E1").Value = total
23 End Sub

Ejercicio 12 — Variable Date ⭐⭐⭐

Declara una variable Date, asígnale la fecha de hoy con Now() y calcula en otra variable cuántos días faltan para el 31 de diciembre del año actual. Muestra el resultado.

Ver solución sugerida
DiasRestantes.bas
VBA
1 Sub DiasRestantes()
2 Dim hoy As Date
3 Dim finDeAno As Date
4 Dim diasRestantes As Long
5
6 hoy = Now()
7 finDeAno = DateSerial(Year(Now()), 12, 31)
8 diasRestantes = DateDiff("d", hoy, finDeAno)
9
10 MsgBox "Faltan " & diasRestantes & " días para fin de año."
11 End Sub

Ejercicio 13 — Detectar tipo de variable ⭐⭐⭐

Escribe valores distintos en A1 (número), A2 (texto), A3 (fecha). Crea una Sub que lea cada celda y use IsNumeric(), IsDate() para detectar el tipo y mostrarlo con Debug.Print.

Ver solución sugerida
DetectarTipo.bas
VBA
1 Sub DetectarTipo()
2 Dim val As Variant
3
4 val = Range("A1").Value
5 If IsNumeric(val) Then Debug.Print "A1 es numérico: " & val
6
7 val = Range("A2").Value
8 If Not IsNumeric(val) And Not IsDate(val) Then _
9 Debug.Print "A2 es texto: " & val
10
11 val = Range("A3").Value
12 If IsDate(val) Then Debug.Print "A3 es fecha: " & val
13 End Sub

Ejercicio 14 — Intercambiar dos variables ⭐⭐⭐

Escribe valores en A1 y B1. Crea una Sub que intercambie los valores de esas dos celdas usando una variable temporal temp. Después de ejecutarla, A1 debe tener el valor original de B1 y viceversa.

Ver solución sugerida
IntercambiarValores.bas
VBA
1 Sub IntercambiarValores()
2 Dim temp As Variant
3 temp = Range("A1").Value
4 Range("A1").Value = Range("B1").Value
5 Range("B1").Value = temp
6 MsgBox "¡Valores intercambiados!"
7 End Sub

Ejercicio 15 — Reporte de variables ⭐⭐⭐

Crea una Sub que llene las celdas A1:B5 con un mini reporte: en la columna A los nombres de 5 variables ("Precio", "Cantidad", "Subtotal", "Descuento", "Total") y en la columna B sus valores calculados usando variables intermedias.

Ver solución sugerida
MiniReporte.bas
VBA
1 Sub MiniReporte()
2 Dim precio As Double
3 Dim cantidad As Integer
4 Dim subtotal As Double
5 Dim descuento As Double
6 Dim total As Double
7
8 precio = 50
9 cantidad = 8
10 subtotal = precio * cantidad
11 descuento = subtotal * 0.05
12 total = subtotal - descuento
13
14 Range("A1").Value = "Precio": Range("B1").Value = precio
15 Range("A2").Value = "Cantidad": Range("B2").Value = cantidad
16 Range("A3").Value = "Subtotal": Range("B3").Value = subtotal
17 Range("A4").Value = "Descuento": Range("B4").Value = descuento
18 Range("A5").Value = "Total": Range("B5").Value = total
19 End Sub

Pon a prueba tus conocimientos

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.