Cree una matriz a partir de un rango específico en Excel usando VBA

Bilal Shahid 15 febrero 2024
  1. Matrices en VBA
  2. Crear una matriz con un rango de celdas específico
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:

cree una matriz a partir de un rango específico en Excel usando vba - imagen uno

Nota: El índice de la matriz comienza con 1 en lugar de 0.

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:

cree una matriz a partir de un rango específico en Excel usando vba - imagen dos

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:

cree una matriz a partir de un rango específico en Excel usando vba - imagen tres

Nota: Notamos que la matriz comienza desde el índice 1 en lugar del índice 0 en ambos escenarios. La función Application.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().

Bilal Shahid avatar Bilal Shahid avatar

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

Artículo relacionado - VBA Array