Excel Avanzado

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

Excel Avanzado
Logo Excel Avanzado

Tipos de Datos en VBA

| 32 comentarios

Todos los valores que requieren ser manipulados en un programa pueden ser almacenados temporalmente en una variable, las variables son las que deben pertenecer a un tipo de dato, donde el tipo de dato determina el rango de valores o conjunto de valores que dicha variable podría emplear.

Existen 12 tipos de datos diferentes con los que se puede trabajar. Por ejemplo al declarar una variable en VBA basta añadir una línea de código para definir la naturaleza de los valores que almacenaremos en ella.

Dim Numero As Integer 

Numero = 5

También es posible asignarle a la variable el valor directamente y sin especificar el tipo de dato, sin embargo existen dos inconvenientes en trabajar de esta forma. Cuando no declaramos el tipo de dato los valores se pasan en formato Variant, que es un tipo flexible pero a que a la vez consume mucha memoria. Otro problema de pasar datos como Variant es que se deja abierta la posibilidad de que ocurran errores más adelante en el programa.

 

¿Cuáles son los tipos de datos en VBA?

En el siguiente cuadro encontramos el resumen de los diversos tipos de datos en VBA

Tipos de datos

 

Boolean: El Boolean tiene sólo dos estados, Verdadero y Falso. Estas variables se utilizan generalmente como flags o condicionales.

Byte: El Byte corresponde a una variable de 8 bits que puede almacenar valores de 0 a 255. Es muy útil para el almacenamiento de datos binarios.

Double: El Double es un número de 64-bit de coma flotante que se utiliza cuando se necesita una gran precisión. Estas variables pueden variar desde-1.79769313486232E308 a -4,94065645841247E-324 para valores negativos y de 4,94065645841247E-324 a 1.79769313486232E308 para valores positivos.

Integer: El Integer o entero es un número de 16 bits que puede oscilar entre -32768 y 32767. Los enteros se deben utilizar cuando se trabaja con valores que no pueden contener números fraccionarios.

Long: El Long es un número de 32 bits que puede variar entre -2.147.483.648 y 2.147.483.647. Las variables Long sólo puede contener valores enteros.

Decimal: El Decimal es un subtipo de dato Variant, puede almacenar valores en un rango que va desde -79.228.162.514.264.337.593.543.950.335 hasta 79.228.162.514.264.337.593.543.950.335 si el valor no contiene cifras decimales. Tiene una precisión de hasta 28 decimales con valores desde -7,9228162514264337593543950335 hasta 7,9228162514264337593543950335.

Single: El Single es un número de 32 bits que va desde-3.402823E38 a -1,401298 E-45 para valores negativos y desde 1,401298E-45 a 3.402823E38 para valores positivos. Cuando se necesitan números fraccionarios dentro de este rango, este es el tipo de apropiado para su uso.

String: El String se utiliza generalmente como un tipo de longitud para una cadena de texto. Una cadena de longitud variable puede contener un máximo de aproximadamente 2 mil millones de caracteres. Cada carácter tiene un valor que va desde 0 hasta 255 basado en el juego de caracteres ASCII.

Currency: El tipo de datos Moneda es en realidad un tipo entero internamente. En su uso, se escala por un factor de 10.000 para agregar cuatro dígitos a la derecha del punto decimal. Permite hasta 15 dígitos a la izquierda del punto decimal, resultando en un rango de aproximadamente -922.337.000.000.000 a +922.337.000.000.000.

Date: El Date almacena un valor numérico con formato especial que representa tanto la fecha como la hora. El Date acepta la fecha o la hora, o ambas cosas. Los valores posibles van desde 1 de enero del año 100 a 31 de diciembre del año 9999.

Object: El Object puede señalar a cualquier tipo de dato, incluso cualquier instancia de objeto que la aplicación reconozca. Se utiliza Object cuando en el tiempo de compilación no se conoce a qué tipo de datos puede señalar la variable. Independientemente del tipo de datos al que haga referencia, una variable Object no contiene el valor en sí, sino un puntero al valor. Debido al código que el puntero utiliza para buscar los datos, las variables Object son de acceso un poco más lento que las variables que tienen un tipo explícito.

Variant: Los Variant almacenan valores numéricos y no numéricos. Son los más flexible de todos los tipos disponibles, ya que almacena valores muy grandes de casi cualquier tipo (coincide con el tipo de datos numérico doble). Se usa sólo cuando no se está seguro del tipo o cuando se están acomodando datos externos y no se está seguro de las especificaciones del tipo de datos.

 

Elaborado por: Sandro Calzada

