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
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
27/04/2013 a las 10:22 am
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.
27/04/2013 a las 10:47 am
Supongo que según vaya avanzando en mi curso de excell los memorizaré...
24/07/2013 a las 10:19 pm
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
28/05/2013 a las 1:23 am
Disculpe cuando se trata de imagenes cual seria el tipo de dato en visual basic
04/09/2013 a las 10:37 pm
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?
15/10/2015 a las 10:23 am
Ni lo uno ni lo otro, simplemente devuelve un error de tipo equivocado.
20/02/2017 a las 4:03 pm
declara X decimal
24/01/2014 a las 8:05 pm
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?
15/10/2015 a las 10:26 am
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...
24/04/2014 a las 8:19 pm
Parece sencillo pero será mejor cuando tenga la oportunidad de practicar con cada uno de ellos.
25/07/2014 a las 1:10 am
Buenos conceptos de cada tipo de datos interesante saber que datos usar y en que momento para no fallar
saludos cordiales
26/07/2014 a las 4:19 am
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
15/10/2015 a las 10:31 am
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.
28/07/2021 a las 2:44 pm
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.
02/08/2014 a las 3:11 pm
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
08/09/2014 a las 5:41 pm
Muy interesante, con esto puedo entender mejor algunos lenguajes usados en los ejemplos.
18/09/2014 a las 11:17 am
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?
19/09/2014 a las 6:24 pm
Es una buena forma de manejo y de poder clasificar los tipos de entrada de datos
18/11/2014 a las 6:51 pm
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?
23/11/2014 a las 11:05 pm
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.
15/10/2015 a las 10:33 am
Asi es, como en los bucles "for each" donde no sabes que tipo de dato viene en el array.
18/07/2015 a las 9:57 am
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"
13/01/2016 a las 2:27 pm
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
26/04/2016 a las 11:51 am
gracias por su ayuda me ayudo mucho
26/04/2016 a las 12:00 pm
gracias por compartir este enlace así puedo aprender un poquito mas ....
29/11/2016 a las 12:23 pm
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..
03/08/2018 a las 5:51 pm
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.
08/07/2019 a las 7:46 pm
El tipo decimal no existe, prueba con double
10/04/2020 a las 11:55 am
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
10/04/2020 a las 12:01 pm
Listo increiblemente la respuesta fue cambiar mi variable lo g por variant me funcuono asi lo siento porque critican mucho a variant