Suma według koloru - przykłady kodu VBA

Poniższa funkcja oblicza całkowitą wartość wszystkich komórek w określonym zakresie, które mają określony kolor:

Niestety nie ma funkcji SUMIF do sumowania na podstawie koloru komórki. Jeśli chcesz sumować według koloru, musisz utworzyć funkcję w VBA.
Aby użyć tego kodu: Otwórz Edytor Visual Basic (Alt + F11), Wstaw nowy moduł (Wstaw > Moduł) i skopiuj i wklej żądany kod do modułu.

Funkcja do sumowania według koloru

1234567891011121314151617181920 Funkcja Color_By_Numbers (Color_Range jako zakres, Color_Index jako liczba całkowita) jako Double' Dim Color_By_Numbers jako DoublePrzyciemnij komórkę'Spogląda na komórki, które są w zakresie i jeśli„Właściwość koloru wnętrza odpowiada wymaganemu kolorowi komórki”„wtedy to się sumuje”„Zasięg pętli”Dla każdej komórki w zakresie kolorówJeśli (Cell.Interior.ColorIndex = Color_Index) WtedyKolor_Wg_Liczb = Kolor_Wg_Liczb + Komórka.WartośćZakończ, jeśliNastępna komórkaKoniec funkcji

W efekcie jest to „suma po kolorze” - więc jeśli znasz 56 paletę kolorów Excela i wiesz na przykład, że kolor 4 jest jasnozielony, wtedy wywołaj następujące wywołanie:

Kolor_wg_liczb(„A1:P20”,4)

zsumuje wartości dla wszystkich komórek w zakresie A1:P20, które mają kolor jasnozielony.

Aby ułatwić korzystanie z tej funkcji, poniższy podprogram obliczy łączną wartość dla każdego z 56 kolorów programu Excel. Daje również cały podniebienie, dzięki czemu można łatwo zobaczyć numer indeksu dla każdego koloru.

Podprogram jest wywoływany na arkuszu 1 i sprawdza zakres

12345678910111213141516171819202122 Prywatna Sub CommandButton1_Click()„Przyjrzy się każdemu kolorowi i utworzy podsumowującą tabelę wartości”'na arkuszu 1 w komórce A1 i w dółDim Current_Color_Number jako liczba całkowitaDim Color_Total As DoubleDla numeru_bieżącego_koloru = 1 do 56Całkowity_kolor = Kolor_Wg_Liczb(Arkusze("Arkusz2")).Zakres("a11:aa64"), Bieżący_Kolor_Numer)Arkusze("Arkusz1").Range("A1").Offset(Current_Color_Number, 0) = Current_Color_NumberWorksheets("Arkusz1").Range("A1").Offset(Current_Color_Number, 0).Interior.ColorIndex = Current_Color_NumberJeśli kolor_całkowita 0 # wtedyArkusze("Arkusz1").Range("a1").Offset(Current_Color_Number, 1).Value = Color_TotalZakończ, jeśliNastępny numer_bieżącego_koloruNapis końcowy

Aby pobrać plik XLS, kliknij tutaj

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave