Variables, constantes y tipos de datos en VBA

Por poco que hayas trabajado con VBA seguro que te has encontrado con variables. Si sabes de antemano que vas a necesitar cierta información, guárdala en una variable para evitar obtenerla de nuevo.
variables, constantes vba

Si estás comenzando a trabajar con VBA, dos de los conceptos que más llaman la atención son los de ‘variable’ y ‘constante’. ¿Sabes de qué se tratan?

Una variable no es más que una pequeña ubicación en la memoria de tu ordenador donde puedes almacenar datos de muchos tipos.

Por ejemplo, puedes guardar números enteros (tipo Integer) o textos (tipo String). Te mostraré todos los tipos más adelante.

Las constantes también almacenan datos pero lo hacen de forma permanente (a diferencia de las variables, cuyo valor asignado puede cambiar a lo largo de la ejecución de la macro).

Como habrás adivinado el tutorial de hoy está dedicado a las variables y a las constantes, elementos fundamentales de todos los lenguajes de programación.

¿Para qué sirven las variables?

Se puede decir que las variables son palabras con las cuales se hace referencia a una determinada información dentro del proyecto VBA. Su razón de ser es porque en muchas ocasiones se necesita información con la que previamente ya se ha trabajado y hay que acceder de nuevo a ella.

Otra ventaja de trabajar con variables es que puedes cambiar el valor asignado dentro del código y continuar usándola con ese nuevo valor. Te pongo un ejemplo. El siguiente código suma los diez primeros números positivos y luego muestra el resultado en un cuadro de mensaje:

Sub Suma10()
    Dim i As Integer
    Dim k As Integer
    For i = 1 To 10
        k = k + i
    Next i
    MsgBox k
End Sub

En el código anterior hay dos variables:  i y k.

Una vez declaradas las variables se utiliza un bucle For-Next en el que se modifica su valor cuando se completa una vuelta.

La utilidad de una variable se encuentra en el hecho de que puedes modificarla mientras el código está en funcionamiento.

Debes tener en cuenta algunas reglas al crear un nombre para una variable:

  1. Puedes utilizar letras, números y algunos símbolos pero el primer carácter debe ser una letra.
  2. No puedes utilizar espacios ni puntos. Puedes usar el carácter de subrayado a modo de espacio para que las variables sean más legibles (por ejemplo en 'Venta_anual').
  3. No puedes utilizar caracteres especiales como #, $, %, &o ¡!.
  4. VBA no distingue entre mayúsculas y minúsculas, por tanto ‘Tipo_interes’ es igual que ‘Tipo_Interes’. Es una buena práctica usar mayúsculas y minúsculas en las variables para hacerlas más legibles e identificar más fácilmente errores al escribirlas.
  5. No puedes usar palabras reservadas (las instrucciones propias del lenguaje). Por ejemplo, no puedes nombrar una variable como ‘Next’, pues forma parte del bucle For-Next.
  6. No puedes usar más de255 caracteres (aunque estoy seguro de que nunca se te ocurriría... ???? )

Tipos de variables

Aunque VBA permite trabajar sin necesidad de informar sobre el tipo de datos, se considera una buena práctica especificar el tipo de datos de la variable (la palabra As del código anterior).

El tipo de datos que asignes a la variable determinará el tipo (y longitud) de datos que quieras que contenga.

En la siguiente tabla te muestro todos los tipos de datos que usa VBA:

Tipo de dato Bytes Rango de valdores
Byte 1 byte 0 a 255
Boolean 2 bytes Verdadero o falso
Integer 2 bytes –32,768 a 32,767
Long 4 bytes –2,147,483,648 a 2,147,483,647
Single (Decimal simple) 4 bytes Números reales de 32 bits y 7 decimales. –3.402823E38 a –1.401298E-45 (para valores negativos); 1.401298E-45 a 3.402823E38 (valores positivos)
Double (decimal doble) 8 bytes Números de 64 bits y 16 decimales. –1.79769313486232E308 a –4.94065645841247E-324 (valores negativos); 4.94065645841247E-324 a 1.79769313486232E308 (para valores positivos)
Currency 8 bytes 15 dígitos a la izquierda del punto decimal y 4 a la derecha. –922,337,203,685,477.5808 to 922337203685477
Date 8 bytes 1 de enero de 0100 a 31 de diciembre de 9999
Object 4 bytes Cualquier referencia a un objeto
String (longitud variable) 10 bytes + 1 byte por cada carácter 0 a aproximadamente 2 billones de caracteres
String (longitud fija) Tamaño de la cadena 1 a 65.535 caracteres
Variant (con números) 16 bytes Cualquier valor numérico hasta el rango de un tipo de datos doble. También puede contener valores especiales, como Empty, Error, Nothing y Null.
Variant (con caracteres) 22 bytes + 1 byte por cada carácter 0 a aproximadamente 2 billones de caracteres
Definida por el usuario Varios Varía según el elemento

Cuando especificas el tipo de datos de una variable, VBA sabrá exactamente cuánto espacio reservar en la memoria para ella.

