Arrays en Visual Basic para aplicaciĆ³ns

As matrices en Visual Basic for Application son estruturas que normalmente almacenan conxuntos de variables relacionadas do mesmo tipo. AccƩdese Ɣs entradas da matriz polo seu ƭndice numƩrico.

Por exemplo, hai un equipo de 20 persoas cuxos nomes deben ser gardados para o seu uso posterior no cĆ³digo VBA. PoderĆ­ase simplemente declarar 20 variables para manter cada nome, asĆ­:

Dim Team_Member1 como cadea Dim Team_Member2 como cadea... Dim Team_Member20 como cadea

Pero pode usar un xeito moito mƔis sinxelo e organizado: almacenar unha lista de nomes de membros do equipo nunha matriz de 20 variables como Corda:

Dim Team_Members(1 To 20) As String

Na liƱa mostrada arriba, declaramos unha matriz. Agora imos escribir un valor para cada un dos seus elementos, como este:

Team_Members(1) = "John Smith"

Unha vantaxe adicional de almacenar datos nunha matriz, en comparaciĆ³n co uso de variables separadas, faise evidente cando se fai necesario realizar a mesma acciĆ³n en cada elemento da matriz. Se os nomes dos membros do equipo estivesen almacenados en 20 variables separadas, entĆ³n farĆ­an falta 20 liƱas de cĆ³digo para escribir cada vez para realizar a mesma acciĆ³n en cada unha delas. Non obstante, se os nomes se almacenan nunha matriz, pode realizar a acciĆ³n desexada con cada un deles mediante un simple bucle.

Como funciona a continuaciĆ³n mĆ³strase cun exemplo de cĆ³digo que imprime os nomes de cada membro do equipo secuencialmente nas celas da columna. A folla de traballo de Excel activa.

Para i = 1 a 20 celas(i,1).Valor = Team_Members(i) Seguinte i

Obviamente, traballar cunha matriz que almacena 20 nomes Ć© moito menos complicado e mĆ”is preciso que usar 20 variables separadas. Pero e se estes nomes non son 20, senĆ³n 1000? E se, ademais, se esixe gardar os apelidos e os patronĆ­micos por separado?! EstĆ” claro que pronto serĆ” completamente imposible xestionar tal volume de datos en cĆ³digo VBA sen a axuda dunha matriz.

Matrices multidimensionais en Excel Visual Basic

As matrices de Visual Basic comentadas anteriormente considĆ©ranse unidimensionales. Isto significa que almacenan unha lista sinxela de nomes. Non obstante, as matrices poden ter varias dimensiĆ³ns. Por exemplo, unha matriz bidimensional pĆ³dese comparar cunha cuadrĆ­cula de valores.

Digamos que queres gardar as cifras de vendas diarias de xaneiro de 5 equipos diferentes. Isto requirirƔ unha matriz bidimensional formada por 5 conxuntos de mƩtricas durante 31 dƭas. Imos declarar unha matriz como esta:

Dim Xan_Sales_Figures (1 a 31, 1 a 5) como moeda

Para acceder aos elementos da matriz Cifras_de_vendas de xaneiro, cĆ³mpre utilizar dous Ć­ndices que indiquen o dĆ­a do mes e o nĆŗmero de comando. Por exemplo, o enderezo dun elemento que contĆ©n cifras de vendas para 2-oh equipos para 15Āŗ Xaneiro escribirĆ­ase asĆ­:

Cifras_de_vendas de xaneiro (15, 2)

Do mesmo xeito, pode declarar unha matriz con 3 ou mĆ”is dimensiĆ³ns; sĆ³ engade dimensiĆ³ns adicionais Ć” declaraciĆ³n da matriz e use Ć­ndices adicionais para referirse aos elementos desta matriz.

DeclaraciĆ³n de matrices en Excel Visual Basic

A principios deste artigo, xa analizamos varios exemplos de declaraciĆ³n de matrices en VBA, pero este tema merece unha mirada mĆ”is atenta. Como se mostra, unha matriz unidimensional pĆ³dese declarar asĆ­:

Dim Team_Members(1 To 20) As String

Tal declaraciĆ³n indica ao compilador VBA que a matriz Membros_equipo consta de 20 variables Ć”s que se pode acceder en Ć­ndices do 1 ao 20. Non obstante, poderĆ­amos pensar en numerar as variables da nosa matriz de 0 a 19, nese caso a matriz deberĆ­a declararse asĆ­:

Dim Team_Members(0 To 19) As String

De feito, por defecto, a numeraciĆ³n dos elementos da matriz comeza a partir de 0, e na declaraciĆ³n da matriz Ć© posible que non se especifique o Ć­ndice inicial, asĆ­:

Dim Team_Members(19) As String

O compilador VBA tratarĆ” tal entrada como que declara unha matriz de 20 elementos con Ć­ndices de 0 a 19.

As mesmas regras aplĆ­canse cando se declaran matrices de Visual Basic multidimensionais. Como xa se mostra nun dos exemplos, ao declarar unha matriz bidimensional, os Ć­ndices das sĆŗas dimensiĆ³ns estĆ”n separados por unha coma:

Dim Xan_Sales_Figures (1 a 31, 1 a 5) como moeda

Non obstante, se non especifica un Ć­ndice inicial para ambas dimensiĆ³ns da matriz e o declara asĆ­:

Dim Xan_Sales_Figures(31, 5) As Currency

entĆ³n esta entrada tratarase como unha matriz bidimensional, cuxa primeira dimensiĆ³n contĆ©n 32 elementos con Ć­ndices de 0 a 31, e a segunda dimensiĆ³n da matriz contĆ©n 6 elementos con Ć­ndices de 0 a 5.

Matrices dinƔmicas

Todas as matrices dos exemplos anteriores teƱen un nĆŗmero fixo de dimensiĆ³ns. Non obstante, en moitos casos non sabemos de antemĆ”n que tamaƱo deberĆ­a ser a nosa matriz. Podemos saĆ­r da situaciĆ³n declarando unha enorme matriz, cuxo tamaƱo certamente serĆ” maior do necesario para a nosa tarefa. Pero tal soluciĆ³n requirirĆ” moita memoria extra e pode ralentizar o programa. Hai unha soluciĆ³n mellor. Podemos usar unha matriz dinĆ”mica: esta Ć© unha matriz cuxo tamaƱo se pode configurar e cambiar calquera nĆŗmero de veces durante a execuciĆ³n dunha macro.

Unha matriz dinƔmica declƔrase con parƩnteses baleiras, como esta:

Dim Team_Members() As String

A continuaciĆ³n, terĆ” que declarar a dimensiĆ³n da matriz durante a execuciĆ³n do cĆ³digo usando a expresiĆ³n ReDim:

ReDim Team_Members (1 a 20)

E se durante a execuciĆ³n do cĆ³digo necesitas cambiar o tamaƱo da matriz de novo, podes usar a expresiĆ³n ReDim de novo:

Se Team_Size > 20 EntĆ³n ReDim Team_Members(1 To Team_Size) Finalize If

TeƱa en conta que cambiar o tamaƱo dunha matriz dinĆ”mica deste xeito provocarĆ” a perda de todos os valores almacenados na matriz. Para almacenar datos xa na matriz, cĆ³mpre usar a palabra clave Conservascomo se mostra a continuaciĆ³n:

Se Team_Size > 20, ReDim Preserve Team_Members (1 To Team_Size) Finalize If

Desafortunadamente, a palabra clave Conservas sĆ³ se pode usar para cambiar o lĆ­mite superior dunha dimensiĆ³n de matriz. O lĆ­mite inferior dunha matriz non se pode cambiar deste xeito. Ademais, se a matriz ten varias dimensiĆ³ns, use a palabra clave Conservas, sĆ³ se pode redimensionar a Ćŗltima dimensiĆ³n da matriz.

Deixe unha resposta