🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Tipos de datos en VBA en Excel — String, Long, Double, Variant (y la caja adecuada para cada valor)

|

Tipos de datos en VBA en Excel — String, Long, Double, Variant (y la caja adecuada para cada valor)

TL;DR — Un tipo de dato es la forma y el tamaño de la caja de una variable. Elige una demasiado pequeña y el valor se desborda; echa mano de la caja perezosa para todo (Variant) y lo pagas en velocidad y errores ocultos. Dos reglas cubren el 90 % del código real: usa Long para todo número entero (Integer se desborda en 32.767, y una hoja tiene 1.048.576 filas) y usa Double para las matemáticas, y Currency o el redondeo para el dinero (Double no puede guardar 0.1 + 0.2 de forma exacta). Todo lo demás —String, Boolean, Date— lo eliges para que encaje con el valor, y reservas Variant para los pocos casos que de verdad lo necesitan.

Dim rowCount As Long      ' números enteros — SIEMPRE Long, nunca Integer
Dim price    As Double    ' medidas y matemáticas
Dim total    As Currency  ' dinero — exacto a 4 decimales
Dim name     As String    ' texto
Dim isPaid   As Boolean   ' True / False
Dim dueDate  As Date      ' una fecha/hora

Elegir un tipo parece una formalidad, pero en realidad es una decisión sobre a qué modos de fallo te expones. El tipo equivocado no siempre da error: a veces se limita a devolver, en silencio, el número equivocado. Esta guía está organizada en torno a las trampas, porque es lo que de verdad decide qué caja usar.

Lo que aprenderás

  • Por qué Integer es una trampa y Long debería ser tu opción por defecto para los números enteros
  • Qué es Variant en realidad, y los pocos casos en que es la elección correcta
  • Por qué Double corrompe el dinero y qué usar en su lugar
  • Cómo leer los dos errores de tipo: Desbordamiento (6) y No coinciden los tipos (13)
  • Una regla de una línea para elegir tipo cuando dudes

El modelo mental: el tipo es la forma de la caja

Si una variable es una caja, el tipo es su forma y su capacidad. Long es una caja hecha para números enteros de hasta unos dos mil millones. String se estira para dar cabida al texto. Boolean es una caja con sitio para exactamente dos estados. Double guarda números fraccionarios, pero en una aproximación binaria. Variant es una caja mutable que se amolda a lo que sea que le eches dentro.

Todo tipo es un intercambio. Un tipo ajustado y específico caza los errores pronto y corre rápido; un tipo laxo (Variant) acepta cualquier cosa y aplaza el error a más tarde, a algún sitio más difícil de encontrar. Así que «¿qué tipo?» es la misma pregunta que «¿qué estoy dispuesto a que salga mal?».

La regla que evita el Desbordamiento: usa Long, nunca Integer

VBA tiene dos tipos de número entero, y uno de ellos es una reliquia. Integer es de 16 bits: su techo es 32.767. Long es de 32 bits: pasa de los dos mil millones. En cuanto se le pide a un Integer que sostenga 32.768, VBA lanza «Desbordamiento» (error 6) y se detiene.

La víctima clásica es un contador de filas:

' FRÁGIL — se desborda en cuanto la hoja tiene > 32,767 filas
Dim r As Integer
For r = 1 To lastRow          ' error 6 en la fila 32,768
    ' ...
Next r

' CORRECTO — Long maneja las 1,048,576 filas
Dim r As Long
For r = 1 To lastRow
    ' ...
Next r

Una hoja moderna tiene 1.048.576 filas: treinta y dos veces por encima del límite de Integer. Cualquier variable que cuente filas, guarde un número .Row o acumule una suma grande tiene que ser Long. Y aquí viene lo mejor: en el hardware de hoy Integer no aporta ninguna ventaja de velocidad; VBA lo convierte de todos modos a un valor de 32 bits por dentro. Así que la regla no tiene inconveniente: usa Long para todo número entero y olvida que Integer existe.

La regla sobre Variant: es una elección deliberada, nunca un valor por defecto

Cualquier variable que declares sin tipo —Dim x— es un Variant, igual que toda variable sin declarar. Un Variant guarda cualquier cosa: un número ahora, texto después, un array, un objeto. Suena cómodo, y por eso los principiantes se apoyan en él. También por eso se les esconden los errores.

Los costes son reales. Un Variant gasta más memoria, corre más despacio y —lo más importante— no caza los errores de tipo. Un número que llega como texto sigue siendo texto dentro de un Variant y falla en silencio en un cálculo posterior, allí donde un Long habría dado error de inmediato, en el punto mismo del error.

Pero Variant tiene un uso genuinamente estupendo, y vale la pena conocerlo porque es rápido: leer un Range entero en memoria de una sola vez.

' El ÚNICO gran uso de Variant: cargar un rango en un array 2-D de una sola vez
Dim data As Variant
data = ThisWorkbook.Worksheets("Data").Range("A1:C1000").Value

Dim i As Long
For i = 1 To UBound(data, 1)
    data(i, 2) = data(i, 2) * 1.1     ' trabaja en memoria — sin idas y venidas celda a celda
