HOWTO · VBA

Declarar e inicializar array de cadenas en VBA

Este tutorial demuestra cómo declarar e inicializar un array de cadenas en VBA.

En esta página

En VBA, usa un array dinámico String() cuando su tamaño se determine durante la ejecución del programa, o especifica los límites si ya conoces el número de elementos. Puedes rellenar un array dinámico con Split() o guardar el resultado de Array() en un Variant; en este último caso, el Variant contiene un array, pero no es un array tipado de cadenas. Los ejemplos siguientes muestran cómo inicializar cada forma, elegir los límites y trabajar con dos dimensiones.

Declarar e inicializar un array dinámico de cadenas

Un Variant puede contener el array que devuelve Array(). Sus elementos son Variants, por lo que esta opción resulta útil si quieres la comodidad de una lista literal y no necesitas una declaración String(). Una llamada sin calificar a Array() usa la configuración Option Base del módulo para determinar el límite inferior. Con el valor predeterminado Option Base 0, el cuarto elemento está en el índice 3:

Dim animals As Variant
animals = Array("Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra")
Debug.Print animals(3) imprime Monkey.

Para crear un array dinámico tipado de cadenas, declara la variable con paréntesis vacíos y asígnale el resultado de Split(). Split() separa una cadena delimitada y devuelve un array de cadenas con índices desde cero, independientemente de la configuración Option Base del módulo. Esta opción es útil cuando los valores proceden de una única entrada delimitada:

Dim animals() As String
animals = Split("Lion,Tiger,Cheetah,Monkey,Elephant,Zebra", ",")
Debug.Print animals(2) imprime Cheetah.

Usa ReDim cuando necesites asignar memoria o cambiar el tamaño de un array dinámico antes de asignar sus elementos uno por uno. La declaración Dim animals() As String declara la variable del array tipado; ReDim animals(0 To 5) asigna espacio para seis elementos de cadena, con índices del 0 al 5.

Declarar e inicializar un array de cadenas de tamaño fijo

Si conoces el número de elementos, declara directamente los límites inferior y superior. Dim animals(0 To 5) As String crea seis elementos porque incluye ambos extremos. Asigna cada valor mediante su índice y luego consulta el elemento que quieras:

animals(0) = "Lion"
animals(1) = "Tiger"
animals(2) = "Cheetah"
animals(3) = "Monkey"
animals(4) = "Elephant"
animals(5) = "Zebra"
Debug.Print animals(4) imprime Elephant.

Los límites explícitos dejan claros los índices válidos y evitan depender de un valor predeterminado del módulo. En un procedimiento, coloca juntas la declaración y las asignaciones; por ejemplo, dentro de Sub StaticArrayDemo() y antes de End Sub.

Elegir los límites del array y usar Option Base

Option Base establece el límite inferior predeterminado de los arrays declarados en ese módulo sin un límite inferior explícito. Coloca Option Base 1 en la sección de declaraciones del módulo, antes de los procedimientos. En ese módulo, Dim animals(6) As String tendrá índices del 1 al 6. Esta directiva no modifica los arrays cuyos límites se especifican explícitamente, así que Dim animals(0 To 5) As String seguirá usando los índices del 0 al 5.

Para que el código sea más claro al adaptarlo, suele convenir especificar los límites. Una llamada sin calificar a Array() sigue la configuración Option Base del módulo: su límite inferior es 0 con Option Base 0 y 1 con Option Base 1. En cambio, Split() siempre devuelve un array con índices desde cero, independientemente de Option Base. Usa VBA.Array() si necesitas que el límite inferior del resultado de Array() no dependa de la configuración del módulo; esa llamada calificada usa el límite inferior 0. Ten presentes estas diferencias al combinar arrays o elegir índices.

Declarar y rellenar un array multidimensional de cadenas

Declara un límite inferior y uno superior para cada dimensión. En Dim values(1 To 5, 1 To 5) As String, el primer índice selecciona una fila y el segundo una columna, para un total de 25 elementos de cadena. Los bucles anidados pueden rellenar cada posición; declarar ambos contadores como Integer garantiza que cada variable tenga el tipo numérico previsto:

Dim values(1 To 5, 1 To 5) As String
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 5
values(i, j) = "The value of (" & i & "," & j & ") is " & i * j
Debug.Print values(i, j)
Next j
Next i

Esto rellena la cuadrícula con una etiqueta y el producto de los índices de fila y columna; por ejemplo, la posición (3, 4) contiene The value of (3,4) is 12. Mantén coordinados los límites de las dimensiones y los de los bucles para que cada asignación use un índice declarado en el array.

Ejecuta este pequeño ejemplo de Python para ver el mismo patrón de selección con índices desde cero que se muestra arriba:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

animals = ["Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra"]
print(animals[3])

La salida del ejemplo es Monkey; ese texto visible se conserva en inglés.

Monkey