• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

SUMIF op basis van Kleur

Status
Niet open voor verdere reacties.

Kloppie24

Gebruiker
Lid geworden
7 mei 2009
Berichten
9
Hallo,

Ik wil graag van een serie getallen, de som berekenen. Hierbij hebben sommige getallen een Backgroundcolor Geel en sommigen niet. Ik wil ervoor zorgen dat alleen de getallen die de gele achtergrondkleur hebben worden opgeteld.

Nu heb ik een functie van internet gehaald, welke perfect werkt namelijk:

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)

Dim rCell As Range
Dim lCol As Long
Dim vResult

lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function



Het probleem is dat dit alleen werkt wanneer de cellen handmatig van een achtergrondkleur zijn voorzien. Mijn cellen worden geel gekleurd op basis van conditional formatting, dan werkt bovenstaande formule niet. Iemand een oplossing voor dit probleem?
 
volgens mij kun je dan beter als voorwaarde dezelfde als in de voorwaardelijke opmaak gebruiken ipv de celkleur

gr wim
 
Hey Wiki,

Dat begrijp ik niet helemaal. Het probleem is juist, dat wanneer ik gebruik maak van voorwaardelijke opmaak, ik niet de SUMIF kan gebruiken.
 
Daarom herhaal ik mijn advies om ASAP utilities te gebruiken.
 
Je maakt geen gebruik van SUMIF, dus je redenering klopt niet.
Het maakt niet uit hoe een achtergrondkleur is ingesteld, alleen de kleur doet er toe.
Dit lijkt mij voldoende:
rColor is de kleurindex waarop getest wordt, rRange het gebied dat getest wordt.

Code:
Function ColorFunction(rColor As Integer, rRange As Range)
  For Each cl In rRange
    If cl.Interior.ColorIndex = rColor Then colorfunction= colorfunction + cl.value
  Next
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan