Ahhoz, hogy profi makrókat írjunk az Excelben és ezáltal majd automatizálni tudjunk, szükséges megnéznünk még egy fontos programozási fogalmat. Ez pedig a tömb.
– Plusz infó –
A számítástudományban a tömb (angolul array) olyan adatszerkezet, amelyet nevesített elemek csoportja alkot, melyekre sorszámukkal (indexükkel) lehet hivatkozni. Vektornak is nevezik, ha egydimenziós, mátrixnak esetenként, ha többdimenziós. A legtöbb programozási nyelvben minden egyes elemnek azonos adattípusa van és a tömb folytonosan helyezkedik el a számítógép memóriájában.
Forrás: Wikipédia
Képzeljünk el egy szekrényt, aminek a példa kedvéért mondjuk 6 polca van. Mindegyik polcon tárolunk valamit:
Ha én azt mondom, hogy 5. polc, vagy másképp megfogalmazva polc(5), akkor te tudni fogod, hogy a telefont értem alatta. De ha azt mondom, hogy a 2. polc, vagy polc(2), akkor pedig a kisautóra gondolok.
A tömbök segítenek nekünk egyszerre több elemmel dolgozni. Nem kell mindenre külön változót írni, mert létrehozunk egy tömböt és belerakunk mindent.
Arra viszont figyelni kell, hogy egy tömbben csak azonos típusú elemek lehetnek. Azaz nem lehet az, hogy az „1. polcon” egy Integer van, a másodikon pedig egy String. (Persze egy számot szövegként is lehet tárolni, de akkor elveszti szám jellegét, nem fogsz tudni vele műveleteket végrehajtani.)
A tömb felépítése
Ahhoz, hogy tömbbel dolgozzunk ugyanúgy szükséges deklaráni azt, mint egy sima változót. Ez így néz ki:
Dim polc(1 To 6) As String
Azaz a változóknál már megtanult Dim, majd a tömbünk neve, amit zárójelben követ két szám, köztük egy To. Ez nagyon leegyszerűsítve, azt jelenti, hogy hány eleme legyen a tömbünknek. Azonban, mivel szinte minden esetben 1-es lesz az első szám, így rövidíteni is lehet, oly módon, hogy csak az utolsó számot írjuk le zárójelben, azaz ténylegesen azt a számot, hogy hány eleme legyen a tömbnek. Azaz jelen esetben ez a két kifejezés megegyezik egymással: (1 To 6) = font color=”#68b42e”>(6)
A sor végén pedig egy As szócska után meghatározzuk a tömb típusát, úgy mint egy változót. Vagyis milyen típusú adatok legyenek a tömbben.
Tömb elemeinek meghatározása
Ha definiáltuk a tömbünket, akkor adjunk értékeket is a tömb egyes elemeinek. Ezt teljesen olyan, mint egy változónál, azzal a különbséggel, hogy a tömb neve után zárójelben odaírjuk az index számát, azaz, hogy éppen melyik „polcra” akarunk tenni értéket.
polc(1) = „Alma”
A teljes kódunk így néz ki:
Sub Makró1() Dim Polc(1 To 6) As String Polc(1) = "Alma" Polc(2) = "Kisautó" Polc(3) = "Ceruza" Polc(4) = "Könyv" Polc(5) = "Telefon" Polc(6) = "Kulcs" 'Írjuk ki párbeszédablakba a Tömb 4. elemét: MsgBox Polc(4) End Sub
Oké, ez eddig nem túl bonyolult. Ezért csavarjunk egyet.
A tömbök index számát természetesen lehet helyettesíteni változóval is.
Sub Makró1() 'Létrehozom a tömbömet Dim Polc(1 To 6) As String 'Létrehozok egy új változót ami a tömb index számait fogja jelölni Dim Polc_szama As Integer 'Példa kedvéért most az 1-es számot adom neki Polc_szama = 1 'Behelyettesítem a változót, és így adok értéket a tömb 1. elemének Polc(Polc_szama) = "Alma" 'Kiírom a tömb első elemét: MsgBox Polc(Polc_szama) End Sub
Nézzünk egy másik példát.
Legyenek számok a tömb értékek. És adjuk össze két tömb 2. elemeit.
Sub Makró1() 'Létrehozok két tömböt Dim Tomb1(1 To 3) As Integer Dim Tomb2(1 To 3) As Integer 'Értéket adok mindkét tömb 2. elemének Tomb1(2) = 120 Tomb2(2) = 500 'Összeadom mindkét tömb második elemét és kiíratom MsgBox Tomb1(2) + Tomb2(2) End Sub
Tudunk az értékeivel műveleteket végrehajtani, tudjuk az egyes elemeit változóként kezelni. Innentől már csak egy lépés, hogy összekössük egy ciklussal. Ezt a gyakorlati részben meg is mutatom.
Gyakorlati feladat
1. „A” oszlopba, A1-től A10-ig vegyünk fel számokat!
2. Feladatunk, hogy egy gomb megnyomására, ezen számok kétszeresét felvegyük egy 10 elemű tömbbe. Tehát a tömb első eleme az A1 értékének duplája legyen, az utolsó eleme pedig a A10 duplája.
3. Ha az elemeket felvettük a tömbbe, írjuk ki egy párbeszédablakba, hogy „Sikeresen betettük a tömbbe”.
4. Ezután a tömb elemeit írjuk ki a „B” oszlopba. Azaz tömb első eleme legyen a B1, utolsó pedig a B10.
Használjunk benne ciklust!
A kód:
Sub Makró1() 'Létrehozzuk a tömbünket Dim tomb(10) As Integer 'Egy ciklus segítségével végigmegyünk a tömbünkön és a szükséges cellákon For i = 1 To 10 'A1-től A10-ig betesszük a tömb megfelelő helyére az aktuális cella értékének dupláját tomb(i) = Cells(i, 1).Value * 2 Next 'Kiírjuk, hogy a tömbben vannak már az értékek MsgBox "Sikeresen betettük a tömbbe" 'Egy másik ciklusban a tömbből visszaírjuk a B oszlopba az értékeket For j = 1 To 10 Cells(j, 2).Value = tomb(j) Next End Sub
Összefoglalás:
– Megtanultuk, mik azok a tömbök
– Létre tudjuk hozni azokat, tudunk értéket adni az egyes elemeinek
– Tudunk a tömb elemeivel műveleteket végrehajtani