ja Twój kod ułożyłbym tak i wtedy będzie jedna pętla for.
Sub liczenie()
Dim i, licznik1, licznik2 As Integer
licznik1 = 0
licznik2 = 0
For i = 1 To 5
If Range("C1").Interior.ColorIndex = Cells(i, 1).Interior.ColorIndex Then
licznik1 = licznik1 + 1
End If
If Range("C2").Interior.ColorIndex = Cells(i, 1).Interior.ColorIndex Then
licznik2 = licznik2 + 1
End If
Next i
Range("C1") = licznik1
Range("C2") = licznik2
End Sub
Można to zrobić inaczej, ale ten kod co powyżej daje już 50% oszczędności czasu w stosunku do Twojego rozwiązania
EDIT 11.03
jeśli tak jak piszesz chciałbyś uogólnić można to zrobić tak:
Sub liczenie2()
Dim EndColorIndex, IdWiersz1, IdWiersz2, IdKolumna1, IdKolumna2 As Integer
EndColorIndex = -4142 'niewypełniona kolorem komórka
IdWiersz1 = 1
IdKolumna1 = 1 'kolumna A
IdKolumna2 = 3 'kolumna C
'wyczyszczenie tam gdzie wpisanie
IdWiersz2 = 1
Do While (Cells(IdWiersz2, IdKolumna2).Interior.ColorIndex <> EndColorIndex)
Cells(IdWiersz2, IdKolumna2) = 0
IdWiersz2 = IdWiersz2 + 1
Loop
'właściwe wpisanie
Do While (Cells(IdWiersz1, IdKolumna1).Interior.ColorIndex <> EndColorIndex)
IdWiersz2 = 1
Do While (Cells(IdWiersz2, IdKolumna2).Interior.ColorIndex <> EndColorIndex)
If (Cells(IdWiersz1, IdKolumna1).Interior.ColorIndex = Cells(IdWiersz2, IdKolumna2).Interior.ColorIndex) Then
Cells(IdWiersz2, IdKolumna2) = Cells(IdWiersz2, IdKolumna2) + 1
End If
IdWiersz2 = IdWiersz2 + 1
Loop
IdWiersz1 = IdWiersz1 + 1
Loop
End Sub