Cellen met kleur optellen

Status
Niet open voor verdere reacties.

Kramer

Gebruiker
Lid geworden
12 jun 2002
Berichten
447
Hallo Iedereen,

Na hier op het forum te hebben gezocht heb ik de code gevonden om cellen met een kleur op te tellen
Code:
Function Aantal_als_kleur(Range1, Optional Range2) As Double
On Error GoTo ErrorHandler
Dim objCell As Range

Application.Volatile
Aantal_als_kleur = 0
'cellTextColour = kleur.Font.Color

For Each objCell In Intersect(Range1, _
    Range1.Parent.UsedRange)
    If objCell.Interior.ColorIndex <> xlNone Then _
  Aantal_als_kleur = Aantal_als_kleur + 1
Next objCell
 
If Not IsMissing(Range2) Then
    For Each objCell In Intersect(Range2, _
        Range2.Parent.UsedRange)
        If objCell.Interior.ColorIndex <> xlNone Then _
        Aantal_als_kleur = Aantal_als_kleur + 1
    Next objCell
End If
Exit Function
ErrorHandler:   ' Hier wordt fout afgehandeld
    Select Case Err.Number
    Case 1004
        'plakken geeft een foutmelding
'        MsgBox "Bij plakken wordt de kleur niet aangepast!", vbOKOnly, "Let op:"
    Case Else
        MsgBox "Er is een fout ontstaan" & Chr(13) & _
        "Foutnummer: " & (Str(Err.Number) & Chr(13) & _
        "Foutomschrijving: " & Err.Description)
    End Select
End Function

Maar deze telt alleen de cellen op die ik handmatig een kleur geef. En niet mijn cellen die ik via een voorwaardelijke opmaak een celkleur geef. Is dit ook mogelijk.
 
In principe, ja. Afhankelijk van je excel versie is dit mogelijk makkelijker.

Een goed voorbeeld (qua uitleg, ongetest door mezelf) kun je hier vinden:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=190

In principe komt het erop neer dat je handmatig alsnog moet controleren of een formatting van toepassing is of niet. Mogelijk is er een makkelijkere code voor 2007/2010, maar alle properties van dit script worden nog steeds ondersteund.
 
HELP, wat een code

Zie er leuk uit maar dat is denk ik nogal veel code om alleen te berekenen hoeveel cellen in 1 rij een achtergrond kleur hebben gekregen via voorwaardelijke opmaak.
 
Laatst bewerkt door een moderator:
Het is een grote lap code, omdat er in excel niet iets bestaat als:

cell.Formatconditions(x).isToegepast? -> true/false

wat deze code doet is per formatregel kijken of een regel van toepassing is op deze cel en dan kijken of die moet worden toegepast. Vervolgens bepaald de code dan welke kleur de cel moet hebben gekregen.

Indien er maar 1 regel is die wordt toegepast, is een verkorte oplossing vaak mogelijk met een matrixformule (buiten kleuren tellen). Indien de kleur van een cel wordt bepaald door vele regels, is deze manier mogelijk toch de enige. Hoewel ik natuurlijk altijd weer verbaasd word door de vele creatieve oplossingen van de andere helpers ;)
 
Laatst bewerkt:
Verbaast

Wat mij verbaast is dat de code die ik gevonden wel een stuk kleiner is maar niet overweg kan met voorwaardelijke opmaak.

Maar die code van jouw daar moet ik echt nog eens goed naar kijken...... Ik snap daar totaal niets van.
 
Het is niet mijn code ;) Ik heb em alleen gevonden voor je.

De code is zeer uitgebreid inderdaad, maar niet zo heel ingewikkeld als je er even naar kijkt. De reden dat de normale code niet werkt, is omdat conditional formatting een hulpmiddel is voor de gebruiker, het past niet de eigenschappen van de cel aan.

Nogmaals, mogelijk is er een makkelijkere oplossing voor jouw specifieke probleem, maar voor een generieke oplossing is de gelinkte code mogelijk een oplossing
 
Kramer,

Je kunt wel degelijk testen op gekleurde cellen via voorwaardelijke opmaak.
Het werkt alleen niet zo recht toe recht aan.

Code:
Sub test()
    With ActiveCell
        If .FormatConditions.Count = 0 Then Exit Sub
        If .FormatConditions(1).Interior.ColorIndex = 15 Then MsgBox "OK"
    End With
End Sub

Stel dat er geen voorwaardelijke opmaak zit op een cel dan test je dit af met de eerste regel en verlaat de sub.
Is er wel voorwaardelijke opmaak dan test regel 2 of de kleur grijs is, zo ja dan komt er een bericht.
 
Superzeeuw,

De code is correct, echter rapporteert deze code altijd "OK" zelfs als de cel niet gekleurd is door de opmaak. Dus als je grijze cellen wilt tellen die ook werkelijk grijs zijn op dat moment werkt dat niet met die code.

Wat je test met jouw code is welke kleur een cel eventueel krijgt, niet welke kleur de cel op dat moment heeft. Vandaar die enorme lap code op dat door te lopen
 
Bedankt

Bedankt iedereen.

Maar ik ben bang dat er niets anders op zit om alles met de hand te tellen.
 
Kramer,

Er is een work around.
Als je de voorwaardelijke opmaak in code schrijft kun je de cel gewoon inkleuren en die kun je wel detecteren.

Mijn vorige code scande de instellingen en niet de gegenereerde kleur in de cel.
 
Hoi,
Cellen optellen (of tellen) via voorwaardelijke opmaak is nogal tricky. Onlangs had ik het zelfde probleem. Na lang zoeken heb ik toch een oplossing gevonden voor mijn probleem.
(een soort lotto formulier). Ik stuur het bestandje mee als bijlage. Je moet het zaakje maar eens grondig bekijken, hopelijk vindt jij een oplossing voor het probleem

mvg
Bekijk bijlage lotto.rar
n.b. de macro's hebben niets te maken met het optellen.
 
vrij

Heb nu vrij maar zal dit zeker na mijn vakantie gaan bekijken
 
Erg bedankt.

Hoi,
Cellen optellen (of tellen) via voorwaardelijke opmaak is nogal tricky. Onlangs had ik het zelfde probleem. Na lang zoeken heb ik toch een oplossing gevonden voor mijn probleem.
(een soort lotto formulier). Ik stuur het bestandje mee als bijlage. Je moet het zaakje maar eens grondig bekijken, hopelijk vindt jij een oplossing voor het probleem

mvg
Bekijk bijlage 116619
n.b. de macro's hebben niets te maken met het optellen.

Erg bedankt voor dit. Was even puzzelen hoe de formule werkte. Hij doet het erg goed. Ik moet alleen kijken hoe ik deze moet aanpassen. Aangezien bij mij de UitgekomenNummers dubbel voorkomen.
Zie bijlage:
Bekijk bijlage 117525
 
Ik zou het zo doen, inderdaad niet de cellen met kleurtjes optellen maar de cellen die aan de voorwaarde voldoen optellen.

Code:
=SOMPRODUCT((C3:V3=UitgekomenNummers)*(C3:V3))
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan