Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

¿Qúe son y como se usan las variables en VBA?

| 13 comentarios

Variables en VBA

Una variable se utiliza para guardar información temporal la cual será utilizada dentro de un procedimiento, módulo o libro. Antes de entrar en detalle de las variables, hay algunas reglas importantes que usted debe conocer.

1) El nombre de una variable debe comenzar con una letra y no un número. Los números pueden ser incluidos en el nombre, pero no como el primer carácter.
2) El nombre de una variable puede tener más de 250 caracteres.
3) El nombre de una variable no puede ser la misma que cualquiera de las palabras clave de Excel, esto quiere decir que no se puede nombrar una variable con nombres tales como hojas, etc.
4) Todas las variables deben consistir en una cadena continua de sólo caracteres. Puede separar las palabras, ya sea con mayúsculas en la primera letra de cada palabra, o mediante el uso de los caracteres de subrayado.

 Puede nombrar las variables con cualquier nombre válido, por ejemplo usted podría nombrar una variable "Benjamín" y declararla como Entero u otro tipo de dato, sin embargo, es una buena práctica el uso de convenciones de nomenclatura, de esta manera sabremos a simple vista que tipo de dato es nuestra variable.

Por ejemplo con sólo leer la variable bIsOpen nos da una idea de para qué sirve, en este caso la "b" se refiere a Boolean y el "IsOpen" me recuerda que estoy comprobando si algo está abierto.

Tipos de datos de las variables

Las variables pueden ser declaradas como cualquiera de los siguientes tipos de datos:

Byte
Un tipo de datos se utiliza para mantener números enteros positivos que van de 0 a 255. Las variables byte se almacenan como números de 8 bits (1 byte).

Boolean (lógico)
Un tipo de datos con sólo dos valores posibles, True (-1) o falso (0). Las variables booleanas se almacenan como números de 16 bits (2 bytes).

Integer (entero)
Un tipo de datos que contiene variables enteras almacenadas como números enteros, tiene un espacio de 2 bytes en el rango de -32.768 a 32.767. El tipo de datos Integer también se utiliza para representar valores enumerados. El signo de porcentaje (%) representa un Integer en Visual Basic.

Long (entero largo)
Tiene un espacio por variable de 4 bytes en la memoria que representa al doble de la capacidad de un entero y cuyo valor oscila entre -2.147.483.648 y 2.147.483.647. El signo de ampersand (&) representa un largo en Visual Basic.

Currency (moneda)
Hace referencia a un valor decimal de tipo dinero, su valor oscila entre -922.337.203.685.477,5808 a 922.337.203.685.477,5807, ocupando 8 bytes en la memoria. Utilice este tipo de datos para cálculos monetarios y en cálculos de punto fijo donde la precisión es particularmente importante. El signo de arroba (@) representa un currency en Visual Basic.

 Single (simple precisión)
Hace referencia a todos los valores numéricos enteros y decimales ocupando un espacio en la memoria de 4 bytes, y cuyo valor oscila entre -3.402823E+38 a -1,401298E-45 para valores negativos, y entre 1,401298E-45 hasta 3,402823E+38 para valores positivos. El signo de exclamación (!) representa un single en Visual Basic.

Double (doble precisión)

