Variációk egy témára. Az alábbi bejegyzés ékes bizonyítéka annak, hogy VBA-val (is) többféleképpen lehet végrehajtani egy megoldandó feladatot.
Tegyük fel, hogy fejlécet (jelen esetben az első fél év hónapjait) szeretnénk hozzáadni a tartományunkban lévő oszlopokhoz. Például:
Az alábbi lehetőségek állnak rendelkezésünkre:
1. Egyéni Lista (Custom List) hozzáadása manuálisan: ez egy Excel beállítás, mely itt érhető el:
1 |
Fájl (File) -Beállítások (Options) -Speciális (Advanced) -Egyéni listák szerkesztése... (Edit Custom Lists...) |
Meglévő tartományból olvastatjuk be (azaz importáljuk) az Egyéni Listát, melyet aztán később bármikor kiírathatunk, automatikus kitöltéssel:
Szemléltetés animált GIF-en:
Innentől a makróval kivitelezett megoldások következnek. Az adott munkafüzetbe szúrjunk be egy modult a Visual Basic szerkesztőjében és kiválasztott makró(ka)t adjuk hozzá.
2. Az előbb bemutatott Egyéni Lista (Custom List) hozzáadása automatikusan:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub Fejlec_02() Dim FejlecTomb() 'Egyéni lista hozzáadása automatikusan FejlecTomb = Array("January", "February", "March", "April", "May", "June") Application.AddCustomList FejlecTomb ' ha a "'" jelet töröljük a sor elejérõl: utoljára hozzáadott egyéni listát törli, ami itt a "FejlecTomb" tomb elemei: 'Application.DeleteCustomList Application.CustomListCount End Sub |
Itt a kulcs az “Application.AddCustomList” eljárás melyhez hozzáadtuk a hónapokat tartalmazó tömböt (FejlecTomb).
3. Itt a tartomány (range) cella (cells) tulajdonságát használtam. Egyesével megadjuk a cellákat a koordináták alapján (sor és oszlop), majd kiíratjuk a megfelelő hónapokat:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Fejlec_03() With Sheet1 .Cells(1, 1) = "January" .Cells(1, 2) = "February" .Cells(1, 3) = "March" .Cells(1, 4) = "April" .Cells(1, 5) = "May" .Cells(1, 6) = "June" End With End Sub |
4. Hasonló, mint az előző, de itt egyetlen utasításban adjuk meg a tartományt (nem cellánként) és tömböt használunk a kiíratáshoz:
1 2 3 4 5 6 7 8 |
Sub Fejlec_04() Dim FejlecTomb() FejlecTomb = Array("January", "February", "March", "April", "May", "June") Sheet1.Range("A1:F1") = FejlecTomb End Sub |
5. Itt is a FejlecTomb tömb található meg, aminek az elemein for-next ciklussal végigmegyünk és azokat megjelenítjük a tartomány (range) cella (cells) tulajdonságát használva:
1 2 3 4 5 6 7 8 9 10 11 |
Sub Fejlec_05() Dim FejlecTomb(), i As Long FejlecTomb = Array("January", "February", "March", "April", "May", "June") For i = LBound(FejlecTomb) To UBound(FejlecTomb) Sheet1.Cells(1, i + 1) = FejlecTomb(i) 'itt az "i"-t egyaránt használtam az oszlopszámnál és a FejlecTomb tömbnél Next i End Sub |
6. Egy kis különlegesség, a “Resize” (átméretezés) használata: ez a tulajdonság átméretezi az adott tartományt. Általában akkor veszem igénybe, ha pl. a kijelölést növelni/csökkenteni akarom egy sorral/oszloppal vagy táblázatot akarok kijelölni az első sor nélkül. Ennél a makrónál a tartomány bal felső sarkát (itt A1-es cella) méretezzük át úgy, hogy az oszlopok számát megnöveljük a FejlecTomb elnevezésű tömb elemeinek számával + 1-gyel:
1 2 3 4 5 6 7 8 9 |
Sub Fejlec_06() Dim FejlecTomb() FejlecTomb = Array("January", "February", "March", "April", "May", "June") Sheet1.Cells(1, 1).Resize(, UBound(FejlecTomb) + 1) = FejlecTomb '"UBound(FejlecTomb) + 1":a tömb elemeinek összege, itt: 6 End Sub |
7. Végezetül egy újabb érdekesség: a “Split” (szétdarabolás, szétvágás) funkció. Ez egy szöveg (String) típusú változót szétdarabol szövegelemekre egy előre megadott elválasztó alapján, majd azt szöveg típusú tömbként adja vissza. Pl.:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Fejlec_07() Dim FejlecLista As String, FejlecTomb() As String, j As Long FejlecLista = "January February March April May June" FejlecTomb = Split(FejlecLista) 'ha az elválasztó szóköz (space), nem kell megadni. Ugyanaz, mint: Split(FejlecLista, " ") For j = LBound(FejlecTomb) To UBound(FejlecTomb) Sheet1.Cells(1, j + 1) = FejlecTomb(j) Next j End Sub |
A “Split” a fenti kód alapján a “FejlecLista” szöveget darabolja szét (hónapok neveire), és azt a “FejlecTomb” nevű tömbként adja vissza. Majd ennek a tömbnek megyünk végig az elemein.
Van olyan módszer ami nincs a listában? Kérdésed, észrevételed van?
Írd meg lent vagy dobj egy emailt: xlmotyo@gmail.com