Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK 4. előadás Barna Róbert KE GTK Informatika Tanszék
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök A tömb azonos típusú konstansok vagy változók rendezett sorozata. Az egydimenziós tömb elemei egy sorozatot alkotnak. A kétdimenziós (2D) elemei táblázatban (sorokban és oszlopokban) helyezkednek el. A háromdimenziós (3D) tömböt úgy képzelhetjük el, mint lapokból álló kartotékrendszert, amelyben minden lap egy kétdimenziós táblázatot tartalmaz és a lapokat egymás után soroljuk. Pénzügyi feladatok VBA támogatása – 4. előadás 3 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök Háromnál több dimenziós tömböket meglehetősen nehéz kezelni, mert csak részeikre bontva tudjuk elképzelni. Ilyenekre inkább csak tudományos számításokban van szükség, a hétköznapi életben nem. A VBA legfeljebb 60 dimenziós tömbök létrehozását engedi meg! Pénzügyi feladatok VBA támogatása – 4. előadás 4 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök deklarálása 1. A változókra érvényes deklarálási szabályok szerint úgy, hogy a változónév után kerek zárójelek között megadjuk az index-határokat, majd As kulcsszóval az elemek (közös) típusát. Indexhatár számérték, számkonstans vagy ilyenekből képzett aritmetikai kifejezés lehet; alsó_határ ≤ felső_határ kötelező. Az alsó határt nem kötelező megadni; ha nem szerepel, az alapértelmezés szerinti, példáinkban 1 értékű lesz (később). Ha nem adunk meg típusnevet, a tömb alapértelmezett típusú lesz (Variant). Pénzügyi feladatok VBA támogatása – 4. előadás 5 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök deklarálása 1. Egydimenziós tömb deklarálása: Dim tömbnév ([alsóhatár To]felsőhatár) As típusnév Dim összeg(0 to 9) As Long Többdimenziós tömbök esetén - vesszővel elválasztva - annyi indexhatár-párt, illetve indexhatárt kell felsorolni, ahány dimenziós a tömb. Pénzügyi feladatok VBA támogatása – 4. előadás 6 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök deklarálása 2. Indexhatárok megadása nélkül dinamikus tömbök hozhatók létre. Ilyenkor a konkrét indexhatárokat csak a rutin belsejében, futás során lehet megadni, a tömbelemek feltöltése előtt, Redim kulcsszóval. Az egyszer megadott dimenziószám később már nem változtatható meg, de az egyes dimenziók indexhatárait többször is, tetszőlegesen újra lehet definiálni. Ilyenkor a tömb aktuális tartalma általában elvész. A Preserve kulcsszóval meg lehet őrizni a tömbértékeket, de ekkor csak az utolsó dimenzió felső határát lehet módosítani. Pénzügyi feladatok VBA támogatása – 4. előadás 7 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök deklarálása 3. Variant típusú változókhoz az Array függvénnyel rendelhetők - rögzített hosszúságú karakterláncok és saját típusú változók kivételével - tetszőleges típusú, valamint tetszőleges méretű és dimenziószámú tömbök. A változó altípus-kódja ilyenkor a tömb típuskódja; például Variant típusú tömb esetén 8204 (8192 + 12). Pénzügyi feladatok VBA támogatása – 4. előadás 8 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök A tömbelemekre kerek zárójelbe írt indexeikkel hivatkozunk. Minden tömbelemnek annyi indexe van, ahány dimenziós a tömb. Az egydimenziós tömbök elemeinek indexét sorszámnak, a kétdimenziós tömbök elemeiét sor- és oszlopszámnak, a háromdimenziósokéit lap-, sor- és oszlopszámnak is nevezzük. Pénzügyi feladatok VBA támogatása – 4. előadás 9 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök Az index számérték, számkonstans, numerikus változó, vagy számot eredményező kifejezés lehet. Az indexhatárok meghatározzák az indexek lehetséges értékét, és természetesen az elemek darabszámát is. Minden index értékének a megfelelő indexhatárok közé kell esnie. Pénzügyi feladatok VBA támogatása – 4. előadás 10 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök A tömbök helyfoglalása bájtban: 20 + 4*dimenziószám + elemszám*elemtípus. Ha a tömböt Variant típusú változóba ültetjük, további +12 bájtra van szükség. Például egy egydimenziós 6 elemű logikai (Boolean) tömb helyfoglalása 20 + 4*1 + 6*2 = 36 bájt; ugyanez Variant típusú változóban 48 bájt. Pénzügyi feladatok VBA támogatása – 4. előadás 11 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Tömbök Excel tömböket, azaz cellatartományokat csak Variant típusú változókhoz rendelhetünk hozzá! Az egy sorból, vagy egy oszlopból álló Excel tömbből egydimenziós, az elemi tartományból kétdimenziós VBA tömb lesz. Fordított irányban nincs típuskorlátozás: bármilyen típusú egydimenziós VBA tömbbel egy cellasort, kétdimenzióssal téglalap alakú Excel tartományt tölthetünk fel. Pénzügyi feladatok VBA támogatása – 4. előadás 12 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa Egydimenziós tömbök deklarálása 10 Long típusú elemből; az indexhatárok 1÷10, 0÷9, illetve 100÷109: Dim összeg(10) As Long Dim összeg(0 to 9) As Long Dim összeg(100 to 109) As Long Pénzügyi feladatok VBA támogatása – 4. előadás 13 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa Egydimenziós, 7 Variant típusú elemből álló tömb; indexhatárok 1÷7: Dim tömb(7) Lehetséges értékadások például: tömb(l) = „alma”, tömb(2) = 3.14, tömb(3) = True, … Pénzügyi feladatok VBA támogatása – 4. előadás 14 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa Kétdimenziós tömb, amely 48 Boolean (logikai) típusú elemből áll; indexhatárok 1÷4 és 11÷22: Dim tmb(4, 11 To 22) As Boolean Ehelyett: Dim tmb(1 To 4, 11 To 22) As Boolean Miért? Például a 3. sor 5, eleme: tmb (3, 15). Pénzügyi feladatok VBA támogatása – 4. előadás 15 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa Variant típusú változó, 7 elemű, String típusú tömbbel feltöltve, miáltal indextartománya 0÷6 lesz: Dim napok napok = Array(”Hétfő”, ”Kedd”, ”Szerda”, ”Csütőrtök”, ”Péntek”, ”Szombat”, „Vasárnap”) A napok(0) értéke „Hétfő”, a napok(6) értéke „Vasárnap”. Ha Variant típusú változóhoz az Array függvénnyel rendelünk tömböt, az alsó indexhatár mindig 0 lesz, akkor is, ha 1-re állítottuk az alapértelmezést! Pénzügyi feladatok VBA támogatása – 4. előadás 16 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa Definiálunk egy egész típusú dinamikus tömböt, amelyet a futás során először háromdimenziós 60 eleművé deklarálunk át: Static számok() As Integer Redim számok(1 to 3, 2 to 6, 4) Most a tömb első eleme számok (1,2,1), utolsó eleme számok(3,6,4), a számok(1,1,1) elem nem létezik! Pénzügyi feladatok VBA támogatása – 4. előadás 17 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Példa A következő deklarációban a határokat az x, y és z változó aktuális értéke szabja meg, de a tömb addigi tartalma elveszik: Redim számok (x, y, z) Harmadszor úgy változtatjuk meg a deklarációt, hogy megőrizzük a tömbelemek értékét, ám ekkor csak az utolsó dimenzió mérete változhat: Redim Preserve számok(x, y, 12) Pénzügyi feladatok VBA támogatása – 4. előadás 18 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás A tömbök indexelésének gyakorlására a gimp_31.xls munkafüzet tömbök munkalapján találunk egy zöld szegéllyel keretezett táblázatot. A táblázatnak csak az első 10 sora és 8 oszlopa tartalmaz értékes adatot, de a kitöltöttekkel összefüggő cellákban újabb adatok hozzáírásával bővíteni, vagy egész sorok, illetve oszlopok törlésével szűkíteni lehet a tartományt. A táblázatot a tömbök nevű makró-eljárás kezeli, amelyet a CTRL+A billentyűkombinációval lehet elindítani. Pénzügyi feladatok VBA támogatása – 4. előadás 19 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás A makró a következőképpen működik: Ha a „Sor” (B20) és az „Oszlop” (B21) cellába beírunk egy sor- és egy oszlopszámot, a megfelelő táblázatelem kiemelt színű lesz, és értéke egyidejűleg bekerül az „Érték” (E20) cellába. A sor és az oszlopszám természetesen nem haladhatja meg a kitöltött tartomány megfelelő méretét; ellenkező esetben az „Érték” cellában hibajelzést kapunk. Ugyancsak hibajelzéshez vezet, ha a kijelölt cella nem a kitöltött tartományban van. Pénzügyi feladatok VBA támogatása – 4. előadás 20 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás A makró a következőképpen működik: Ha a makró indításakor mind a sor-, mind az oszlopcella üres, az eljárás színezéssel kiemeli a táblázatban kijelölt cellát, és ennek értékét Írja az értékcellába. Pénzügyi feladatok VBA támogatása – 4. előadás 21 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás A makró a következőképpen működik: Az eljárásban a méretellenőrzéshez a CurrentRegion tulajdonságot használjuk, amely visszaadja azt a tartomány-objektumot, amelyben az aktív cella van. Ennek méreteit úgy határozza meg, hogy az aktív cellából indulva minden irányban kiterjeszti a kijelölést az első üres sorig és oszlopig, illetve a munkalap határáig. Egy kijelölt objektum - ebben az esetben a kijelölt tartomány - sorait a Rows, oszlopait a Columns konténerből lehet kiválasztani, számukat a Count tulajdonság adja meg. Pénzügyi feladatok VBA támogatása – 4. előadás 22 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Jövőbeni felhasználása során ügyeljünk rá, hogy a CurrentRegion tulajdonság az aktív cella sorát és oszlopát mindenképpen figyelembe veszi. Következésképpen akkor is 1 értéket ad a sor- és az oszlopszámra, ha a kijelölt tartomány minden cellája, illetve az aktív cella minden szomszédja üres! Ha ez a gyanú felmerül, előzetesen meg kell vizsgálni a helyzetet az IsEmpty függvénnyel. Pénzügyi feladatok VBA támogatása – 4. előadás 23 / 24
Pénzügyi feladatok VBA támogatása – 4. előadás Köszönöm a figyelmet! Folyt köv. Pénzügyi feladatok VBA támogatása – 4. előadás 24 / 24