¿Cómo utilizar Excel VBA Array?

Puede ejecutar las macros desde el Editor de Visual Basic colocando el cursor en la macro y presionando la tecla F5, o desde Excel abriendo el cuadro de diálogo Macros (ALT + F8) eligiendo la macro a ejecutar y haciendo clic en Ejecutar. Es mejor ejecutar estas macros desde Visual Basic Editor usando Depurar> Paso a paso (presionando F8) para que pueda verlas mientras funcionan. Instrucción Si la pestaña Desarrollador no está en la cinta …​ Abra Excel.

  • Vaya al Editor de VBA (presione Alt + F11)

  • Vaya a la ventana Inmediato. (Ctrl + G)

  • Escriba el código a continuación.

Application.ShowDevTools = True

Cómo insertar código VBA en Excel

Vaya a la pestaña Desarrollador> Grupo de código> * Visual Basic

Haga clic en Insertar> * Módulo.

  • Abrirá un módulo en blanco para usted.

  • Escriba / pegue el código proporcionado en ese módulo

Untitled-1

Cómo ejecutar código VBA en Excel

Seleccione cualquier lugar entre el Código, * Sub… End Sub

Haga clic en Ejecutar y ejecutar Sub * o

F5

Untitled-1

Variables de matriz estáticas En lugar de utilizar varias variables únicas para almacenar información, puede utilizar una variable de matriz.

Cuando sepa cuántos elementos necesita almacenar en la matriz, puede usar una variable de matriz estática como esta:

El código Sub TestStaticArray () 'almacena 10 nombres en el libro de trabajo en la variable de matriz MyNames () Dim MyNames (1 To 10) As String' declara una variable de matriz estática Dim iCount As Integer For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Siguiente iCount Erase MyNames () 'elimina el contenido de las variables, libera algo de memoria End Sub ==== Decodificar

Dim MyNames (1 a 10) As String

Hemos dimensionado un solo MyNames verificable como una cadena, que puede contener 10 elementos. Entonces MyNames veriable es un tipo Array.

Dim iCount como entero

Hemos declarado una sola variable iCount como un número entero, que solo puede contener un valor de tipo entero numérico

Para iCount = 1 a ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count nos dará el número de hojas en un libro de trabajo.

Este libro de trabajo se refiere al libro de trabajo en el que se escribió el código.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

Usando un bucle, estamos asignando el nombre de cada hoja a un único verificable llamado MyNames. MyNames es un tipo de matriz verificable, por lo que almacenará el nombre de cada hoja en cada elemento de la matriz.

Debug.Print MyNames (iCount)

Justo después de asignar el valor a cada elemento de una matriz, imprimirá lo mismo en ImmediateWindow, por defecto en la parte inferior de la ventana de VBA.

Puede ver la asignación de cada valor y mostrar su valor en ImmediateWindow.

Image

Siguiente iCount

Siguiente se usa para decirle a For Loop en Excel VBA que repita la misma tarea nuevamente, aumentando el Contador de iCount, hasta que iCount alcance el Número total de hojas en el libro de trabajo.

Variables de matriz dinámica Las variables de matriz dinámica son útiles cuando no sabe de antemano cuántos elementos necesita almacenar información.

Declaras variables de matriz dinámica como una variable de matriz estática, excepto que no das ninguna información sobre el tamaño de la matriz.

En el ejemplo anterior (Dim MyNames (1 to 10) As String) si el número de hojas es mayor que 10, será debido a un error, ya que MyNames no podrá almacenar más de 10 elementos.

El código Sub TestDynamicArray () 'almacena todos los nombres en el libro de trabajo en la variable de matriz MyNames () Dim MyNames () As String' declara una variable de matriz dinámica Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheets. Count 'encuentra el tamaño máximo de matriz ReDim MyNames (1 To Max)' declara la variable de matriz con el tamaño necesario Para iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Siguiente iCount Erase MyNames () 'borra los contenidos variables, libera algo de memoria End Sub ==== Decode

Dim MyNames () como cadena

Hemos dimensionado un único MyNames verificable como String, que es un tipo Array, debido a abrir y cerrar Paranthesis, después del nombre verificable, pero no podremos almacenar ningún dato en él, ya que no hemos proporcionado su UpperLevel.

ReDim MyNames (1 al máximo)

Redim se usa para redimensionar la matriz. Ahora asignará el nivel superior del tipo de matriz Veriable.

En este caso, el número total de hojas en el libro de trabajo (Max = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

En el último ejemplo, hemos impreso el valor en variables en la ventana inmediata, esta vez, estamos imprimiendo el valor en un cuadro de mensaje, que aparecerá así ..

Image

Si sabe que necesitará una variable de matriz con 1000 elementos, use una variable estática. La desventaja es que usará memoria para 1000 elementos cada vez, también en los casos en que solo almacene información sobre 10 elementos. Si usa una variable de matriz dinámica, usará la memoria de manera más eficiente.

A veces no es posible calcular qué tan grande debe ser la variable de matriz. En estos casos, es necesario aumentar el tamaño de la variable de matriz según sea necesario. Cuando usa una instrucción ReDim para cambiar el tamaño de la variable de la matriz, el contenido de la variable también se borra para evitar eliminar el contenido de la variable cuando redime la variable de la matriz, necesitará usar la instrucción ReDim Preserve.

El código Sub GetFileNameList () 'almacena todos los nombres de archivo en la carpeta actual Dim FolderFiles () As String' declara una variable de matriz dinámica Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir (" D: \ Test \. ") Mientras tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) 'declara la variable de matriz nuevamente (tamaño + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &" los nombres de archivo son que se encuentra en la carpeta "& CurDir Erase FolderFiles 'elimina el contenido variable, libera algo de memoria End Sub ==== Decode

Atenuar FolderFiles () como cadena

Hemos dimensionado un único FolderFiles verificable como una cadena, que es un tipo de matriz, debido a abrir y cerrar Paranthesis, después del nombre verificable, pero no podremos almacenar ningún dato en él, ya que no hemos proporcionado su UpperLevel.

tmp = Dir («D: \ Prueba \.»)

El comando Dir funciona como un explorador, que puede contener el nombre de todos los archivos y carpetas en un directorio. También puede limitar todos los archivos a algunos criterios específicos. Dir («D: \ Test \ *. Pdf») limitará todos los archivos a solo archivos PDF o extensión.

Mientras tmp <> Vacío

En lugar de Para el ciclo en Excel VBA, esta vez, estamos repitiendo la misma acción, utilizando Excel VBA MIENTRAS LOOP, donde los criterios para finalizar el ciclo se establecieron como tmp no igual a vacío. Entonces, hasta que haya algún valor en tmp veriable, el ciclo lo hará trabajo.

ReDim Preserve FolderFiles (1 To fCount)

Array Veriable FolderFiles no tiene ningún nivel superior en la posición inicial. Pero, en cada repetición aumenta su nivel superior con el comando ReDim. En la primera ejecución 1, luego 2 .. y así sucesivamente, hasta fCount. Sin embargo, con cada vez que aumenta el nivel superior, perderá todas las variables ya asignadas. Al usar el comando Preserve, podemos mantener o almacenar el valor ya asignado.

Wend

Wend solía decir For Loops en VBA, para repetir la misma tarea nuevamente, hasta que se cumplan los criterios.

MsgBox fCount & «los nombres de archivo se encuentran en la carpeta» & CurDir

En cada repetición, fcout aumentará con +1, y su valor final será el número de archivos que se encuentran en ese directorio / carpeta. El comando CurDir da el nombre del directorio actual. En este caso “D: \ Test”

Image