Pole jinak ArrayList ve VBA

Podobné dokumenty
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základní datové struktury

Kolekce, cyklus foreach

Datové typy a struktury

Da D to t v o é v ty t py IB111: Datové typy

Datové struktury. alg12 1

MS Excel makra a VBA

Parsování HTML. Pro účely testování jsem vytvořil stránku parsovani.html. Zdrojový kód:

Tabulka obsluhovaná kódem VBA

Pole a kolekce. v C#, Javě a C++

Programování v Pythonu

Lineární datové struktury

Dynamické datové struktury I.

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Konstruktory a destruktory

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Maturitní téma: Programovací jazyk JAVA

Algoritmizace prostorových úloh

ADT/ADS = abstraktní datové typy / struktury

Programujeme v softwaru Statistica

Prioritní fronta, halda

bfs, dfs, fronta, zásobník

Algoritmizace prostorových úloh

Jako skript se nabízí BAT soubory, VBScript či PowerShell. Zpracovány jsou druhé dva.

Maturitní otázky z předmětu PROGRAMOVÁNÍ

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Spojování textových řetězců na listu

Odstranění řádků (na základě hodnoty)

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Jak vložit obrázek do oblasti buněk

Abstraktní datové typy: zásobník

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

DUM 06 téma: Tvorba makra pomocí VBA

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Nápověda Excelu k tématu řazení stojí za starou bačkoru. Velmi strohé informace jsem našel na stránce SharePointu a Excel Services.

Více o konstruktorech a destruktorech

Programování v C++ 2, 4. cvičení

Abstraktní datové typy FRONTA

9. přednáška - třídy, objekty

Úvod do programovacích jazyků (Java)

Lineární datové struktury

Jazyk C# a platforma.net

Simulace. Martin Pergel

boolean hasnext() Object next() void remove() Kolekce

Lineární spojový seznam (úvod do dynamických datových struktur)

IRAE 07/08 Přednáška č. 7. Začátek (head)

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

MsgBox, InputBox, FileDialog, Pravomoci vlastních funkcí (UDF) Function TESTOVKA() 'dialog (MsgBox) TESTOVKA = MsgBox("Baf!

Šablony, kontejnery a iterátory

Odstavení automatického zpracování hypertextových odkazů

Zadání k 2. programovacímu testu

Zásobník (LIFO) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven)

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Šablony, kontejnery a iterátory

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

JAK PROPOJIT R-KO a EXCEL aneb Aby se uživatel nasytil a statistik zůstal celý

8 Makra Příklad 4 Excel 2007

Vytvoření.NET komponenty (DLL) ve Visual Studiu

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Jazyk C++ II. STL knihovna kontejnery část 2

MAXScript výukový kurz

8 Třídy, objekty, metody, předávání argumentů metod

Jak na propojení Excelu s Outlookem

Test z programování v jazyce VBA v rámci předmětu Počítače II Vzorová zadání a vypracování

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Generátor list nastavení

vyhledávací stromové struktury

Algoritmizace a programování

OBSAH Úvod do VBA... 6 K čemu VBA... 6 Když VBA nestačí... 6 Historie Visual Basicu... 7 Objektový model, vlastnosti, metody, události a funkce...

I. Dalšívnitřní paměti

Dynamické datové struktury III.

Standardní šířka sloupce je průměrná šířka číslic 0-9 standardního písma.

Sada 1 - Základy programování

Tematický celek Práce ze soubory. 5.2 Objektový model FSO. - slouží pro ukládání záznamů, - každý ze záznamů obsahu jedno nebo více polí.

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...

3MA481 Propojení Accessu a Excelu David Hach

Hromadná změna datumu a času v buňkách

Přijímací zkouška - informatika

Anotace. Pointery, dynamické proměnné

Generické programování

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

VBA: VYTVOŘENÍ OBJEKTU GRAF (CHART) Deklarace proměnné typu Chart. Pro vytvoření nového grafu použijeme kolekci ChartObjects a její metodu Add.

Stromy. Jan Hnilica Počítačové modelování 14

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

10 Algoritmizace Příklad 2 Word 2007/ VBA

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

CZ.1.07/1.5.00/

Tematický celek 03 - Cvičné příklady

Příloha 6. Palety nástrojů

EndNote Web. Stručné informace THOMSON SCIENTIFIC

DoplněkCite While You Write pro aplikaci Microsoft Word

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Transkript:

ArrayList představuje třídu.net Frameworku (System.Collections.Arraylist, knihovna mscorlib). Dokáže to, co musíme jinak horko těžko při práci s prostým polem ve VBA programovat třídění, přidávání a odebírání položek, test existence položky, spojování polí aj. Vtip je v tom, že s jistými omezeními je třída ArrayList dostupná i pod VBA. Musím přiznat, že na tuto skutečnost jsem narazil poprvé cca před rokem a půl. Žádná další teorie nás nečeká, pojďme si zkusit pár příkladů. Pozn. Doporučuji kód nekrokovat, ale spouštět až do místa vložené záložky. I tak budete muset leckdy pro zobrazení skutečného obsahu proměnné v okně Locals ji sbalit a znovu rozbalit. Sub ProceduraArrayList() Dim objarray Dim objarraylist1 Dim objarraylist2 Dim objarraylist3 Dim objarraylist4 Dim objarraylist5 Set objarraylist1 = CreateObject("System.Collections.ArrayList") Set objarraylist2 = CreateObject("System.Collections.ArrayList") Set objarraylist3 = CreateObject("System.Collections.ArrayList") Set objarraylist4 = CreateObject("System.Collections.ArrayList") Set objarraylist5 = CreateObject("System.Collections.ArrayList") Dim intindex As Integer Dim intpocetpolozek As Integer Dim blnpolozkaexistuje As Boolean 'plnění pole 1 With objarraylist1.add ("žirafa").add ("čížek").add ("motýl") 'plnění pole 2 With objarraylist2.add ("pěnkava").add ("chobotnice") Excelplus.NET 1