Hace referencia a los valores numéricos enteros largos, de simple precisión y decimales periódicos, ocupa 8 bytes en la memoria en el rango -1.79769313486232E+308 a -4,94065645841247E-324 para valores negativos; 4,94065645841247E-324 a 1.79769313486232E+308 para valores positivos. El signo de número (#) representa un dato doble en Visual Basic.

Date (Fecha)
Un tipo de datos utilizado para almacenar fechas y horas como un número real. Las variables de fecha se almacenan como números de 64 bits (8 bytes). El intervalo de valores va desde 0:00:00 (medianoche) del 01 de enero del año 100 a 11:59:59 p.m. del 31 de diciembre de 9999.

String (cadena)
Un tipo de datos que consiste en una secuencia de caracteres. Una cadena puede incluir letras, números, espacios y signos de puntuación. El tipo de datos String tiene una capacidad de  aproximadamente 2 billones de caracteres y ocupa un espacio de 10 bytes + espacio de la cadena.  El signo de dólar ($) representa una cadena en Visual Basic.

Object (objeto)
Un tipo de datos que representa una referencia de objeto. Las variables de objeto se almacenan ocupando un espacio de 4 bytes.

Variant (variante)
Es el único de todos los tipos de datos que permite almacenar cualquier tipo de valor, puede contener datos numéricos, de cadena o de fecha, así como los valores especiales Empty y Null. El tipo de datos Variant tiene un tamaño de almacenamiento numérico de 16 bytes y puede contener datos hasta el rango de un decimal, o un tamaño de almacenamiento de caracteres de 22 bytes (más longitud de la cadena), y puede almacenar cualquier texto o carácter. La función VarType define cómo se tratan los datos en un Variant. Todas las variables se convierten en tipos de datos Variant si no se declara explícitamente como otro tipo de datos.

 

Alcance de una variable

Se refiere hasta dónde puede llegar el ámbito de una variable.

DIM: Se utiliza a nivel de procedimiento y a nivel de formulario, cada vez que se utiliza el procedimiento VBA borra el contenido de la variable.

STATIC: Utilizado sólo a nivel de procedimiento, cuando una variable se declara conserva su valor entre llamadas.

PUBLIC: Tiene un ámbito a nivel de toda la aplicación.

PRIVATE: Su alcance es sólo a nivel del módulo donde se declaró.

 

Uso de la variables

Si bien en Excel es posible omitir el uso de variables, es mala práctica en programación no usarlas ya que su uso hará más eficiente el código que creemos;

Usemos un ejemplo para poner de relieve lo anterior:

En el siguiente ejemplo apreciamos una estructura sin el uso de variables, pues bien queremos convertir una longitud de metros a pies, siendo:

Imagen0001

Public Sub pies ()

Range ("b2").Value = Range ("b1").Value * 100 / 2.54 / 12

Range ("b2").Value = Round (Range ("b2"), 3)

End Sub

Este código se muestra a simple vista bastante tedioso e inadecuado

Ahora vamos a usar variables para el mismo ejemplo y veremos la diferencia…

Public Function fpies (longitud) As Double

 'Paso1: Declaración de las variables

Dim cm As Double, pulgadas As Double, pies As Double

 'Paso2:Aplicando las conversiones mediante la asignación de valores.

cm = longitud * 100

Pulgadas = cm / 2.54

Pies = pulgadas / 12

 'Paso3:Asignando la respuesta a la función fpies

fpies = Round (pies, 3)

End Function

 

Como paso 1 procedemos  a declarar las variables, en este caso hemos usado un DIM, cuyo ámbito es a nivel de procedimiento seguido del nombre de la variable, luego as (como) y finalmente el tipo, (doble) en este caso.

El valor por defecto para cualquier tipo de variable numérica es cero.
El valor por defecto para cualquier variable de tipo cadena es "" (texto vacío).
El valor predeterminado para un tipo de variable de objeto es Nothing.

Cabe precisar que si está utilizando una variable que no ha sido declarada Excel (por defecto) se almacenará como el tipo de datos Variant ya que es el valor predeterminado de una variable.

 

En el paso 2 se le asigna valores a cada variable, para ello utilizamos el signo "=", así pues a “cm” se le asignó el valor “longitud * 100”, a “Pulgadas” el valor de” cm / 2.54”, incluyendo la variable “cm” dentro del valor de la variable “Pulgadas”.

Utilizando variables se hace más sencillo realizar este ejercicio de conversión además de ser más entendible y ordenado.

 

Por Ultimo:

Cada vez que declaramos le damos un valor a una variable como por ejemplo

Dim IsMyName as Integer

cOuNtEr= aLfa*2

Y luego escribimos la misma variable pero por ejemplo todo con minúsculas Excel convertirá automáticamente ismyname a IsMyName o sea tal igual como se declaró, lo mismo pasaría con cOuNtEr y aLfa, por ello es recomendable escribir todo el código en minúsculas sin tener que preocuparnos por las mayúsculas o minúsculas.

13 comentarios

  1. No me queda claro lo siguiente: al final, ¿en qué celda aparece la información que necesitamos? o es que no estamos colocando ese dato cuando generamos la variable.

    • Al crear una función publica, la información que necesitas aparecera en la celda activa donde generes la función. En este caso el ejemplo lo hacen en la celda activa B2, pues está formulada =fpies(B1). Sin embargo tú podrías utilizar esta función en cualquier celda del libro.

  2. Otra duda: ¿por qué tenemos que pasar de cm a pugadas y de ahi a pies siendo que la pregunta es de metros a pies, (¿o es algo que el VBA no permite realizar directamente?).

    • Para efecto del ejemplo se utilizan diversas variables como cm, pulgadas, pies para demostrar la utilidad de una variable y la conversion de cm a pies paso a paso.
      Sin embargo tu podrias generar una funcion poniendo todo el factor de conversion de cm a pies como lo demuestran al inicio del ejemplo.
      La funcion sería:
      fpies = Round(longitud * 100 / 2.54 / 12, 3)

  3. Muy bueno

  4. Estos datos me serán de mucha utilidad. Muchas gracias! =)

  5. La formula para pasar de metros a pies, parte por pasar inicialmente de metros a centímetros, ya que el dato que se tiene (longitud) está en metros, luego de centímetros a pulgadas y finalmente, de pulgadas a pies. Se hace de esta manera detallada para explicar el proceso de conversión de medidas. Asimismo, el valor que se requiere de inicio es el de longitud, que inicialmente en la formula larga aparece en la celda B1, a partir de este valor se calcula todo, por tanto el valor final se puede colocar en una celda especifica (es decir en B1 saldría el valor de longitud y en B2 saldría el valor de fpies) o en todo caso en un MsgBox que indique el valor resultante de fpies.

  6. Las variables son espacios de memoria en el procesador de la computadora que sirven para almacenar información según como se definan sus propiedades. Por ejemplo una variable de tipo String permitirá almacenar texto.

    Dim IngreseNombre as String

    IngreseNombre = Inputbox("Por favor ingrese su nombre","Ingreso de datos")

  7. Creería entonces que un modo menos tedioso de programar sería utilizando siempre los variants en nuestra programación, se que muchos dirán que la elección de variables depende mucho del tipo de macro que deseas realizar, pero pienso que utilizando variant, nos ahorraríamos el trabajo de pensar si necesitamos variables tipo long, double, date o string.

  8. En el caso de los tipos de variables como single, double, string, entre otros, se menciona que se puede representar con un signo, podría mostrar un ejemplo de como se utilizan estos signos en VBA.

  9. HELP!
    En visual Basic para Excel 2013 necesito una variable de gran precisión decimal. Para una función de índole matemática. Calculará PI.
    Creo había un tipo Decimal, pero el único que se aproxima es Double y está lejos de lo que quiero.

  10. Muy buenos días alguien me puede ayudar, quiero saber si el VBA, se puede colocar en la celda el signo " / " sin que me haga una división. Solo quiero que aparezca en la celda.

  11. Hola Buen dia!
    Consulta
    Tengo que usar la formula buscarv, donde el indicador de columna puede varias, porque es la ultima columna de una tabla dinamica.

    Es por eso que necesito que esa ultima columna, que la tengo en una variable, la pueda pasar en la formular buscarv.
    Entonces si tengo
    Dim sh As Worksheet
    Dim UltCol1 As Long
    Set sh = ThisWorkbook.ActiveSheet

    UltCol1 = sh.Range("A1").CurrentRegion.Columns.Count
    '--> la variable UltCol1, es la ultima columna y es la que debo traer con el buscarv

    Como puedo hacer para pasar esa variable?
    Range("Q4").Select
    ActiveCell.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-16],tabla!C[-16]:C[5],(& UltCol1),0),0)"

    Si me pudieran ayudar seria genial
    Saludos

Deja una respuesta

Los campos requeridos estan marcados con *.