Office Guru

Szín szerinti összegzés néhány soros VBA-kóddal

2015. december 09. - Office Guru

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:

580.jpgElső 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:

581.jpg
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".

582.jpgKö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:

583.jpgAhogy 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

584.jpgSzerintem 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:

585.jpgFü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.

586.jpg

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr908153122

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

CBI 2016.01.22. 10:58:46

Sumvalue= Sumvalue+cell.value

nem lenne elég?

Norman Nailer 2016.02.12. 15:15:11

Ha tartós eredmény kell, akkor muszáj képletet használni. DE ha csak most, gyorsan akarom látni az összeget, az Excel (talán a 2010-es verzió óta) tud szín szerint rendezni és szűrni táblázatot. Tehát az adott oszlopban Filter by color: Red, kijelölöm a cellákat és a státuszsorból kiolvasom a Sum értékét - kevesebb mint 10 mp alatt.
Szerintem amúgy mind a státuszsor trükkjeit, mind a filter by color funkciót méltatlanul kevesen ismerik és használják.
süti beállítások módosítása