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

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). 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 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Ondřej

Přidáno: 05.02.15 17:39

Dobrý den, při začátku práce s polem jsem hned narazil na problém. Při proceduře mi vyběhne chybove hlaseni run-time error 9- subscript out of range na řádkujmeno_zamestnance(i) = TextBox1.Text Private Sub CommandButton1_Click() Dim i As Integer Dim jmeno_zamestnance() As String i = 0 i = i + 1 jmeno_zamestnance(i) = TextBox1.Text ListBox1.AddItem (jmeno_zamestnance(i)) TextBox1.Text = "" End Sub

Jojo

Přidáno: 06.02.15 08:54

To Ondřej: -- Private Sub CommandButton1_Click() Dim i As Integer Dim jmeno_zamestnance() As String i = 1 ReDim jmeno_zamestnance(i) jmeno_zamestnance(i) = TextBox1.Text ListBox1.AddItem (jmeno_zamestnance(i)) TextBox1.Text = "" End Sub







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 - 2021 |