Matrius en Visual Basic per a aplicacions

Les matrius de Visual Basic for Application són estructures que normalment emmagatzemen conjunts de variables relacionades del mateix tipus. S'accedeix a les entrades de matriu mitjançant el seu índex numèric.

Per exemple, hi ha un equip de 20 persones els noms de les quals s'han de desar per utilitzar-los posteriorment en codi VBA. Es podria simplement declarar 20 variables per contenir cada nom, així:

Dim Team_Member1 com a cadena Dim Team_Member2 com a cadena... Dim Team_Member20 com a cadena

Però podeu utilitzar una manera molt més senzilla i organitzada: emmagatzemar una llista de noms de membres de l'equip en una matriu de 20 variables com ara Cadena:

Dim Team_Members (1 a 20) com a cadena

A la línia que es mostra a dalt, hem declarat una matriu. Ara escrivim un valor a cadascun dels seus elements, com aquest:

Team_Members(1) = "John Smith"

Un avantatge addicional d'emmagatzemar dades en una matriu, en comparació amb l'ús de variables separades, es fa evident quan es fa necessari realitzar la mateixa acció en cada element de la matriu. Si els noms dels membres de l'equip s'emmagatzemen en 20 variables separades, es necessitarien 20 línies de codi per escriure cada vegada per dur a terme la mateixa acció en cadascuna d'elles. Tanmateix, si els noms s'emmagatzemen en una matriu, podeu realitzar l'acció desitjada amb cadascun d'ells mitjançant un simple bucle.

A continuació es mostra com funciona amb un exemple de codi que imprimeix els noms de cada membre de l'equip seqüencialment a les cel·les de la columna. A full de treball Excel actiu.

Per a i = 1 a 20 cel·les (i, 1). Valor = Team_Members (i) Següent i

Òbviament, treballar amb una matriu que emmagatzema 20 noms és molt menys feixuc i més precís que utilitzar 20 variables separades. Però, què passa si aquests noms no són 20, sinó 1000? I si, a més, s'exigeix ​​mantenir els cognoms i patronímics per separat?! Està clar que aviat serà completament impossible gestionar aquest volum de dades en codi VBA sense l'ajuda d'una matriu.

Matrius multidimensionals en Excel Visual Basic

Les matrius de Visual Basic comentades anteriorment es consideren unidimensionals. Això vol dir que emmagatzemen una llista senzilla de noms. Tanmateix, les matrius poden tenir diverses dimensions. Per exemple, una matriu bidimensional es pot comparar amb una graella de valors.

Suposem que voleu desar les xifres de vendes diàries de gener per a 5 equips diferents. Això requerirà una matriu bidimensional que consta de 5 conjunts de mètriques durant 31 dies. Declarem una matriu com aquesta:

Dim Jan_Sales_Figures (1 a 31, 1 a 5) com a moneda

Per accedir als elements de la matriu Xifres_vendes_gen, heu d'utilitzar dos índexs que indiquin el dia del mes i el número d'ordre. Per exemple, l'adreça d'un element que conté xifres de vendes per 2-oh equips per 15è Gener s'escriuria així:

Xifres_vendes_gen(15, 2)

De la mateixa manera, podeu declarar una matriu amb 3 o més dimensions; només cal que afegiu dimensions addicionals a la declaració de la matriu i utilitzeu índexs addicionals per referir-vos als elements d'aquesta matriu.

Declaració de matrius en Excel Visual Basic

A l'inici d'aquest article, ja vam mirar diversos exemples de declaració de matrius a VBA, però aquest tema mereix una mirada més de prop. Com es mostra, una matriu unidimensional es pot declarar així:

Dim Team_Members (1 a 20) com a cadena

Aquesta declaració indica al compilador VBA que la matriu Membres de l'equip consta de 20 variables a les quals es pot accedir als índexs de l'1 al 20. Tanmateix, podríem pensar en numerar les variables de la matriu de 0 a 19, en aquest cas la matriu s'hauria de declarar així:

Dim Team_Members (0 a 19) com a cadena

De fet, per defecte, la numeració dels elements de la matriu comença des de 0, i a la declaració de la matriu, l'índex inicial pot no estar especificat en absolut, com aquest:

Dim Team_Members(19) As String

El compilador VBA tractarà aquesta entrada com la declaració d'una matriu de 20 elements amb índexs de 0 a 19.

Les mateixes regles s'apliquen quan es declaren matrius de Visual Basic multidimensionals. Com ja es mostra en un dels exemples, quan es declara una matriu bidimensional, els índexs de les seves dimensions estan separats per una coma:

Dim Jan_Sales_Figures (1 a 31, 1 a 5) com a moneda

Tanmateix, si no especifiqueu un índex inicial per a les dues dimensions de la matriu i el declareu així:

Dim Jan_Sales_Figures(31, 5) Com a moneda

llavors aquesta entrada es tractarà com una matriu bidimensional, la primera dimensió de la qual conté 32 elements amb índexs de 0 a 31, i la segona dimensió de la matriu conté 6 elements amb índexs de 0 a 5.

Arrays dinàmics

Totes les matrius dels exemples anteriors tenen un nombre fix de dimensions. Tanmateix, en molts casos no sabem per endavant quina mida hauria de tenir la nostra matriu. Podem sortir de la situació declarant una gran matriu, la mida de la qual sens dubte serà més gran del necessari per a la nostra tasca. Però aquesta solució requerirà molta memòria addicional i pot alentir el programa. Hi ha una millor solució. Podem utilitzar una matriu dinàmica: aquesta és una matriu la mida de la qual es pot configurar i canviar qualsevol nombre de vegades durant l'execució d'una macro.

Es declara una matriu dinàmica amb parèntesis buits, com aquest:

Dim Team_Members() com a cadena

A continuació, haureu de declarar la dimensió de la matriu durant l'execució del codi mitjançant l'expressió ReDim:

ReDim Team_Members (1 a 20)

I si durant l'execució del codi necessiteu tornar a canviar la mida de la matriu, podeu tornar a utilitzar l'expressió ReDim:

Si Team_Size > 20 Aleshores Redim Team_Members (1 a Team_Size) Finalitzeu si

Tingueu en compte que canviar la mida d'una matriu dinàmica d'aquesta manera provocarà la pèrdua de tots els valors emmagatzemats a la matriu. Per emmagatzemar dades ja a la matriu, heu d'utilitzar la paraula clau preservecom es mostra a continuació:

Si Team_Size > 20 Aleshores ReDim Preserve Team_Members (1 a Team_Size) Finalitz if

Malauradament la paraula clau preserve només es pot utilitzar per canviar el límit superior d'una dimensió de matriu. El límit inferior d'una matriu no es pot canviar d'aquesta manera. A més, si la matriu té diverses dimensions, feu servir la paraula clau preserve, només es pot canviar la mida de l'última dimensió de la matriu.

Deixa un comentari