Por ejemplo, si quieres almacenar el número del mes del año, puedes usar el tipo de datos Byte (cuyos límites son 0 a 255). Como el número del mes no va a ser superior a 12, este tipo de dato funcionará bien y VBA desperdiciará menos memoria para almacenarla. Si necesitas almacenar números de filas en la variable necesitarás usar un tipo de dato que pueda contener hasta el número 1.048.756 (el número de filas de una hoja). Por tanto es mejor usar el tipo de datos Long.

Cómo declarar una variable

Como he comentado antes, no es necesario declarar explícitamente las variables antes de usarlas en los procedimientos pero recomiendo que lo hagas. Esto asegurará que VBA asignará solo la memoria adecuada a la variable y en consecuencia hará que el código se ejecute más rápido. El siguiente código es un ejemplo de declaración explícita de variables:

Sub Declaracion()
    Dim X As Integer
    Dim Email As String
    Dim Nombre As String
    Dim Num_Filas As Long
    Dim FechaHoy As Date
End Sub

Para declarar una variable se usa la instrucción Dim (abreviatura de Dimension). En la línea Dim X As Integer he declarado la variable X como número entero. Desde ahora, cuando la utilice en mi código solo podré almacenar en ella números enteros.

error 13 vba excel

ATENCIÓN: Como he comentado puedes optar por no declarar el tipo de datos. En este caso VBA considera que la variable es de tipo Variant. Una variable Variant puede contener cualquier tipo de datos. Aunque esto pueda parecer bueno, no es conveniente porque tiene a ocupar más memoria y puede hacer que el código se ejecute más lentamente.

Algo muy habitual entre muchos programadores es ‘la no declaración de variables’, es decir, comenzar a usar la variable sin declarar previamente. Sin duda es una práctica que desaconsejo totalmente.

Declarar las variables es bueno por dos razones: hace el código más eficiente y ayuda a encontrar errores causados por nombres mal escritos. VBA tiene una forma de obligarte a declarar todas las variables que uses en el código. Solo tienes que añadir la siguiente línea al principio del módulo.

Option Explicit

Al hacerlo estarás obligado a declarar todas las variables antes de ejecutar el código. Si hay alguna variable sin declarar se mostrará un error.

variables vba excel

Al hacer clic en Aceptar se marcará la variable sin declarar. ¿Ves como es una buena idea? En el siguiente procedimiento se muestra un ejemplo de cómo Option Explicit te puede ayudar a identificar rápidamente algunos errores frecuentes con variables (que sin esta instrucción tardarías más tiempo en encontrar).

Sub CalculoComisiones()
    Dim TipoComision As Double
    If Range("A1").Value > 10000 Then
        TipoComision = 0.1
    Else
        TipoCimision = 0.05
    End If
    MsgBox "Total comisión: " & Range("A1").Value * TipoComision
End Sub

¿Cuánto tiempo has tardado en encontrar el error?

Al ejecutar el código anterior (sin Option Explicit), obtendrías una comisión errónea (en caso de que el valor de A1 sea menor de 10.000). No verás mensajes de error de ningún tipo.

Para no olvidarte de incluir la instrucción Option Explicit en todos los módulos de tus proyectos sigue estos pasos:

  1. En el editor de VBA haz clic en el menú Herramientas y a continuación en Opciones.
  2. En el cuadro Opciones activa la casilla Requerir declaración de variables en la ficha Editor.
  3. Cierra el cuadro haciendo clic en Aceptar.
instruccion option explicit vba excel

Una vez habilitada la casilla, cada vez que crees un nuevo módulo, VBA agregará la línea Option Explicit.

Ámbito de las variables

El alcance o ámbito de una variable determina en qué parte del código se puede usar. Puedes elegir tres ámbitos diferentes:

  • A nivel de procedimiento.
  • A nivel de módulo.
  • A nivel de proyecto.

A nivel de procedimiento

Al declarar una variable a nivel de procedimiento, solo estará disponible dentro de ese procedimiento. No podrás usarla en otros procedimientos del módulo.

Cuando el procedimiento finaliza, la variable se borra y se libera la memoria que se usó para ella. Para declarar una variable a nivel de procedimiento debes hacerlo entre las líneas Sub y End Sub del procedimiento en el que la usarás.

declaración variables procedimiento vba

A nivel de módulo

Cuando quieras que una variable esté disponible para todos los procedimientos de un módulo debes declararla al principio del módulo, fuera de cualquier procedimiento:

declaracion variables módulo vba

Una vez que declaras la variable en la parte superior del módulo, puedes utilizarla en todos los procedimientos de ese módulo.

En el siguiente ejemplo te muestro dos códigos. Cuando ejecuto el primer procedimiento, y más tarde ejecuto el segundo, el valor de i se convierte en 30 (ya que la variable arrastra el valor 10 del procedimiento anterior)

Option Explicit

    Dim i As Integer
    
Sub Procedimiento1()
    i = 10
