Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Co je a jak využít pole (Array) ve VBA v Microsoft Excel
Upraveno a podstatně doplněno 6.10.2019
Co se v článku dozvíte. Aneb Pole v Excel VBA od A do Z:
Pole je indexovaná skupina nějakých dat (oddělení, roky, názvy měsíců). Tato skupina se chová jako by šlo o jednu proměnou, která má několik položek. Na jednotlivé položky se poté odkazuje pomocí indexu (pozice na jaké se hodnota v tomto poli nachází).
Pole se začíná standartně indexovat od nuly 0. Je pravda, že tohle lze změnit, ale nedoporučuji to. Udělá to více škody než užitku. Viz kapitola o Option Base.
Typy pole
Rozměry pole
Poznámka: V jazyku Visual Basic, VBA lze deklarovat pole až o 60 rozměrech. Osobně si nedokážu představit, jak s polem o 60-ti rozměrech pracovat. Případně v něm hledat chybu. Dvojrozměrná se ještě dají (trojrozměrná když už musí být také), ale vícerozměrná, osobně jsem zatím nezkoušel a zkoušet nehodlám.
Ukázka indexování dvoujrozměrného pole:
Již víme že jsou typy polí:
Dim arr() As Variant
Dim s As String
Jak na deklaraci statického pole
Dim arr(0 To 5) As Long
Dim arr(2 To 4) As Integer
Dim arr(2) As Integer
'' Pro vícerozměrná pole
Dim arr(0 To 3, 0 To 2) As String
Pokud není nastaveno jinak (Option Base) a potřebuji pole deseti hodnot, od nuly do devíti, mohu zpsat:
Dim MojePole (9) As Boolean
nebo
Dim MojePole (0 To 9) As Boolean
Pole o pevné velikosti (Integer) o 10 řádcích a 10 sloupcích:
Dim MojePole(9, 9) As Integer
nebo:
Dim MojePole(0 To 9, 0 To 9) As Integer
Máme seznam faktur za roky 2009 - 2011, můžeme si indexování pole posunout.
Dim FakturyPole (2009 To 2011) As Double
Základy o trojrozměrném poli:
Dim MojePole(0 To 9, 0 To 9, 0 to 9) As Integer
' nebo
Dim MojePole(9, 9, 9) As Integer
Více informací je v přípravě.
ReDim Preserve arr(0 To 5)
Podobně jako konstanty lze pomocí příkazů Dim, Static, Private, nebo Public nastavit platnost. Toto je popsáno v samostatném článku.
Pokud jde o jednorozměrné pole:
Debug.Print arr(0)
MsgBox (arr(0))
Pokud jde o dvojrozměrné pole:
Debug.Print arr(0, 0)
Případně mohu přečíst v cyklu (pro jednorozměrné pole):
Dim item As Integer
For Each item In arr
Debug.Print item
Next item
Případně mohu přečíst v cyklu (pro dvojrozměrné pole):
v přípravě
Zapisovat mohu po prvku a řeknu ja jakém místě se zapíše, nebo v jednom zápise, kdy jednotlivé položky jsou odděleny čádkou:
arr(0) = "Apple"
arr(1) = 22
arr = Array("Eva", "Jan", "Iva")
Pozor pokud jde o statické pole (má definovaný rozměr) nelze zapsat více prvků
Dim arr(0 To 3) As Long
arr(0) = 99 ' Zapíše do prvního
arr(4) = 99 ' Problém nelze zapsat
'' Prvek 4 je mimo rozsah 0 až 3
Pokud jde o dynamické pole
Dim arr() As Variant
arr = Array("1", "2", "3", "45")
' klidně mohu následně přepsat
arr = Array("1", "2", "3", "45", "4")
arr(0, 0) = "Prvni"
arr(0, 0, 0) = "Prvni"
Více informací jak na trojrozmšrné pole jsou v přípravě.
arr(0, 0) = "Prvni"
arr(0, 0) = "Nový prvni"
Potřebujeme-li indexovat pole od jedničky doporučuji použít kód
Dim MojePole (1 To 10) As String
Je pravda že existuje i jiná možnost v posunutí indexování a to využití Option Base
Option Base 1
Tohle uvádím jen na doplnění v případě, že se s tímto zápisem setkáte u konkurenčních VBA programů. Osobně tohle nedoporučuji.
Potřebujeteli smazat obsah pole.
Erase arr
Často se hodí vědet pozici prvního a posledního prvku v Array (poli). Na to lze využít:
LBound(arr)
Ubound(arr)
První a poslendí prvek v poli lze krásně využít pro vypis prvků:
Dim arr(0 To 5) As Long
MsgBox (LBound(arr))
MsgBox (UBound(arr))
' výpis v cyklu
For i = LBound(arr) To UBound(arr)
Debug.Print i, arr(i)
Next i
Dim s As String
s = "A,B,C,D"
Dim arr() As String
arr = Split(s, ",")
Pracujete li s poli můžete využít i funkci Watch. Menu View > Watch Windows. Pak stačí jen přes menu Debug > Add Watch přidat příslušnou proměnou. Spustit kód až po stopku
Dim Arr(1, 2) As Variant
Arr(0, 0) = "0_0"
Arr(0, 1) = "0_1"
Arr(0, 2) = "0_2"
Arr(1, 0) = "1_0"
Arr(1, 1) = "1_1"
Arr(1, 2) = "1_2"
Třeba třídění (sortování), počítání prvků, ukázky s vícerozměrnými poli, načítaní / plnění buněk, formuářů atd.
Základy k práci s Array (poli) ve VBA Microsoft Excel, jsem probral, na případné typy jak vylepšit o co doplnit prosím využít komentáře.
Článek byl aktualizován: 19.09.2020 11:07
Pomohl vám článek? Vyřešili jste problém? Můžete mě podpořit zakoupení tabulky (samozdřejmě čokoládové), když kafe nepiji ;) Odkaz na zakoupení čokolády. Za veškerou podporu vám děkuji a samozdřejmě jí využiji do zdokonalování a rozšířování webu.
Případně přidejte odkaz na vaši oblíbenou sociální síť, případně využijste hashtag #JakNaExcel .
Děkuji za váš čas a doufám, že jste nalezli odpověď na svůj problém.
Narazili jste v článku na nejasnost, chybu? Máte tip na vylepšení nebo doplnění článku? Budu rád pokud se zmínite v komentářích.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od dubna roku 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím 8x za sebou). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 20 let (o Excel píší přes 25). Zdarma je zde přes 1.500 návodu, tipů a triků, včetně přes 350 různých šablon, sešitů a přes 70 taháků v pdf.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2025 |