Räkna celler med fyllningsfärg
Går det att räkna antal celler i ett område med exempelvis gul fyllningsfärg? I Excel finns det ingen inbyggd funktion eller verktyg för detta tyvärr. När lösningen inte finns inbyggd i Excel så får man lösa problemet med ett makro. I Länken nedan finns Excelfilen med makrot inbyggt men det går även kopiera och klistra in koden nedan.
Detta makro fungerar endast om fyllningsfärgen i celler är satt manuellt och inte med Villkorsstyrd formatering.
Här kan du ladda hem Excelfilen.
Vi rekommenderar dessa Excelkurser:
www.infocell.se – lärarledda kvalitetskurser i Excel
www.officekurs.se – oslagbar e-kurser i Excel & Office-paketet
Makrot som räknar celler med en specifik fyllningsfärg heter CountCellsByColor och har 2 argument;
- Ett område.
- En cellreferens, vilken innehåller fyllningsfärgen som räknas antalet av i området.
I exemplet ovan (bilden) så innehåller cell F11 följande: =CountCellsByColor($B$1:$B$14;E11)
Med egna makrofunktioner får man ingen hjälp som med vanliga inbyggda funktioner så man måste veta hur argumenten ska anges och vilken ordning. Första argumentet är området med färgade celler i B-kolumnen. Andra argumentet är cellen E11 som innehåller färgen (guldfärg) som ska räknas på. Resultatet av makrofunktionen blir antal av den specifika färgen i området, i detta fall 5.
I exemplet är sedan funktionen kopierad neråt och räknar antal gula och blåa celler också.
För att skapa makrot i din egen arbetsbok kan du kopiera koden nedan, öppna sedan VBA-editorn (Alt+F11) i Excel. Klicka på Infoga och välj Modul. Klistra in koden. Stäng VBA-editorn och använd sedan den nya. funktionen CountCellsByColor. Spara sedan din arbetsbok som en Makroaktiverad Excel-arbetsbok (*.xlsm).
Kopiera koden nedan:
Function GetCellColor(xlRange As Range) Dim indRow, indColumn As Long Dim arResults() Application.Volatile If xlRange Is Nothing Then Set xlRange = Application.ThisCell End If If xlRange.Count > 1 Then ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count) For indRow = 1 To xlRange.Rows.Count For indColumn = 1 To xlRange.Columns.Count arResults(indRow, indColumn) = xlRange(indRow, indColumn).Interior.Color Next Next GetCellColor = arResults Else GetCellColor = xlRange.Interior.Color End If End Function Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Long Application.Volatile cntRes = 0 indRefColor = cellRefColor.Cells(1, 1).Interior.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Interior.Color Then cntRes = cntRes + 1 End If Next cellCurrent CountCellsByColor = cntRes End Function