End Sub
Sub Procedimiento2()
    i = i + 20
    MsgBox i
End Sub

A nivel de proyecto

Si quieres usar una variable en todos los procedimientos del libro (da igual el módulo), debes declararla fuera de cualquier procedimiento y con la palabra Public (en lugar de Dim) de esta forma:

declaración variables proyecto vba

Las variables estáticas

Cuando trabajas con variables locales (las de nivel procedimiento) tan pronto como finaliza el procedimiento donde se declaran, estas pierden el valor y se borran.

En caso de que quieras que la variable conserve su valor, necesitas utilizar la palabra clave Static.

Te muestro un ejemplo. Te pido que ejecutes el siguiente código varias veces:

Sub Procedimiento1()
    Dim i As Integer
    i = i + 10
    MsgBox i
End Sub

Como podrás comprobar, cada vez que lo ejecutas, se muestra el mismo valor en el cuadro de mensaje (10).

Ahora bien, si utilizas la palabra Static en lugar de Dim, y ejecutas varias veces el procedimiento, los valores que aparecen en el cuadro de mensaje aumentan en 10 con cada ejecución. Esto ocurre porque la variable i conserva su valor y lo utiliza en el nuevo cálculo.

Sub Procedimiento1()
    Static i As Integer
    i = 10
    MsgBox i
End Sub

Cómo declarar una constante

Hemos comprobado cómo las variables pueden cambiar de valor durante la ejecución del código. En otros casos necesitarás tener valores fijos. En ese caso puedes usar constantes.

Una constante te permite asignar un valor a un nombre que puedes utilizar en tus códigos.

La ventaja de usar constantes en los procedimientos es que facilita la escritura, legibilidad y manejo del código y también te permite controlar todos los valores fijos desde un solo lugar.

Por ejemplo, si estás haciendo cálculos con la velocidad de la luz y sabes que dicha velocidad es de 299.792.458 metros por segundo, puedes crear una constante (Velocidad_luz) y asignarle este valor.

Aunque la velocidad de la luz en el vacío se mantiene invariable, si queremos cambiar este valor en todas las partes del código, solo tienes que hacer el cambio en un lugar, en vez de cambiarlo manualmente cada vez que aparezca en el procedimiento.

Te muestro un ejemplo de cálculo con una constante:

Sub calculoLuz()
    Dim kms As Double
    Const Velocidad_luz As Long = 299792458
    
    kms = Velocidad_luz / 1000
    MsgBox "La velocidad de la luz en Km/h es de " & kms

End Sub

La siguiente línea declara la constante:

Const Velocidad_luz As Long = 299792458

Cuando se declara una constante es necesario comenzar con la palabra Const seguida del nombre de la constante.

Observa que en el ejemplo anterior he especificado el nombre de la constante como Double. Al igual que en las variables es una buena práctica especificar el tipo de datos para que el código sea más eficiente.

Si no declaras el tipo de dato se considerará de tipo Variant.

Las constantes también cuentan con un ámbito o alcance, que depende de dónde y cómo se declaran.

  • A nivel de procedimiento.
  • A nivel de módulo
  • A nivel de proyecto (para todos los módulos).

En la sección "Ámbito de las variables" te detallo los ámbitos.

Resumen

... y hasta aquí la teoría. Ahora te toca ponerlo en práctica. Para hacerlo te recomiendo crear dos o tres procedimientos que modifiquen el valor de una variable (con sumas o restas sencillas). A continuación declara la variable en diferentes ubicaciones y ejecuta los procedimientos para ver cómo se comporta el valor final.

Cómo llegar a fin de mes con menos estrés gracias a Excel

Antes del día 15 puedes tener todos los objetivos mensuales completados. Y los que no, dejarlos programados para que se cumplan sin requerir de tu tiempo.

He preparado 7 de mis mejores trucos explicándote cómo lo hago. Deja tu correo abajo y te enviaré el primero de ellos.

Los comentarios están cerrados.

Sergio

Sergio

Experto formador en Excel y Power BI con más de dos décadas de experiencia. Capacito a profesionales para optimizar su trabajo y ser más eficientes. Con un enfoque práctico y cercano, mi objetivo es ayudarte a dominar estas herramientas esenciales. Descubre mis formaciones.MVP de Microsoft 5 años consecutivos.

Cómo llegar a fin de mes con menos estrés gracias a Excel

Antes del día 15 puedes tener todos los objetivos mensuales completados. Y los que no, dejarlos programados para que se cumplan sin requerir de tu tiempo.

He preparado 7 de mis mejores trucos explicándote cómo lo hago. Deja tu correo abajo y te enviaré el primero de ellos.

Buscar

Últimos posts

¿De qué hablo aquí?

Cómo llegar a fin de mes con menos estrés gracias a Excel

Antes del día 15 puedes tener todos los objetivos mensuales completados. Y los que no, dejarlos programados para que se cumplan sin requerir de tu tiempo.

He preparado 7 de mis mejores trucos explicándote cómo lo hago. Deja tu correo abajo y te enviaré el primero de ellos.