Next i

Range("A1:C1000").Value = data        ' vuélvelo a escribir de una sola vez

Ese patrón es muchísimo más rápido que tocar las celdas de una en una, y exige un Variant porque Excel te entrega un array Variant. Usa Variant aquí, y para valores que de verdad sean mixtos. En todo lo demás, declara el tipo real.

La regla sobre el dinero: Double miente en el último céntimo

Double es coma flotante binaria, así que no puede representar todos los decimales de forma exacta: el resultado famoso es que 0.1 + 0.2 no es exactamente 0.3. Para un gráfico o un cálculo de física eso es invisible. Para el dinero, esos errores minúsculos se acumulan y tus totales se desvían un céntimo, que es justo la clase de cosa que un auditor detecta.

Dim a As Double
a = 0.1 + 0.2
Debug.Print (a = 0.3)         ' -> False   (a vale 0.30000000000000004)

Dim m As Currency
m = 0.1 + 0.2
Debug.Print (m = 0.3)         ' -> True    (Currency es exacto a 4 decimales)

Usa Currency para el dinero: es un tipo de coma fija, exacto a cuatro decimales y hecho precisamente para esto. Si tienes que usar Double (pongamos que necesitas más de cuatro decimales), redondea a conciencia con Round() o Format() antes de comparar o guardar. Nunca compruebes la igualdad exacta de dos valores Double; compara dentro de una tolerancia en su lugar.

Un recorrido rápido por los tipos de cada día

  • String — texto. De longitud variable por defecto; rara vez necesitas longitud fija.
  • BooleanTrue / False. Perfecto para banderas (isPaid, found).
  • Date — una fecha o una hora, o ambas. Por dentro es un número (el mismo número de serie que usa Excel), y por eso puedes hacer aritmética de fechas.
  • Long — tu número entero por defecto, como se ha visto.
  • Double — tu número fraccionario por defecto para matemáticas y medidas.
  • Currency — dinero.
  • Variant — solo uso deliberado.

Una trampa más que encaja aquí: Dim i, j As Long deja como Long solo a j; i es un Variant. Cada variable necesita su propio As Type. Esa mecánica de la declaración está cubierta al completo en VBA Dim.

Cómo ayuda ExcelMaster

Los errores de tipo —un desbordamiento en una hoja grande, un Double que se desvía un céntimo, un Variant que enmascara un error de texto frente a número— son de los de combustión lenta: la macro se ejecuta y la respuesta equivocada aparece más adelante. Acertar con los tipos es auténtica disciplina de ingeniería, y es disciplina que tienes que repetir en cada macro.

ExcelMaster toma la tarea en lenguaje natural —«suma la columna D como moneda, cuenta las filas, marca todo lo que pase del presupuesto»— y se encarga de las decisiones de tipo por ti: Long para los recuentos, aritmética exacta para el dinero, sin desbordamientos silenciosos en una hoja de un millón de filas. Tú sigues escribiendo macros tipadas donde necesites control fino; para el trabajo de cada día, describes el resultado y te saltas la clase de errores que los tipos están ahí para evitar.

Preguntas frecuentes

¿Cuál es la diferencia entre Integer y Long en VBA?

Integer es un número entero de 16 bits limitado a 32.767; Long es de 32 bits y pasa de los dos mil millones. Como una hoja tiene 1.048.576 filas e Integer no ofrece ninguna ventaja de velocidad en el Excel moderno, deberías usar Long para todo número entero y evitar Integer por completo. Superar el límite de Integer provoca «Desbordamiento» (error 6).

¿Debería usar Variant en VBA?

Solo de forma deliberada. Variant guarda cualquier valor, pero gasta más memoria, corre más despacio y esconde errores de tipo (un número guardado como texto no dará error hasta más tarde). Su único uso excelente es leer un Range entero en un array 2-D (data = Range("A1:C1000").Value), que es muy rápido. En todo lo demás, declara el tipo específico.

¿Qué tipo de dato debo usar para el dinero en VBA?

Usa Currency. Es un tipo de coma fija exacto a cuatro decimales, así que evita la deriva de redondeo de Double (que no puede guardar 0.1 + 0.2 de forma exacta). Si usas Double para el dinero, redondea explícitamente con Round() antes de comparar o guardar, y nunca compruebes la igualdad exacta de dos valores Double.

¿Cuál es el tipo de dato por defecto en VBA?

Variant. Cualquier variable declarada sin As Type —o usada sin declararse siquiera— es un Variant. Es cómodo pero propenso a errores, y por eso la disciplina recomendada es Option Explicit más tipos explícitos.

¿Por qué me sale «No coinciden los tipos» (error 13)?

Asignaste un valor que no encaja en el tipo de la variable; por ejemplo, meter el texto "abc" en un Long, o una celda con un valor de error en un Double. Comprueba qué hay de verdad en la celda o la variable (el texto con aspecto numérico es un culpable habitual) y conviértelo explícitamente con CLng, CDbl o CStr antes de asignar.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 31/07/2026.

Guías relacionadas: VBA Dim · VBA Const · VBA CStr · VBA Array · VBA For Loop