Declaración de matrices

Las matrices se declaran del mismo modo que otras variables, con las instrucciones Dim, Static, Private o Public. La diferencia entre las variables escalares (las que no son matrices) y las variables de matriz es que, normalmente, debe especificar el tamaño de la matriz. Una matriz con tamaño especificado es una matriz de tamaño fijo. Una matriz cuyo tamaño puede cambiarse durante la ejecución de un programa es una matriz dinámica.

Si una matriz se indexa desde 0 o 1 depende del valor de la instrucción Option Base. Si no se especifica Option Base 1, todos los índices de matriz empezarán en cero.

Declarar una matriz fija

En la línea de código siguiente se declara una matriz de tamaño fijo como matriz Integer con 11 filas y 11 columnas:

Dim MyArray(10, 10) As Integer 

El primer argumento representa las filas y el segundo argumento representa las columnas.

Al igual que con el resto de declaración de variables, a menos que especifique un tipo de datos para la matriz, el tipo de datos de los elementos de la matriz declarada será el tipo Variant. Cada elemento Variant numérico de la matriz usa 16 bytes. Cada elemento Variant de la cadena usa 22 bytes. Para escribir código de la manera más compacta posible, declare sus matrices para que sean de un tipo de datos distinto de Variant.

Las líneas de código siguientes comparan el tamaño de varias matrices.

' Integer array uses 22 bytes (11 elements * 2 bytes). 
ReDim MyIntegerArray(10) As Integer 
 
' Double-precision array uses 88 bytes (11 elements * 8 bytes). 
ReDim MyDoubleArray(10) As Double 
 
' Variant array uses at least 176 bytes (11 elements * 16 bytes). 
ReDim MyVariantArray(10) 
 
' Integer array uses 100 * 100 * 2 bytes (20,000 bytes). 
ReDim MyIntegerArray (99, 99) As Integer 
 
' Double-precision array uses 100 * 100 * 8 bytes (80,000 bytes). 
ReDim MyDoubleArray (99, 99) As Double 
 
' Variant array uses at least 160,000 bytes (100 * 100 * 16 bytes). 
ReDim MyVariantArray(99, 99) 

El tamaño máximo de una matriz varía, en función de su sistema operativo y de la memoria disponible. Si usa una matriz que supera la cantidad de memoria RAM disponible en su sistema notará que el rendimiento se ralentiza, ya que se debe usar el disco tanto para la lectura y la escritura de los datos.

Declarar una matriz dinámica

Al declarar una matriz dinámica, puede establecer el tamaño de la matriz mientras el código se está ejecutando. Para declarar una matriz, use una instrucción Static, Dim, Private o Public, tal como se muestra en el siguiente ejemplo.

Dim sngArray() As Single 

Nota:

Puede usar la instrucción ReDim para declarar una matriz implícitamente en un procedimiento. Asegúrese de escribir correctamente el nombre de la matriz cuando use la instrucción ReDim. Se creará una segunda matriz aunque la instrucción Option Explicit esté incluida en el módulo.

En un procedimiento que pertenezca al ámbito de la matriz, use la instrucción ReDim para cambiar el número de dimensiones, para definir el número de elementos y para definir los límites superiores e inferiores de cada dimensión. Puede usar la instrucción ReDim para cambiar la matriz dinámica con la frecuencia que sea necesaria. Sin embargo, cada vez que lo haga se perderán los valores existentes de la matriz. Use ReDim Preserve para expandir una matriz conservando los valores existentes de la matriz.

Por ejemplo, la instrucción siguiente amplía la matriz en 10 elementos sin perder los valores actuales de los elementos originales.

ReDim Preserve varArray(UBound(varArray) + 10) 

Nota:

[!NOTA] Cuando use la palabra clavePreserve con una matriz dinámica, solo podrá cambiar el límite superior de la última dimensión, pero no podrá cambiar el número de dimensiones.

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.