VBA ReDim | Zacházejte s dynamickými poli pomocí VBA ReDim Preserve

Prohlášení Excel VBA ReDim

Příkaz VBA Redim je podobný příkazu dim, ale rozdíl je v tom, že se používá k ukládání nebo přidělení více úložného prostoru nebo ke zmenšení úložného prostoru, který má proměnná nebo pole, nyní existují dva důležité aspekty používané s příkazem Zachovat, pokud se s tímto příkazem použije zachování, vytvoří se nové pole s jinou velikostí a pokud se s tímto příkazem nepoužívá zachování, pak se pouze změní velikost pole aktuální proměnné.

Pole jsou důležitou součástí kódování VBA. Pomocí polí můžeme uložit více než jednu hodnotu do stejné proměnné, kterou jsme definovali. Podobně jako deklarujeme proměnnou pomocí slova „Dim“, musíme také deklarovat název pole pomocí „Dim“.

Abychom mohli deklarovat název pole, musíme nejprve určit druh pole, které budeme definovat. V polích máme 5 typů.

  1. Statické pole
  2. Dynamické pole
  3. Jedno dimenzionální pole
  4. Dvourozměrné pole
  5. Vícedimenzionální pole

Ve statickém poli v aplikaci Excel rozhodneme o dolní hodnotě a horní hodnotě pole s dostatečným předstihem při deklaraci proměnné. Podívejte se například na níže uvedený příklad.

Kód:

 Sub ReDim_Example1 () Dim MyArray (1 až 5) jako řetězec End Sub 

Zde MyArray je název pole, které může obsahovat hodnotu od 1 do 5. MyArray může obsahovat 5 různých výsledků, jako je níže uvedený.

Kód:

 Sub ReDim_Example1 () Dim MyArray (1 až 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "Nice Day" End Sub 

Dynamické pole s příkazem ReDim

Ale v dynamickém poli to tak není, nebudeme rozhodovat o dolní hodnotě a horní hodnotě v dostatečném předstihu, spíše jen definujeme název pole a přiřadíme datový typ.

 Sub ReDim_Example1 () Dim MyArray () jako řetězec End Sub 

Aby byl název pole dynamický, musíme jej nejprve deklarovat slovem „Dim“, ale nerozhodovat o velikosti pole s dostatečným předstihem. Prostě pojmenujeme pole s prázdnými hodnotami uvnitř závorky (). Pokud pole nezahrnuje velikost, je považováno za dynamické pole.

Dim MyArray () jako řetězec

V okamžiku, kdy zmíníte velikost pole uvnitř závorky, stane se statickým polem. Dim MyArray (1 až 5) jako řetězec

V dynamickém poli vždy změníme velikost pole pomocí slova „ReDim“ v dalším řádku kódu.

ReDim MyArray (1 až 6) jako řetězec

Jakákoli hodnota uložená k názvu pole v předchozích krocích, tj. Pomocí příkazu „Dim“, má hodnotu null a velikost, kterou jsme deklarovali pomocí „ReDim“, se stane novou velikostí pole.

Příklady použití prohlášení VBA Redim

Tuto šablonu VBA ReDim Excel si můžete stáhnout zde - Šablona VBA ReDim Excel

Příklad č. 1

Podívejte se na příklad praktického použití příkazu „ReDim“. Chcete-li použít aplikaci „ReDim“, postupujte podle následujících kroků.

Krok 1: Nejprve vytvořte název makra.

Krok 2: Deklarujte název pole jako řetězec.

Kód:

 Sub ReDim_Example1 () Dim MyArray () jako řetězec End Sub 

Krok 3: Nyní použijte slovo „Redim“ a přiřaďte velikost pole.

Kód:

 Sub ReDim_Example1 () Dim MyArray () jako řetězec ReDim MyArray (1 až 3) End Sub 

Krok 4: Název pole „MyArray“ tedy nyní může obsahovat až 3 hodnoty. Přiřaďte hodnotu těmto 3 polím, jako je dole.

Kód:

 Sub ReDim_Example1 () Dim MyArray () jako řetězec ReDim MyArray (1 až 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" End Sub 

První pole se tedy rovná slovu „Vítejte“, druhé pole se rovná slovu „to“ a třetí pole se rovná slovu „VBA“.

Krok 5: Nyní uložte tyto hodnoty pole do buněk.

Kód:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" Range ("A1"). Value = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Krok 6: Pokud spustíte tento kód, měli bychom mít tyto hodnoty v buňce A1, B1 a C1.

Příklad č. 2 - Změna velikosti pole při zapamatování starých hodnot.

Jakmile jsou názvu pole přiřazeny hodnoty, můžeme také kdykoli změnit velikost procedury pomocí slova „ReDim Preserve“.

Předpokládejme, že jste již deklarovali název pole a přiřadili hodnoty k tomuto názvu pole, jako je níže uvedený.

Nyní byste chtěli zvětšit délku pole o 2, tj. 5. V tomto případě můžeme použít slovo VBA „ReDim Preserve“ pro změnu velikosti délky pole, abychom si také pamatovali staré hodnoty.

Kód:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Znak 1" Rozsah ("A1"). Hodnota = MyArray (1) Rozsah ("B1"). Hodnota = MyArray (2) Rozsah ("C1"). Hodnota = MyArray (3) Rozsah ("D1"). Hodnota = MyArray (4) End Sub 

Nyní můžeme matici přiřadit další dvě hodnoty.

Kód:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Znak 1" Rozsah ("A1"). Hodnota = MyArray (1) Rozsah ("B1"). Hodnota = MyArray (2) Rozsah ("C1"). Hodnota = MyArray (3) Rozsah ("D1"). Hodnota = MyArray (4) End Sub 

Nyní tyto hodnoty uložte do buněk.

Kód:

 Sub ReDim_Example2 () Dim MyArray () As String ReDim MyArray (3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = "Znak 1" Rozsah ("A1"). Hodnota = MyArray (1) Rozsah ("B1"). Hodnota = MyArray (2) Rozsah ("C1"). Hodnota = MyArray (3) Rozsah ("D1"). Hodnota = MyArray (4) End Sub 

Nyní spusťte makro a uvidíte, co se stane

Takže jsme dostali nové slovo do buňky D1.

Důvod, proč musíme použít slovo „zachovat“, protože pole by si mělo pamatovat staré hodnoty pole v proceduře.

V okamžiku, kdy ignorujete slovo „zachovat“, nebude si pamatovat staré hodnoty.

Na co si pamatovat zde

  • ReDim může obsahovat pouze poslední hodnotu pole, ne mnoho hodnot. Například nemůžeme použít tento kód „ReDim Preserve MyArray (4 až 5)“, to způsobí chybu.
  • Nemůžeme ReDim statická pole. V okamžiku, kdy přiřadíte velikost pole uvnitř závorky, stane se statickým polem.
  • Pomocí ReDim nemůžeme změnit datový typ. Pole může obsahovat jakýkoli datový typ, který jsme přiřadili při deklaraci pole.

$config[zx-auto] not found$config[zx-overlay] not found