Nem kérdés, hogy áttekinthetőség, azonnali vizuális megjelenítés szempontjából igencsak hasznos celláink hátterének színét megváltoztatni, ráadásul így könnyen szűrhetünk is azokra a pontokra, számokra, amelyekkel úgy gondoljuk, hogy foglalkoznunk kell vagy amelyekre különösen büszkék vagyunk.
Na de műveletet már nem ilyen könnyű végezni a különféle színekben pompázó celláinkkal, sőt megkockáztatom azt is (de kérlek, cáfoljatok meg hozzászólásokban), hogy segédcellák, segédoszlopok nélkül közvetlenül, makró nélkül nem igazán fog menni mondjuk a piros háttérrel bíró celláink értékének összeadása egy bizonyos táblázatban. Úgyhogy most egy olyan kis makrót fogunk készíteni, amelyik mondjuk összeadja egyetlen lépésben a bizonyos színű celláink értékeit.
Adott tehát a következő kis feladvány, a feladatunk az lenne, hogy egyetlen lépésben, segédcellák nélkül határozzuk meg az adott város szumma árbevételét:
Első lépésként szépen lépjünk be a VBA editorba, majd jobb gombbal való kattintás után a bal oldali projekt ablakban, szúrjunk be egy modult, itt fogjuk majd szépen deklarálni a funkciónkat, hiszen ezúttal egy funkcióra lesz majd szükségünk, amit meghívhatunk az Excelben. Szóval ha létrehoztuk a modulunkat, hozzuk létre a funkciót neve illetve mögötte zárójelben paraméterei megadásával:
Az első paraméterünk a formulában majd a például szolgáló cella színe lesz, az azután következő paraméter pedig az a tartomány, ahol szín szerint akarunk majd összegezni.
Ezután két változóra lesz szükségünk, mindkettő Integer típussal, az egyikbe majd a például szolgáló cellánk színének colorindexét töltjük be, a másikba pedig majd konkrétan az összegzésünk eredményét fogjuk "kumulálni".
Következő lépésként a CellColorValue nevű változónkat állítsuk be úgy, hogy majd a funkciónk első paramétereként megadott szín colorindexét vegye fel:
Ahogy erről már volt szó, ezt a .Interior.ColorIndex utasítással tudjuk megtenni.
Most következik az egész aprócska makró legfontosabb része, mégpedig a For Each In ... Next ciklus, amelyben szépen végigmegyünk a megadott tartományon és az első paraméterként megadott színnel bíró cellák értékét összegzi. Egyszerűen gondoljuk csak át, hogy pontosan mit akarunk, majd kezdjük el leírni VBA-parancsokkal a gondolatainkat. Azaz minden egyes cella esetében a tartományunkban, ha az adott cella colorindexe megegyezik a színparaméterünket tartalmazó változóval akkor a másik változónkba kezdjük el bevinni az értékeket az összegzés céljából. Majd ezt ismételjük meg annyiszor, ahány cellánk van a tartományban. Ez így néz tehát VBA-nyelvre fordítva:
For Each Cell In Tartomanyom
If Cell.Interior.ColorIndex = CellColorValue Then
Sumvalue = WorksheetFunction.Sum(Cell, Sumvalue)
End If
Next Cell
Szerintem az egyetlen ismeretlen rész ebben a ciklusban a WorksheetFunction.Sum nevű utasítás, amely egy olyan utasítás, ami a zárójelben mögötte megadott számokat, argumentumokat, tehát tartományt fog összegezni.
A mostani esetünkben tehát a WorksheetFunction.Sum(Cell, Sumvalue) azt teszi, hogy az adott színnel bíró cellánk értékét és a Sumvalue változó korábbi értékét összeadja, kumulálja, egészen tartományunk végéig.
Innen már csak egyetlen lépés van hátra, méghozzá az, hogy funkciónkat tegyük egyenlővé a Sumvalue változó végső, ciklus lezárása utáni értékével, hiszen ez lesz majd az eredmény, amit a cellánkba várunk. És persze hát zárjuk le a funkciót:
Függvényünk most már használható, úgyhogy szépen menjünk vissza Excelbe, ahol például Miskolc esetében
=ColorSum(J3,G3:G12)
funkció felhasználásával megkapjuk az eredményünket.