Contidos
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.