fbpx

Sumowanie wartości komórki według jej koloru (funkcja VBA)

27.08.2024 | ECP3, Makra VBA

Załóżmy, że mamy tabelę z danymi i chcemy podsumować wartości komórek, których kolor został zaznaczony na zielony i różowy. O tak: 

Formatka

W Excelu nie ma wbudowanej funkcji, która potrafiłaby to zrobić. Jeśli koniecznie chcemy rozwiązać sprawę funkcją – musimy sobie ją sami napisać. Tym właśnie zajmę się w tym artykule. 

Ale! Zanim przejdę dalej, to od razu powiem, że analizowanie danych na podstawie koloru ich komórki czy jakiegokolwiek formatowania nie jest dobrym pomysłem! Excel jest strasznie słaby w analizie formatowania komórek, za to świetnie sobie radzi z analizą wartości komórek, czyli gdyby w kolumnie obok napisać jakiś konkretny komentarz, zamiast kolorowania komórek: 

Kolumna pomocnicza jako lepsze rozwiązanie

Wtedy wystarczy już nawet prehistoryczna funkcja SUMA.JEŻELI i po temacie. 

No ale. Ma być funkcja sumująca na podstawie koloru, zatem proszę bardzo 😊 

Tworzenie funkcji użytkownika sumującej po kolorze komórki 

Przejdźmy do edytora VBA: Alt + 11, i wstawmy nowy moduł: Insert → Module. 

I napiszmy kod rozpoczynający naszą funkcję. Funkcja będzie się nazywać SumaKolor. 

Od razu też zdefiniujmy sobie zmienne, których funkcja będzie potrzebowała od użytkownika: 

  1. Zakres sumowanych komórek: ZakresLiczb 
  2. Komórka, zawierająca kolor, jaki będziemy sumować: KomorkaKolor 

Oto kod: 

Function SumaKolor(ZakresLiczb As Range, KomorkaKolor As Range) As Double 

     

End Function 

 

To jeszcze będziemy potrzebować na pewno samego koloru (w VBA jest to liczba), a nie tylko komórki zawierającej ten kolor, oraz techniczną zmienną obiektową typy Range dla pętli for each, której za chwilę użyjemy. Mamy zatem dwie kolejne zmienne, tym razem już w środku procedury: 

    Dim Kolor As Long, Komorka As Range 

Kolor od razu możemy sobie uzupełnić poprzez sczytanie go ze zmiennej KomorkaKolor, pobranej od użytkownika: 

    Kolor = KomorkaKolor.Interior.ColorIndex 

Pętla for each sumująca po kolorze komórki 

Przyszedł zatem czas, aby zacząć sumować. 

Logika będzie taka, że przejedziemy się po każdej komórce zakresu podanego przez użytkownika (ZakresLiczb) i sprawdzimy, czy kolor każdej pojedynczej komórki (przechowywanej w technicznej zmiennej obiektowej Komorka) jest taki, jak ten, który nas interesuje (przechowywany obecnie w zmiennej Kolor). Zrobimy to za pomocą pętli for each 

Jeśli kolor komórki będzie się zgadzał, to jeszcze sprawdzimy, czy zawiera ona wartość, którą się da sumować, czyli liczbę. 

A potem dokonamy sumowania, czyli powiększymy dotychczasową wartość funkcji SumaKolor o wartość komórki. Początkowy wynik funkcji wynosi oczywiście zero. 

A kod jest następujący: 

Function SumaKolor(ZakresLiczb As Range, KomorkaKolor As Range) As Double 

    Dim Kolor As Long, Komorka As Range 

    Kolor = KomorkaKolor.Interior.ColorIndex 
     

    For Each Komorka In ZakresLiczb 

        If Komorka.Interior.ColorIndex = Kolor Then 

            If IsNumeric(Komorka.Value) = True Then 

                SumaKolor = SumaKolor + Komorka.Value 

            End If 

        End If 

    Next 

End Function 

 

Teraz koniecznie trzeba zapisać plik jako plik z obsługą makr (xlsm lub xlsb) i śmiało można już użyć napisanej przez nas funkcji jako funkcji arkuszowej. O tak: 

=SumaKolor($E$4:$E$28;G5) 

Użycie funkcji w arkuszu

Co ciekawe, tej funkcji możesz użyć również w innych plikach, ale tylko wtedy, gdy otwarty jest oryginalny plik, w którym funkcja została napisana. 

A wynik wygląda tak (oryginalna tabela jest dłuższa niż na rysunku, dlatego wartości się nie zgadzają): 

Suma kolor

I to tyle! 

 


Plik do pobrania:

https://malinowyexcel.pl/wp-content/uploads/2024/08/MalinowyExcel-VBA-SumaKolor.zip

 

Zapraszam też do filmu na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

0 Comments

Submit a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *