Sunteți pe pagina 1din 7

Arrays vba en Excel | Definicin, tipos y

ejemplos
Que es un array vba en Excel?
Arrays vba en Excel, en espaol matriz o arreglo es una lista de elementos de iguales caractersticas
agrupadas bajo una sola variable (igual tipo de datos y nombre) . Cada elemento de un array vba se
diferencia mediante un sub ndice, por ejemplo nombre (1), nombre (2), nombre (3), etc y se utiliza para
declarar con una sola variable un conjunto de datos evitando de esta forma crear tantas variables como
elementos tenga el array.

Tipos de Arrays vba en Excel


Existen dos tipos de array vba entre los que tenemos:

Array de una sola dimensin:


Array multimensionales

Cmo se declaran los Arrays?


La forma general para declarar un array en excel de una sola dimensin es la
siguiente:
1
1

Dim arrayName(index) as dataType


Dim arrayName(first index to last index) as dataType

La forma general para declarar array de mltiples dimensiones es la siguiente:


1

Dim arrayName (num1, num2, num3, ...numN) as datatype

Si hasta el momento has entendido poco o nada sobre arrays vba en Excel,
entonces te lo explico a travs de ejemplos:

a).- Ejemplo de Arrays de una sola dimensin


Sub Array_1()
'ejemplo de un array de una sola dimensin
'declaramos el array para este caso de 4 elementos
'Vamos usar esta forma para declarar el array
Dim arraynombres(4) As String
For i = 1 To 4
'alimentamos el array con 4 nombres
arraynombres(i) = InputBox("Ingrese nombres de personas", _
"Array de una dimensin", "Escribe un nombre aqui")
Next i
'una ves que tenemos los datos capturados

'podemos hacer consultas por ejemplo


MsgBox "El elemento 3 del array es :" & arraynombres(3)
'este ejemplo sencillo demuestra su gran utilidad.
End Sub

Aqui tienen otro ejemplo bsico de su funcionamiento.


Sub Array_2()
'ejemplo de un array de una sola dimensin
'declaramos el array para este caso de 5 elementos
'Vamos usar otra forma para declarar el array
Dim arrayhojas(1 To 5) As String
For i = 1 To 5
'alimentamos el array con este bucle
arrayhojas(i) = Sheets(i).Name
Next i
'una ves que tenemos los datos capturados (nombre de las hojas)
'vamos a descargar la informacin apartir de A1
For k = 1 To 5
Range("a" & k).Value = arrayhojas(k)
Next k
End Sub

b).- Ejemplo de Array multidimensional (Para este caso de dos


dimensiones)
'En este array ingresaremos el nombre de 5 personas y sus
'respectivas edades.
'Para este caso este array es de tamao 5x2
'5 filas ya que sern 5 los nombres de personas que ingresaremos y
'dos columnas una para Nombres y otra para edades
Sub Array_multidimensional()
Dim datospersonas(1 To 5, 1 To 2) As Variant
For k = 1 To 5
For i = 1 To 2
If i = 1 Then
mensaje = InputBox("Ingresa el nombre de una persona", _
"Nombre de Personas", "Escribe el nombre de una persona")
Else
mensaje = InputBox("Ingresa la edad de la persona antes indicada", _
"Edad de Personas", "Escribe la edad de la persona")
End If
datospersonas(k, i) = mensaje
Cells(k, i).Value = datospersonas(k, i)
Next i
Next k
End Sub

Uso de Arreglos en VBA


Los arreglos son un conjunto de elementos que tienen el mismo tipo de datos y que
estn ordenados secuencialmente. Cada elemento de una matriz posee un nmero de
ndice nico que lo identifica. Adems, Los cambios efectuados a un elemento de una

matriz no afectan a los dems elementos. Para definir un arreglo unidimensional se


coloca lo siguiente:
Dim arreglo(INTERVALO) As TIPO
Donde INTERVALO indicar el menor ndice y el mayor ndice del arreglo. Por
ejemplo, si quiero definir un arreglo que almacene 20 datos enteros (variando sus
valores entre 0 y 255), entonces lo har de la siguiente manera, Dim A(1 To 20) As
Byte, esto indicar que el sistema debe separar 20 casilleros para almacenar 20 enteros
de tipo Byte entre 0 y 255. Cuando quiero almacenar el valor 18 en la posicin 9 del
arreglo anterior A entonces debemos colocar A(9)=18.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
18
Para llenar un arreglo con datos desde una hoja de Excel, se usa el siguiente
subprograma:
Sub llena_arreglo (ByRef A() As Byte, ByVal N As Byte)
Dim I As Byte
For I=1 To N
A(I)=Range("B"&I)
Next
End Sub

En el programa anterior, N indica el nmero de elementos que tiene el arreglo (que no


necesariamente ser el nmero 20, pero de todas formas ser un nmero menor igual a
20) y este nmero de elemento no puede ser mayor del que se coloc en la declaracin
del DIM usado en el Subprograma Principal. Es importante mencionar que para pasar
como parmetro un arreglo se debe usar siempre la palabra ByRef (nunca ByVal).
Tambin debe recordarse que en un arreglo todos los datos son del mismo tipo.
EJEMPLO: Si se desea crear un subprograma que calcule el promedio de notas de un
conjunto de alumnos cuyos datos se muestran en una hoja de excel de la siguiente
manera. En la celda B1 se encuentra el nmero de alumnos (10 alumnos), de la celda A4
a la A13 se encuentra la numeracin de los alumnos, formando una columna
1,2,3,4,510. En la siguiente columna desde la celda B4 hasta la B13 se ubican las
respectivas notas de los alumnos y finalmente en la celda E4 se encuentra el promedio
de notas.
Sub principal()
Dim N As Byte, promedio As Single
Dim A(1 To 10) As Byte
N=Range("B1")
Call llenar_arreglo(A,N)
promedio=calc_promedio(A,N)
Range("E4")=promedio
End Sub
Sub llenar_arreglo(ByRef A() As Byte, Byval N As Byte)
Dim I As Byte
For I=1 To N

A(I)=Range("B"&I+3)
Next
End Sub
Function calc_promedio(ByRef A() As Byte, ByVal N As Byte) As Single
Dim I As Byte, suma As Single
suma=0
For I=1 To N
suma=suma+A(I)
Next
calc_promedio=Round((Suma/N),1)
End Function

Arrays dinmicos
Ya he hablado anteriormente de los arrays. La mayora de los lenguajes de
programacin utilizan los arrays que, recordemos es un conjunto de elementos que
tienen en comn un nombre aunque entre ellos son diferentes. Por ejemplo el array
dgitos estara compuesto por las cifras 0,1,2,3,4,5,6,7,8 y 9. Cada uno de ellos irn
referidos con un ndice. As supongamos el array compuesto por los meses del ao:

Al tratarse de un nmero de elementos fijo estaramos hablando de un array esttico


que, en este caso consta de 12 elementos.
Antes de empezar a programar con ellos necesitamos declararlos

Dim meses(11) as byte

Podr observar que entre parntesis he colocado 11 y no 12, ya que, por defecto los
subndices de los arrays de VBA empiezan en 0 (que es el lmite inferior de la matriz). Si
deseamos que comience en 1 en vez de en 0, incluiremos antes del primer array y
antes del primer procedimiento las expresin:

Option Base 1
Ahora bien que haramos si no conociramos de antemano la dimensin de nuestra
array? Para ello podemos declarar un array dinmico dejando el parntesis en blanco en
la sentencia Dim:
Dim miArray( ) as Double
Una vez que conozcamos el nmero de elementos que necesitamos usaremos la
sentencia Redim para sealar el nmero de subndices necesarios. Por ejemplo:
Redim mi Array(102)

Veamos un ejemplo sencillo para entender los conceptos mencionados:


Vamos a declarar una matriz unidimensional de 3 elementos compuesto por los tres
primeros dias de la semana, y haremos que no los presente por pantalla:
Option Explicit
Sub asignandoarray()
Dim miArray(3) As String
miArray(0) = lunes
miArray(1) = martes
miArray(2) = mircoles
MsgBox miArray(0) & & miArray(1) & & miArray(2)
End Sub
Ahora redimensionaremos el array para introducir el jueves y el viernes:
Sub redimarray()
Voy a redimensionar la array anterior para incluir el jueves y el viernes
ReDim miArray(5)
miArray(0) = lunes
miArray(1) = martes
miArray(2) = mircoles
miArray(3) = jueves
miArray(4) = viernes
MsgBox miArray(0) & & miArray(1) & & miArray(2) & & miArray(3) &
& miArray(4)
End Sub
Si deseamos no tener que volver a escribir el mismo procedimiento podemos incluir
datos con la expresin Redim preserve(el nmero siguiente en el ndice)
Sub asignandoarray2()
ReDim miArray(3)
miArray(0) = lunes
miArray(1) = martes
miArray(2) = mircoles
ReDim Preserve miArray(3)
miArray(3) = jueves
MsgBox miArray(0) & & miArray(1) & & miArray(2) & & miArray(3)
End Sub
Supongamos que precisamos referenciar los datos de una cartera de clientes. Tal vez
precisemos almacenar informacin para cada uno de los clientes acerca de su nombre,
apellidos, direccin, edad,etc. Esto implicara la declaracin de una variable por cada
concepto y por cada cliente. Adems de la perdida de tiempo, es por tal motivo que

recurrimos a las Matrices o Arrays.


Un array es un conjunto de datos del mismo tipo ordenados en forman lneal uno
despus de otro. Los componentes de un array se han de referenciar por medio del
nombre del array y un ndice de desplazamiento para indicar el componente deseado.
Como ejemplo prctico vamos a realizar este sencillo ejercicio que va a consistir en
obtener los productos cruzados de los primeros 10 nmeros naturales. Para ello vamos a
realizar una macro que nos escriba los 10 primeros nmeros en la fila 1 y en la columna
A para despus efectar el producto.
1.
2.
3.
4.

Abra un libro nuevo.


Presione Alt+F11 para ejecutar el Editor de Visual Basic.
En el men Insertar, haga clic en Mdulo.
Escriba el siguiente cdigo en la hoja de mdulo:

Sub tabla_multiplicar()
Dim i, j As Byte
Dim myarray As Variant
myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Range(a1:a10).Value = Application.WorksheetFunction.Transpose(myarray)
Range(a1:j1).Value = myarray
Range(a1:a10).Font.ColorIndex = 5
Range(a1:j1).Font.ColorIndex = 5
For i = 1 To 10
For j = 1 To 10
Cells(i, j) = Cells(1, j) * Cells(i, 1)
Next j
Next i
End Sub
Como se habr podido observar despus de declarar dos variables byte, la i y la j,
hemos declarado nuestra matriz con el nombre de myarray y tipo Variant. En
principio todos los elmentos de un array deben ser del mismo tipo, el hecho de
declararlos de tipo Variante nos facilita mezclar elementos de diferente tipo e incluso
incluir otras arrays. Seguidamente hemos definido los elementos de nuestra matriz con
la siguiente declaracin:
myarray = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Con la siguiente lnea invocamos una funcin de Excel la transposicin de matrices. O
sea intercambiar filas por columnas:
Range(a1:a10).Value = Application.WorksheetFunction.Transpose(myarray)
Con ello conseguimos escribir en forma de columna nuestra matriz fila. A continuacin
insertamos los valores de la misma matriz en la fila 1
Range(a1:j1).Value = myarray

Formateamos un poco dndole color azul a la fuentes de la 1 fila y columna y despus


insertamos un bucle para efectar los productos cruzados. No se preocupe por ese
fragmento de cdigo lo entender cuando tratemos las estructuroas de decisin.

S-ar putea să vă placă și