Arrays an Visual Basic fir Applikatioun

Arrays a Visual Basic for Application sinn Strukturen déi typesch Sätze vu verwandte Variablen vum selwechten Typ späicheren. Array Entréen ginn duerch hiren numereschen Index zougänglech.

Zum Beispill gëtt et en Team vun 20 Leit deenen hir Nimm musse gespäichert ginn fir spéider am VBA Code ze benotzen. Et kéint een einfach 20 Variablen deklaréieren fir all Numm ze halen, sou wéi:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Awer Dir kënnt e vill méi einfach a méi organiséiert Manéier benotzen - späichert eng Lëscht vun Teammember Nimm an enger Array vun 20 Variablen wéi String:

Dim Team_Members(1 bis 20) Als String

An der Linn hei uewen hu mir en Array deklaréiert. Loosst eis elo e Wäert fir all seng Elementer schreiwen, sou:

Team_Members(1) = "John Schmitz"

En zousätzleche Virdeel fir Daten an enger Array ze späicheren, am Verglach zum Gebrauch vun getrennten Variablen, gëtt offensichtlech wann et néideg ass déiselwecht Handlung op all Element vun der Array auszeféieren. Wann d'Nimm vun den Teammemberen an 20 getrennte Variablen gespäichert goufen, da géif et 20 Zeilen Code huelen fir all Kéier ze schreiwen fir déiselwecht Handlung op jiddereng vun hinnen auszeféieren. Wéi och ëmmer, wann d'Nimm an engem Array gespäichert sinn, da kënnt Dir déi gewënscht Handlung mat jiddereng vun hinnen mat enger einfacher Loop ausféieren.

Wéi et funktionéiert gëtt hei ënnen bewisen mat engem Code Beispill dat d'Nimm vun all Teammember sequenziell an de Kolonnenzellen dréckt. A aktiv Excel Aarbechtsblat.

Fir i = 1 bis 20 Zellen(i,1).Value = Team_Members(i) Next i

Selbstverständlech, mat enger Array ze schaffen déi 20 Nimm späichert ass vill manner ëmständlech a méi präzis wéi 20 separat Variablen ze benotzen. Awer wat wann dës Nimm net 20, mee 1000 sinn? A wann et dann och obligatoresch ass, d'Familljennimm an d'Patronymen separat ze halen?! Et ass kloer datt et geschwënn komplett onméiglech gëtt sou e Volumen vun Daten am VBA Code ouni d'Hëllef vun engem Array ze handhaben.

Multidimensional Arrays an Excel Visual Basic

D'Visual Basic Arrays, déi uewe diskutéiert hunn, ginn als eendimensional ugesinn. Dëst bedeit datt se eng einfach Lëscht vun Nimm späicheren. Wéi och ëmmer, Arrays kënne verschidde Dimensiounen hunn. Zum Beispill kann eng zweedimensional Array mat engem Gitter vu Wäerter verglach ginn.

Loosst eis soen datt Dir déi deeglech Verkafszuele fir Januar fir 5 verschidden Teams späichere wëllt. Dëst erfuerdert eng zweedimensional Array, besteet aus 5 Sätz vu Metriken fir 31 Deeg. Loosst eis en Array esou deklaréieren:

Dim Jan_Sales_Figures(1 bis 31, 1 bis 5) Als Währung

Fir Zougang zu Array Elementer Jan_Sales_Figures, Dir musst zwee Indizes benotzen, déi den Dag vum Mount an d'Kommandonummer uginn. Zum Beispill, d'Adress vun engem Element mat Ofsaz Zuelen fir 2-o op Équipen fir 15 Januar wier esou geschriwwen:

Jan_Sales_Figures(15, 2)

Am selwechte Wee kënnt Dir eng Array mat 3 oder méi Dimensiounen deklaréieren - just zousätzlech Dimensiounen un d'Array Deklaratioun addéieren a benotzt zousätzlech Indizes fir op d'Elementer vun dëser Array ze referenzéieren.

Arrays an Excel Visual Basic erklären

Virdrun an dësem Artikel hu mir scho verschidde Beispiller gekuckt fir Arrays an VBA z'erklären, awer dëst Thema verdéngt e méi no ze kucken. Wéi gewisen, kann en eendimensionalen Array esou deklaréiert ginn:

Dim Team_Members(1 bis 20) Als String

Sou eng Deklaratioun seet dem VBA Compiler datt d'Array Team_Memberen besteet aus 20 Variablen, déi bei Indizes vun 1 bis 20 zougänglech sinn. Mir kënnen awer drun denken, eis Arrayvariablen vun 0 bis 19 ze nummeréieren, an deem Fall soll d'Array esou deklaréiert ginn:

Dim Team_Members(0 bis 19) Als String

Tatsächlech, par défaut, fänkt d'Nummeréierung vun Array-Elementer vun 0 un, an an der Array-Deklaratioun kann den initialen Index guer net spezifizéiert ginn, sou:

Dim Team_Members(19) As String

De VBA Compiler wäert esou eng Entrée behandelen wéi eng Array vun 20 Elementer mat Indizes vun 0 bis 19 ze deklaréieren.

Déiselwecht Regele gëllen wann Dir multidimensional Visual Basic Arrays deklaréiert. Wéi schonn an engem vun de Beispiller gewisen, wann Dir eng zweedimensional Array deklaréiert, sinn d'Indeze vu sengen Dimensiounen duerch e Komma getrennt:

Dim Jan_Sales_Figures(1 bis 31, 1 bis 5) Als Währung

Wéi och ëmmer, wann Dir keen Startindex fir béid Dimensioune vun der Array spezifizéiert an et esou deklaréiert:

Dim Jan_Sales_Figures(31, 5) Als Währung

da gëtt dës Entrée als zweedimensional Array behandelt, déi éischt Dimensioun vun där 32 Elementer mat Indizes vun 0 bis 31 enthält, an déi zweet Dimensioun vun der Array enthält 6 Elementer mat Indizes vun 0 bis 5.

Dynamesch Arrays

All Arrays an den uewe genannte Beispiller hunn eng fix Unzuel vun Dimensiounen. Wéi och ëmmer, a ville Fäll wësse mir am Viraus net wéi eng Gréisst eis Array soll sinn. Mir kënnen aus der Situatioun erauskommen andeems mir e riesegen Array deklaréieren, d'Gréisst vun deem sécherlech méi grouss ass wéi néideg fir eis Aufgab. Awer sou eng Léisung erfuerdert vill extra Erënnerung a kann de Programm verlangsamen. Et gëtt eng besser Léisung. Mir kënnen eng dynamesch Array benotzen - dëst ass e Array deem seng Gréisst kann agestallt ginn an all Unzuel vun Mol während der Ausféierung vun engem Makro geännert ginn.

Eng dynamesch Array gëtt mat eidelen Klammeren deklaréiert, sou:

Dim Team_Members() As String

Als nächst musst Dir d'Dimensioun vun der Array deklaréieren wärend der Code Ausféierung mam Ausdrock ReDim:

ReDim Team_Members (1 bis 20)

A wann Dir während der Ausféierung vum Code musst Dir d'Gréisst vum Array erëm änneren, da kënnt Dir de ReDim Ausdrock erëm benotzen:

Wann Team_Size > 20 Dann ReDim Team_Members(1 To Team_Size) Enn Wann

Denkt drun datt d'Gréisst vun enger dynamescher Array op dës Manéier zu de Verloscht vun alle Wäerter resultéiert, déi an der Array gelagert sinn. Fir Daten schonn am Array ze späicheren, musst Dir d'Schlësselwuert benotzen Erhaalenwéi ënnendrënner steet:

Wann Team_Size > 20 Dann ReDim Preserve Team_Members (1 To Team_Size) Enn Wann

Leider de Schlësselwuert Erhaalen kann nëmme benotzt ginn fir déi iewescht Grenz vun enger Array Dimensioun z'änneren. Déi ënnescht Grenz vun engem Array kann net op dës Manéier geännert ginn. Och wann d'Array verschidde Dimensiounen huet, da benotzt de Schlësselwuert Erhaalen, nëmmen déi lescht Dimensioun vun der Array ka geännert ginn.

Hannerlooss eng Äntwert