Matriz de variables usando VBA en Microsoft Excel 2010

Tabla de contenido:

Anonim

¿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 verlos mientras funcionan. Instrucción Si la pestaña Desarrollador no está en la cinta …

  • Abre 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

  • Ir a Desarrollador Pestaña> Código Grupo> Visual Basic
  • Hacer clic Insertar > Módulo.
  • Abrirá un módulo en blanco para usted.
  • Escriba / pegue el código proporcionado en ese módulo

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

Variables de matriz estática

En lugar de usar varias variables únicas para almacenar información, puede usar una variable de matriz.

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

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 como entero
Para iCount = 1 a ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Siguiente iCount
Erase MyNames () 'elimina el contenido variable, libera algo de memoria
End Sub

Descodificar

Atenuar MyNames (1 a 10) como cadena

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.

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 (Atenuar MyNames (1 a 10) como cadena) si el número de hojas es superior a 10, será por error, ya que MyNames no podrá almacenar más de 10 artículos.

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 como entero
Dim Max como entero
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 al máximo
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Siguiente iCount
Erase MyNames () 'elimina los contenidos variables, libera algo de memoria
End Sub

Descodificar

Dim MyNames () como cadena

Hemos dimensionado un solo MyNames 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.

ReDim MyNames (1 a máx.)

Redim se utiliza 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í …

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, el tamaño de la variable de matriz debe aumentarse según sea necesario. Cuando usas un ReDim-declaración 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 Redim la variable de matriz que necesitará utilizar el ReDim Preserve-declaración.

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 como cadena, fCount como entero
fCount = 0
tmp = Dir ("D: \ Prueba \ *. *")
Mientras tmp vacío
fCount = fCount + 1
ReDim Preserve FolderFiles (1 para fCount)
'declara la variable de matriz de nuevo (tamaño + 1)
FolderFiles (fCount) = tmp
tmp = Dir
Encaminarse a
MsgBox fCount & "los nombres de archivo se encuentran en la carpeta" & CurDir
Erase FolderFiles 'elimina los contenidos variables, libera algo de memoria
End Sub

Descodificar

Dim FolderFiles () como cadena

Hemos dimensionado un solo 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 For loop en Excel VBA, esta vez, estamos repitiendo la misma acción, usando Excel VBA WHILE 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 funcionará.

ReDim Preserve FolderFiles (1 para fCount)

Los archivos FolderFiles verificables de la matriz no tienen ningún nivel superior en la posición inicial. Pero, en cada repetición aumentará su nivel superior mediante el comando ReDim. Primero ejecute 1, luego 2… y así sucesivamente, hasta fCount. Sin embargo, con cada vez que aumente el nivel superior, perderá todas las variables ya asignadas. Al usar el comando Preservar, podemos retener o almacenar el valor ya asignado.

Encaminarse a

Wend solía decirle a For Loops en VBA que repita 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 encontrados en ese directorio / carpeta. El comando CurDir da el nombre del directorio actual. En este caso "D: \ Test"