Cree una matriz a partir de un rango específico en Excel usando VBA
Este tutorial nos enseña sobre matrices en VBA y demuestra cómo podemos crear una matriz usando el rango especificado en MS Excel usando VBA.
Antes de pasar al tema principal, es esencial conocer las matrices en VBA. Comencemos con eso.
Matrices en VBA
La matriz es una colección de objetos similares a los que podemos acceder con la ayuda de un índice. Es bastante fácil definir una matriz en VBA. Podemos declarar dos tipos de matriz en VBA: matriz estática
y matriz dinámica
.
Una matriz estática
es una matriz de tamaño fijo que solo puede almacenar la cantidad de valores que se ha definido. Vea el siguiente ejemplo donde declaramos una matriz de tipos de datos cadena
con tamaño 7
:
Dim arr(7) As String
Un arreglo dinámico
no tiene un tamaño definido, y podemos extenderlo a lo largo del programa. Podemos declararlo usando cualquiera de las dos declaraciones mencionadas a continuación:
Dim arr() As String
O
Dim arr As Variant
Es bastante fácil asignar valores a una matriz en VBA. Para una matriz estática
, podemos usar la siguiente declaración para asignar valores:
arr (index) = Value
Inicialmente, el arreglo dinámico
no se declara con tamaño; por lo tanto, para asignar valores a un arreglo dinámico
, redeclararlo con el tamaño y luego asignar cualquier valor.
ReDim arr(size)
arr (index) = value
Ahora que sabemos lo suficiente sobre matrices en VBA, aprendamos cómo crear una matriz con el rango especificado en Microsoft Excel usando VBA.
Crear una matriz con un rango de celdas específico
La sección escrita anteriormente describe cómo declarar una matriz simple. Sin embargo, no menciona la creación de una matriz que contenga valores de un rango de celdas específico en Microsoft Excel.
Para asignar una matriz con los valores de las celdas, podemos usar la siguiente instrucción de código:
Dim arr As Variant
arr= Range("A1:A10").Value
El arr
se declara como un arreglo dinámico
para que pueda aceptar el rango de celdas que se le asigna. La declaración del código se ejecuta perfectamente pero crea una matriz bidimensional sobre el rango de celdas A1:A10
. Lo podemos ver en la siguiente imagen:
Nota: El índice de la matriz comienza con
1
en lugar de0
.
Puede ser difícil para los usuarios, especialmente para los principiantes, trabajar con una matriz bidimensional.
Por lo tanto, es esencial encontrar una solución que pueda convertir la matriz bidimensional en una matriz unidimensional porque siempre es más fácil trabajar con una matriz unidimensional.
Convierta la matriz 2D en una matriz 1D
Hay dos escenarios al convertir la matriz bidimensional en una matriz unidimensional. Un escenario es cuando el rango de celdas es el de una columna. El otro escenario es cuando el rango de celdas es el de una fila.
Rango de celdas de columna
Cuando desee almacenar los valores de una columna en una matriz unidimensional, puede usar la función Application.Transpose()
en la función Range()
.
Devolverá una matriz unidimensional que contiene los valores de celda del rango de columna mencionado en la función Rango()
. Para eso, podemos usar la siguiente cerca de código:
Dim myArr As Variant
myArr = Application.Transpose(Range("A1:A10"))
En la ejecución, las declaraciones de código producen los siguientes resultados:
Rango de celdas de fila
La función Application.Transpose()
debe usarse dos veces en la función Range()
cuando desee almacenar los valores de una fila en una matriz unidimensional.
La matriz resultante será una matriz unidimensional que contiene los valores de las celdas del rango de fila mencionado en la función Rango()
. Para hacer eso, podemos usar el siguiente bloque de código:
Dim myArr As Variant
myArr = Application.Transpose(Application.Transpose(Range("A1:J1")))
En la ejecución, las declaraciones de código producen los siguientes resultados:
Nota: Notamos que la matriz comienza desde el índice
1
en lugar del índice0
en ambos escenarios. La funciónApplication.Transpose()
no altera los índices de la matriz.
También es importante tener en cuenta que las versiones más nuevas de Microsoft Excel utilizan una versión modificada de la función Application.Transpose()
.
La función Application.WorksheetFunction.Transpose()
se utiliza en las versiones más recientes de Microsoft Excel como alternativa a la función Application.Transpose()
.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub