Pole ve Visual Basic for Application

Pole ve Visual Basic for Application jsou struktury, které obvykle ukládají sady souvisejících proměnných stejného typu. Položky pole jsou přístupné podle jejich číselného indexu.

Existuje například tým 20 lidí, jejichž jména je třeba uložit pro pozdější použití v kódu VBA. Dalo by se jednoduše deklarovat 20 proměnných, které by obsahovaly každé jméno, takto:

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

Můžete však použít mnohem jednodušší a organizovanější způsob – uložit seznam jmen členů týmu do pole 20 proměnných, jako je Řetězec:

Dim Team_Members(1 až 20) jako řetězec

Ve výše uvedeném řádku jsme deklarovali pole. Nyní zapišme hodnotu pro každý z jeho prvků, například takto:

Team_Members(1) = "John Smith"

Další výhoda ukládání dat do pole ve srovnání s použitím samostatných proměnných se projeví, když je nutné provést stejnou akci na každém prvku pole. Pokud by jména členů týmu byla uložena ve 20 samostatných proměnných, pak by bylo potřeba pokaždé napsat 20 řádků kódu, aby se s každou z nich provedla stejná akce. Pokud jsou však názvy uloženy v poli, můžete s každým z nich provést požadovanou akci pomocí jednoduché smyčky.

Jak to funguje, je ukázáno níže na příkladu kódu, který vytiskne jména jednotlivých členů týmu postupně do buněk sloupců. A aktivní excelový list.

Pro i = 1 až 20 buněk (i,1). Hodnota = Členové_týmu(i) Další i

Je zřejmé, že práce s polem, které ukládá 20 jmen, je mnohem méně těžkopádné a přesnější než použití 20 samostatných proměnných. Ale co když těchto jmen není 20, ale 1000? A pokud je navíc požadováno ponechat odděleně příjmení a patronyma?! Je jasné, že zvládnout takový objem dat v kódu VBA bez pomoci pole bude brzy zcela nemožné.

Vícerozměrná pole v Excelu Visual Basic

Výše popsaná pole jazyka Visual Basic jsou považována za jednorozměrná. To znamená, že ukládají jednoduchý seznam jmen. Pole však mohou mít více rozměrů. Například dvourozměrné pole lze porovnat s mřížkou hodnot.

Řekněme, že chcete uložit údaje o denním prodeji za leden pro 5 různých týmů. To bude vyžadovat dvourozměrné pole skládající se z 5 sad metrik na 31 dní. Pojďme deklarovat pole takto:

Dim Jan_Sales_Figures (1 až 31, 1 až 5) jako měna

Pro přístup k prvkům pole Jan_Sales_Figures, musíte použít dva indexy označující den v měsíci a číslo příkazu. Například adresa prvku obsahujícího prodejní čísla pro 2-oh týmy pro 15 tis Leden by se psal takto:

Jan_Sales_Figures(15, 2)

Stejným způsobem můžete deklarovat pole se 3 nebo více rozměry – stačí do deklarace pole přidat další rozměry a pomocí dalších indexů odkazovat na prvky tohoto pole.

Deklarace polí v Excelu Visual Basic

Dříve v tomto článku jsme se již podívali na několik příkladů deklarování polí ve VBA, ale toto téma si zaslouží bližší pohled. Jak je znázorněno, jednorozměrné pole lze deklarovat takto:

Dim Team_Members(1 až 20) jako řetězec

Taková deklarace říká kompilátoru VBA, že pole Členové týmu sestává z 20 proměnných, ke kterým lze přistupovat na indexech od 1 do 20. Můžeme však uvažovat o číslování našich proměnných pole od 0 do 19, v takovém případě by pole mělo být deklarováno takto:

Dim Team_Members(0 až 19) jako řetězec

Ve výchozím nastavení začíná číslování prvků pole od 0 a v deklaraci pole nemusí být počáteční index vůbec zadán, například takto:

Dim Team_Members(19) Jako řetězec

Kompilátor VBA bude takový záznam považovat za deklaraci pole 20 prvků s indexy od 0 do 19.

Stejná pravidla platí při deklarování vícerozměrných polí jazyka Visual Basic. Jak již bylo ukázáno v jednom z příkladů, při deklaraci dvourozměrného pole jsou indexy jeho rozměrů odděleny čárkou:

Dim Jan_Sales_Figures (1 až 31, 1 až 5) jako měna

Pokud však nezadáte počáteční index pro oba rozměry pole a deklarujete jej takto:

Dim Jan_Sales_Figures(31, 5) Jako měna

pak bude tento záznam považován za dvourozměrné pole, jehož první rozměr obsahuje 32 prvků s indexy od 0 do 31 a druhý rozměr pole obsahuje 6 prvků s indexy od 0 do 5.

Dynamická pole

Všechna pole ve výše uvedených příkladech mají pevný počet rozměrů. V mnoha případech však předem nevíme, jakou velikost by naše pole mělo mít. Ze situace se můžeme dostat deklarováním obrovského pole, jehož velikost bude jistě větší, než je pro náš úkol nutné. Ale takové řešení bude vyžadovat spoustu paměti navíc a může zpomalit program. Existuje lepší řešení. Můžeme použít dynamické pole – to je pole, jehož velikost lze během provádění makra libovolně nastavovat a měnit.

Dynamické pole je deklarováno s prázdnými závorkami, jako je toto:

Dim Team_Members() jako řetězec

Dále budete muset deklarovat dimenzi pole během provádění kódu pomocí výrazu ReDim:

ReDim Team_Members (1 až 20)

A pokud během provádění kódu potřebujete znovu změnit velikost pole, můžete znovu použít výraz ReDim:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Mějte na paměti, že změna velikosti dynamického pole tímto způsobem povede ke ztrátě všech hodnot uložených v poli. Chcete-li uložit data již do pole, musíte použít klíčové slovo Zachovatjak je uvedeno níže:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

Bohužel klíčové slovo Zachovat lze použít pouze ke změně horní hranice dimenze pole. Dolní mez pole nelze tímto způsobem změnit. Pokud má pole více rozměrů, pak pomocí klíčového slova Zachovat, lze změnit velikost pouze posledního rozměru pole.

Napsat komentář