'plnění pole 3 With objarraylist3.add ("výr").add ("mravenec") 'přidání jednoho pole na konec druhého 'závorky nutné objarraylist1.addrange (objarraylist2) 'vložení jednoho pole do druhého na pozici 'závorky nutné objarraylist1.insertrange 1, (objarraylist3) 'přepsání položek jednoho pole druhým 'závorky nutné objarraylist1.setrange 1, (objarraylist2) 'odstranění části pole (2 položky od indexu 1) objarraylist1.removerange 1, 2 'přidání položky za n-tou položku '0... počátek objarraylist1.insert 1, "tučňák" 'test existence položky blnpolozkaexistuje = objarraylist1.contains("tučňák") 'index hledané položky s definováním 'počátku vyhledávání intindex = objarraylist1.indexof("tučňák", ) 'odstranění položky dle jména Excelplus.NET 2

objarraylist1.remove ("tučňák") 'odstranění položky dle indexu 'indexy položek 0, 1,... 'objarraylist1.removeat 1 'vzestupné setřídění položek objarraylist1.sort 'výpis položek do okna Immediate Debug.Print Join(objArrayList1.ToArray(), vblf) 'počet položek intpocetpolozek = objarraylist1.count 'přizpůsobení velikosti naplněným položkám 'objarraylist1.trimtosize 'revers pole objarraylist3.reverse 'kopie ArrayList do obyčejného pole objarray = objarraylist3.toarray() 'převzetí části pole Set objarraylist4 = objarraylist1.getrange(1, 2) 'klonování pole Set objarraylist5 = objarraylist3.clone 'vyčištění pole objarraylist1.clear 'odstranění proměnných z paměti Set objarraylist1 = Nothing Set objarraylist2 = Nothing Set objarraylist3 = Nothing Excelplus.NET 3

Set objarraylist4 = Nothing Set objarraylist5 = Nothing Největší problémy mi dělaly metody SetRange a InsertRange. Podotýkám, že práce s objektovými proměnnými pod VBA vyžaduje příkaz Set, navíc VBA prapodivně pracuje se závorkami u volání. Pokud se pamatuji, prvně jsem ArrayList využil při třídění položek. Metoda Sort vrací korektnější výsledky, než třeba vlastní procedura (technika řazení) QuickSort. Na ukázku: čížek chobotnice motýl pěnkava žirafa Na knihovnu mscorlib.dll je možné se napojit i přes reference a pak není potřeba metody CreateObject. Doporučuji do knihovny nahlédnout přes Object Browser (F2). Sub KnihovnaMSCORLIB() 'Tools / References / mscorlib.dll Dim objarraylist As New ArrayList 'plnění pole 1 With objarraylist.add ("žirafa").add ("čížek").add ("motýl") Co se mi bohužel nepodařilo zrealizovat, je vytvoření pole s opakováním položek, např. Set objarraylist = ArrayList.Repeat( abc, 7) Je velká škoda, že ArrayList se neumí přímo zbavit duplicit. Museli bychom si zkombinovat metodu Contains třeba s GetRange nebo použít jiné objekty (HashSet). Ve VBA už kdysi pro tyto účely navrhl Excelplus.NET 4

John Walkenbach datový typ vypůjčený z VBScriptu, a to Dictionary (neumožňuje přidání již existující položky v metodě Add). Je-li potřeba v polích pracovat s klíčem a hodnotou, nezapomínejte ani na přímo ve VBA dostupný objekt Collection. V knihovně se lze odvolávat na některé další třídy (System.Collections.Hashtable, System.Collections.SortedList). My se podíváme na zásobník (zbraně), neboli stack a frontu (na poště), čili queue, známé to typy z algoritmů. Sub ProceduraStack() Dim objstack 'zásobník, také jinak LIFO 'tj. Last In First Out (poslední dovnitř, první ven) Set objstack = CreateObject("System.Collections.Stack") 'plnění zásobníku With objstack.push ("1. náboj").push ("2. náboj").push ("3. náboj") 'vystřelení 3. náboje 'tj. naposled přidané položky MsgBox objstack.pop 'vystřelení 2. náboje MsgBox objstack.pop 'je v zásobníku 1. náboj? MsgBox objstack.contains("1. náboj") 'odstranění proměnné z paměti Set objstack = Nothing Sub ProceduraQueue() Excelplus.NET 5

Dim objqueue 'fronta, také jinak FIFO 'tj. First In First Out (první dovnitř, první ven) Set objqueue = CreateObject("System.Collections.Queue") 'plnění fronty With objqueue.enqueue ("1. člověk").enqueue ("2. člověk").enqueue ("3. člověk") 'odchod 1. člověka 'tj. odebrání první (nejstarší) přidané položky MsgBox objqueue.dequeue 'odchod 2. člověka MsgBox objqueue.dequeue 'kdo je na řadě? MsgBox objqueue.peek 'odstranění proměnné z paměti Set objqueue = Nothing Příloha pole_arraylist.zip Excelplus.NET 6