Dynamické pole

Pole slouží k seskupování hodnot stejného datového typu. Svým charakterem je podobný maticím.

Pole skupina položek stejného typu, které navenek vystupují pod jediným jménem. K jednotlivým položkám přistupujeme pomocí indexů, které určují polohu prvku v poli. Podle toho, kolik indexů určuje jednotlivé položky pole, pak toto pole označujeme jako jedno či vícerozměrné.

Statické pole je takové pole, u něhož definujeme alespoň jednu z mezí. Takto definované meze se už v programu nemohou později změnit.

Statické pole má jednu nevýhodu, rezervuje paměťový prostor i v případě, že není pole naplněné. Proto pokud v okamžiku deklarace není znám rozsah pole bývá lepší použít dynamické pole.
Dynamická pole se deklaruje bez uvedení mezí. Meze se stanoví v průběhu programu, nejpozději však před prvním použitím pole.

Dynamické pole se deklaruje zápisem bez uvedení mezí:

Dim pole() As Long

A konkrétní místo v paměti se mu vymezí až při provedení příkazu:

ReDim pole1 (1 to n)

To musí být až v místě, kde je již známá hodnota proměnné n. Tento příkaz pole současně vynuluje.

Př. Vytvoř program, který si načte N čísel a zobrazí je v opačném pořadí.

Sub obracene() 
Dim cisla() As Double
Dim obracene As String
Dim i As Integer, n as Integer

n= Val(InputBox("Zadej počet čísel."))
ReDim cisla(1 to n)

For i = 1 To n
    cisla(i) = InputBox("zadej číslo")
Next i

For i = 1 To n
    obracene = cisla(i) & "; "& obracene 
Next i

MsgBox (obracene)
End Sub

ReDim Preserve

Pokud chceme již naplněné buňky zachovat, použijeme parametr Preserve. ReDim Preserve Pole1 (1 To k). Můžeme však měnit jen hodnotu horní hranice pole, jinak dojde k chybě.
Tento příkaz použijeme pokud se o rozsahu pole rozhoduje až během načítání hodnot pole.

Př. Vytvoř program, který bude načítat čísla, pokud bude zadaná 0 načítání se ukončí. Čísla se zobrazí v opačném pořadí.

Sub obracene() 
Dim cisla() As Double
Dim obracene As String
Dim i As Integer,i2 as Integer

Do
     i = i + 1
     ReDim Preserve cisla(1 to i)
     cisla(i) = InputBox("zadej číslo")
Loop Until cisla(i) = 0

For i2 = 1 To i
    obracene = cisla(i2) & "; "& obracene 
Next i

MsgBox (obracene)
End Sub

Funkce pro zjizjišťování dolní a horní meze pole

Funkce LBound(pole), zjistí nejnižší index prvku pole.
Funkce UBound(pole), zjistí nejvyšší index prvku pole.
Tyto funkce se používají zejména pro procházení už vytvořeným a naplněným polem.

Př. Vytvoř program, který si načte N čísel a zobrazí je v opačném pořadí.

Sub obracene() 
Dim cisla() As Double
Dim obracene As String
Dim i As Integer, n as Integer

n= Val(InputBox("Zadej počet čísel."))
ReDim cisla(1 to n)

For i = 1 To n
    cisla(i) = InputBox("zadej číslo")
Next i

For i = LBound(cisla) To UBound(cisla)
    obracene = cisla(i) & "; "& obracene 
Next i

MsgBox (obracene)
End Sub