32 comentarios

  1. Hola,
    Buena sintesis de los comandos para definir las variables a tomar al hacer una macro. De esta manera, se evitaran problemas de clasificacion e introduccion de datos.
    Slds.
    Jorge P.

  2. Supongo que según vaya avanzando en mi curso de excell los memorizaré...

    • En realidad mientras más los uses te darás cuenta que aparecerán en tu cabeza..aunque no lo creas, ayuda mucho tenerlos anotados en un post it en tu dormitorio u oficina.
      Saludos

  3. Disculpe cuando se trata de imagenes cual seria el tipo de dato en visual basic

  4. Declaro x como Integer (entero)
    y doy para x = 3.5
    que debe resultar que trunca la parte decimal (elimina parte decimal) o lo redondea?

    • Ni lo uno ni lo otro, simplemente devuelve un error de tipo equivocado.

    • declara X decimal

  5. Parece mas sencillo entonces declarar un dato como Variant. Evitando con ello, tener que especificar el tipo de dato que vaya a ser utilizado. Es factible entonces tener bastantes variables como Variant?

    • Hay un problema con eso, y es que le cedes el control a Visual Basic para definir el tipo de variable, te puedes encontrar con casos en los que variant no te va a colocar el tipo de variable correcto. Además que variant es un tipo de variable muy pesada ya que contiene los tipos de todas las demás variables, por ende no es muy eficiente usarla demasiado, es como tener un gavetero con gavetas demasiado grandes para las cosas que le vas a meter...

  6. Parece sencillo pero será mejor cuando tenga la oportunidad de practicar con cada uno de ellos.

  7. Buenos conceptos de cada tipo de datos interesante saber que datos usar y en que momento para no fallar

    saludos cordiales

  8. Es interesante el manejo del variant... pero lo veo muy peligroso... debido a que educo al programador a que el programa decida como manipular los datos sin concentimiento... recordemos que toda programación tiene siempre su definición de datos como también su inicialización... por tanto veo innecesario el uso de variant, pareciera que enseñásemos a programar al azar y de eso no se trata una MACRO

    • Hay casos en los que si debes usar variant aunque no quieras, como en los bucles "for each" ya que la variable que maneje el elemento dentro del bucle no sabes de que tipo será, por eso se usa variant. Pero si tienes conocimiento pleno de que variable se debe usar es mucho mejor emplear el tipo correcto, no solo para evitar sorpresas, sino para ahorrar memoria. Por ejemplo, en un bucle pequeño que dará tres vueltas, no voy a usar variant, seria demasiado grande, mejor uso byte, asi ahorro espacio.

    • Aparte de lo mencionado por @Juan, los tipo "Variant" son útiles si quieres usarlos como argumentos en Funciones o Subrutinas propias. Para saber el tipo de Valor que que han pasado, sólo utiliza TypeName(Variable) en un "Select Case" o un "If".

      Saludos.

  9. Una buena forma de clasificar el tipo de entrada de datos, de tal manera que se pueda diferenciar los datos en una funcion o procedimiento

  10. Muy interesante, con esto puedo entender mejor algunos lenguajes usados en los ejemplos.

  11. En mi opinión, utilizar los tipo Variant ayuda bastante dado que así use un exceso de memoria, el excel lo ejecutará rápido. Repito la pregunta de un compañero cuando se trabaja con imágenes, que tipo de dato es? y con matrices?

  12. Es una buena forma de manejo y de poder clasificar los tipos de entrada de datos

  13. El tipo variant se usa entonces cuando no tienes claro los tipos de dato que se va a usar y se esta dejando al vba la decision de asignarle un tipo de datos

    ¿no es asi?

    • El tipo Variant es el tipo que el VBA asume por defecto cuando no le decimos que tipo emplear, de esa forma tal como menciona le estamos dejando al VBA que manipule el dato.

    • Asi es, como en los bucles "for each" donde no sabes que tipo de dato viene en el array.

  14. Los tipos de datos son similares a los usados en otro lenguaje de programación; sin embargo, como todo, existen diferencias. Por ejemplo, aquí no se encuentra el tipo "char"

  15. una pregunta gracias

    estoy equivocado, cuando programo en visual foxpro
    puedo hacer esto fecha=ctod(" / / ")

    como hago para iniciar un dato date en excel

    function fecha(celda1,celda2,celda3) as date
    fecha = 0 --- fecha = " " ' quiero inicializar asi o como
    si hago unas operaciones y esta, no cumplen su condicion, por algun motivo
    variable fecha, dato date estara vacio
    en la celda que deseo mostrar, me mostrara la celda blanco

  16. gracias por su ayuda me ayudo mucho

  17. gracias por compartir este enlace así puedo aprender un poquito mas ....

  18. Hola tengo un problema y espero me puedan ayudar u orientar. Tengo excel 2007 pero aún no tengo la función max.si.conjunto y deseo encontrar el máximo valor dentro de un rango bajo los criterios mayor a cierta fecha y menor a cierta fecha. Traté de crear la función en un nuevo módulo pero no encuentro el código para crearla. Podrían ayudarme con esto? o si hubiese otra manera de obtener el resultado se los agradecería. Probé también con estas fórmulas y nada: SI(Y('Spreads Peru'!$A$3:$A$3554>=Hoja6!$A$14,'Spreads Peru'!$A$3:$A$3554=Hoja6!$A$14,'Spreads Peru'!$A$3:$A$3554<=Hoja6!$B$14),'Spreads Peru'!$AC$3:$AC$3554))

    ambas las probé con fórmulas matriciales y tampoco. No reconoce el rango del criterio y obtiene el máximo de tódo el rango..

  19. tengo el siguiente código:

    Sub multiplica()
    Dim Signo As String
    Dim Valor1, Valor2 As Integer
    Dim Total As Decimal
    Valor1 = ActiveSheet.Range("A1").Value
    Valor2 = ActiveSheet.Range("A2").Value
    Signo = ActiveSheet.Range("A3").Value
    Select Case Signo
    Case "+"
    Total = Valor1 + Valor2
    Case "-"
    Total = Valor1 - Valor2
    Case "x"
    Total = Valor1 * Valor2
    Case ":"
    Total = Valor1 / Valor2
    Case Else
    Total = 0
    End Select
    ActiveSheet.Range("A4").Value = Total
    End Sub

    Al ejecutarlo me sale un error que dice:

    Error de compilación:
    Erro de sintaxis

    el error se da en la línea

    Dim Total As Decimal

    si el resultado de la operación me dá un número grande cómo hago para que la variable soporte el resultado, el tipo decimal no me está funcionando.

    Gracias.

    • El tipo decimal no existe, prueba con double

  20. Maestro tengo un problema porque vba me dedondea el valor de una celda ej 2,7 y me da 3 asu la suma se me altera
    Que puedo hacer?
    Mil gracias

    • Listo increiblemente la respuesta fue cambiar mi variable lo g por variant me funcuono asi lo siento porque critican mucho a variant

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.