Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-teorie-zaklady » excel-vba-pole

Array - Pole ve VBA Excel

Videokurzy Excel

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

Obsah kapitoly

Co se v článku dozvíte. Aneb Pole v Excel VBA od A do Z:

Úvodem co je pole (Array)

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

  • Statické - je přesně daná velikost pole
  • Dynamické - Velikost pole se definuje až při vložení dat

Rozměry pole

  • Jednorozměrné
  • Více rozměrné - dvojrozměrné

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.

Indexování pole

Ukázka indexování dvoujrozměrného pole:

Jak na pole Array ukázka indexování

Deklarace polí v Array

Již víme že jsou typy polí:

Dynamické

Dim arr() As Variant Dim s As String

Statické

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

Tip

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

Tip2 Pole - příklad

Máme seznam faktur za roky 2009 - 2011, můžeme si indexování pole posunout.

Dim FakturyPole (2009 To 2011) As Double

Trojrozměrné pole

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ě.

Změna rozměru pole

ReDim Preserve arr(0 To 5)

Platnost

Podobně jako konstanty lze pomocí příkazů Dim, Static, Private, nebo Public nastavit platnost. Toto je popsáno v samostatném článku.

Přečíst hodnotu z pole - Array

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ě

Zapsat hodnotu do pole - Array

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")

Dvojrozměrné pole zápis

arr(0, 0) = "Prvni"

Trojrozměrné pole zápis

arr(0, 0, 0) = "Prvni"

Více informací jak na trojrozmšrné pole jsou v přípravě.

Upravit hodnotu v poli - Array

arr(0, 0) = "Prvni" arr(0, 0) = "Nový prvni"

Posunutí indexování Option Base

Potřebujeme-li indexovat pole od jedničky doporučuji použít kód

Dim MojePole (1 To 10) As String

Option Base

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.

Smazat pole

Potřebujeteli smazat obsah pole.

Erase arr

První a poslední prvek

Často se hodí vědet pozici prvního a posledního prvku v Array (poli). Na to lze využít:

LBound(arr) Ubound(arr)

Praktický příklad

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

Velikost vícerozměrných polí

' vícerozměrné pole počet položek LBound(arr, 2) Ubound(arr,2)

Využití Split pro plnění pole

Dim s As String s = "A,B,C,D" Dim arr() As String arr = Split(s, ",")

Monitoring přes Watch

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" Jak na pole Array využitím Watch

Další informace v přípravě

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ávěrem

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

Podpora - oceňte web a pozvěte mě na čokoládu

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 .

Poděkování

Děkuji za váš čas a doufám, že jste nalezli odpověď na svůj problém.

Vylepšení

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.


Pavel Lasák - autor webu

Pavel Lasák

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.

   Pavel Lasák LinkedIn Profil    Pavel Lasák twitter Profil





Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 |