• 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.

Blauwe cellen met rode tekst tellen

Status
Niet open voor verdere reacties.

Severijns

Gebruiker
Lid geworden
6 jul 2018
Berichten
139
Geachte forumleden,

In bijgevoegd bestand zoek ik een methode om het aantal blauw gekleurde cellen met een rodetekst kleur te tellen.
De blauwe celkleur komt tot stand middels een matrix formule en de rode tekstkleur komt tot stand middels VO.

Via dit forum heb ik diverse oplossingen voorbij zien komen en geprobeerd.

Code:
Function TelKleur(R1 As Range, r2 As Range)
Application.Volatile
For Each cl In R1
    If cl.Font.Color = r2.Font.Color Then TelKleur = TelKleur + 1
Next cl
End Function
in combinatie met de formule
PHP:
=TelKleur(H13:H1013;C4)
werkt helaas niet met VO.

De oplossing ligt hem, volgens de diverse voorgestelde oplossingen, in het gebruik maken van de formule AANTAL.ALS of AANTALLEN.ALS
Ik ben dus opzoek naar een formule die gebruik maakt van de VO om de rode kleur vast te stellen.
PHP:
=ALS(OF(H$6="";H$6="Nvt");"";ZELFDE.DAG(H13;H$6))2<VANDAAG()
in combinatie met de matrix formule die voor de blauwe kleur van de cel zorgt.
PHP:
{=SOM((TRANSPONEREN($F$13:$F$1013)='Opl. Matrix'!$F$13:$F$67)*('Opl. Matrix'!H$13:H$67="X"))}
Tot dusverre is het mij niet gelukt hier een werkende combinatie voor te maken met de AANTAL.ALS of AANTALLEN.ALS formule.

Iemand van jullie enig idee hoe ik het toch voor elkaar kan krijgen om de blauwe cellen met een rode tekstkleur te tellen?

Rob

Bekijk bijlage Kopie Scholingstabel.xlsm

Werkbare oplossing van Edmoor. Bedankt!
Code:
Sub TellenMaar()
    For x = 1 To 2
        Select Case x
            Case 1: klr = "C4"
            Case 2: klr = "C5"
        End Select
        
        For i = 8 To 104
            Select Case x
                Case 1: Ant = Cells(1017, i).Address(0, 0)
                Case 2: Ant = Cells(1018, i).Address(0, 0)
            End Select
            
            cellen = Split(Cells(13, i).Address, ":")(0) & ":" & Split(Cells(1013, i).Address, ":")(0)
            On Error Resume Next
            Set Rng = Range(cellen).SpecialCells(xlCellTypeConstants)
            aantal = 0

            If Not Rng Is Nothing Then
                For Each cl In Rng
                    If cl.DisplayFormat.Interior.Color = Range(klr).Interior.Color And cl.DisplayFormat.Font.Color = Range(klr).Font.Color Then
                        If IsDate(cl.Value) And cl.Value < Date Then
                            aantal = aantal + 1
                        End If
                    End If
                Next
            End If
            
            On Error GoTo 0
            Range(Ant).Value = aantal
            Set Rng = Nothing
        Next i
    Next x
End Sub
Met dank aan Edmoor.
Kleine aanvulling voor als je wilt laten berekenen alla Subtotaal.
Code:
If Not Rng Is Nothing Then
    For Each cl In Rng
        If Not cl.Rows.Hidden Then
            If cl.DisplayFormat.Interior.Color = Range(klr).Interior.Color And cl.DisplayFormat.Font.Color = Range(klr).Font.Color Then
                If IsDate(cl.Value) And cl.Value < Date Then
                    aantal = aantal + 1
                End If
            End If
        End If
    Next
End If
 
Laatst bewerkt:
Als je toch een VO regel hebt om de tekstkleur in te stellen, dan kan je dezelfde criteria gebruiken om te bepalen hoe vaak aan die voorwaarde wordt voldaan. Geen VBA nodig.
 
Hallo Jan Karel,

Wat je zegt lees ik inderdaad overal terug en heb dat ook geprobeerd.
Het is me alleen helaas nog niet gelukt om het zodanig werkend te krijgen dat de blauwe cellen met rode tekst worden geteld.
Vandaar mijn vraag op het forum.

Ik heb de onderstaande formule gebruikt voor het tellen van de rood gekleurde tekst maar dit werkt niet.
PHP:
=AANTAL.ALS(H13:H1013;ALS(OF(H$6="";H$6="Nvt");"";ZELFDE.DAG(H13;H$6))<VANDAAG())

De cellen met een rode tekst worden niet geteld laat staan in combinatie met de blauw gekleurde cellen.

Met vriendelijke groet,

Rob
 
Laatst bewerkt:
Hoi Edmoor,

Bedankt voor de moeite tot dusverre.
Jou oplossing komt al een heel eind in de goede richting.
Met jouw oplossing kijkt hij naar het gehele bereik (H13:BS435), telt alle cellen die aan de voorwaarde voldoen en geeft de resultaten weer in E4 t/m E6.

Ik kan de code wel aanpassen zodat er naar een specifieke kolom wordt gekeken
Code:
For Each cl In Range("H13:H1013")
maar ik zou het graag, in het gegeven bereik (H13:CZ1013), voor elke kolom apart berekent zien worden.

M.a.w. op regels 1017 en 1018 weergegeven per kolom hoeveel er aan de voorwaarde voldoen.
Nogmaals bedankt en ik zal zelf ook nog even kijken wat ik kan proberen.
Bij mij is dat overigens altijd "trial & error"
Maar dat zal voor meerderen gelden :)

Rob
 
Je hebt een naar mijn mening juiste richting nu die je naar wens kan aanpassen.
Alle ingrediënten die je nodig hebt om het voor een bepaalde kolom te doen zitten er in.

Met een functie gaat het niet omdat deze de .DisplayFormat niet accepteert.
 
Edmoor,

Bedankt.
Mijn kennis van VBA is als het kennen van de eerste 8 letters van het alfabet.
Ik kan daar kleine woordjes mee maken en soms een korte zin.
Ik ga kijken of het me lukt de oplossing te vinden.

Rob
 
Ben een klein stukje verder gekomen.
Heb de code iets aangepast.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Address(0, 0)
        Case [COLOR="#FF0000"]"F1017", "F1018"[/COLOR]
        Case Else
            Exit Sub
    End Select
    
    Cancel = True
    frmBezig.Show False
    frmBezig.Repaint
    
    For Each cl In Range([COLOR="#FF0000"]"H13:H1013")[/COLOR].SpecialCells(xlCellTypeConstants)
        If cl.DisplayFormat.Interior.Color = Range([COLOR="#FF0000"]"F"[/COLOR] & Target.Row).Interior.Color And _
           cl.DisplayFormat.Font.Color = Range([COLOR="#FF0000"]"F"[/COLOR] & Target.Row).Font.Color Then
            aantal = aantal + 1
        End If
    Next
    
    Range([COLOR="#FF0000"]"H"[/COLOR] & Target.Row).Value = aantal
    frmBezig.Hide
End Sub
en dat zorgt ervoor dat ik voor 1 kolom (H) de juiste gegevens in de juiste rij (H1017 en H1018) heb staan.
Ik heb echter geen idee hoe ik dat apart voor iedere kolom (H t/m CZ) op rij 1017 en 1018 kan laten bereken.

Rob
 
Laatst bewerkt:
Pffff, zo'n beetje de hele middag en avond lopen worstelen met VBA om mijn probleem op te lossen.

Tot op heden zonder resultaat :confused:
Morgen maar weer verder proberen.

Rob


P.S. Sorry voor de frustratie.
 
Ik heb het je in je vorige vraag al eens voorgedaan.
 
Harry,

Bedankt voor de hint.
Hoop dat het me nu wel gaat lukken.

Rob
 
Hary, Edmoor,

Intussen al weer 7 uur aan het worstelen en het is me niet gelukt.:(
Ik dacht een simpele oplossing te hebben met onderstaande code en het deel For deel telkens maar weer te herhalen t/m kolom CZ.
Zal zeker niet de meest charmante oplossing zijn maar mijn kennis reikt helaas niet verder dan hier.
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Select Case Target.Address(0, 0)
        Case "F1017", "F1018"
        Case Else
            Exit Sub
    End Select
    
    Cancel = True
    frmBezig.Show False
    frmBezig.Repaint
    
    On Error Resume Next
    For Each cl In Range("H13:H1013").SpecialCells(xlCellTypeConstants)
        If cl.DisplayFormat.Interior.Color = Range("F" & Target.Row).Interior.Color And _
           cl.DisplayFormat.Font.Color = Range("F" & Target.Row).Font.Color Then
            aantal = aantal + 1
        End If
    Next
    
    Range("H" & Target.Row).Value = aantal
    On Error Resume Next
    For Each cl In Range("I13:I1013").SpecialCells(xlCellTypeConstants)
        If cl.DisplayFormat.Interior.Color = Range("F" & Target.Row).Interior.Color And _
           cl.DisplayFormat.Font.Color = Range("F" & Target.Row).Font.Color Then
            aantal = aantal + 1
        End If
    Next
    
    Range("I" & Target.Row).Value = aantal - Range("H" & Target.Row).Value
    
    On Error Resume Next
    For Each cl In Range("J13:J1013").SpecialCells(xlCellTypeConstants)
    
    If cl.DisplayFormat.Interior.Color = Range("F" & Target.Row).Interior.Color And _
           cl.DisplayFormat.Font.Color = Range("F" & Target.Row).Font.Color Then
            aantal = aantal + 1
        End If
    Next
    
    Range("J" & Target.Row).Value = aantal - Range("I" & Target.Row).Value
    
    On Error Resume Next
    For Each cl In Range("K13:K1013").SpecialCells(xlCellTypeConstants)
    
    If cl.DisplayFormat.Interior.Color = Range("F" & Target.Row).Interior.Color And _
           cl.DisplayFormat.Font.Color = Range("F" & Target.Row).Font.Color Then
            aantal = aantal + 1
        End If
    Next
    
    Range("K" & Target.Row).Value = aantal - Range("J" & Target.Row).Value
    
    frmBezig.Hide
End Sub
Dit zorgt er voor dat er wordt geteld in rij 1017 en 1018 edoch de telling is fout.
In de bijlage heb ik de eerste 5 kolommen (H:L) handmatig geteld (rij 1014) en er zit een verschil in de telling met de code.

Ik kan ook niet middels F8 door de code heen gaan om te proberen te achterhalen waar het fout gaat.
Echt ik probeer zo goed mogelijk te begrijpen wat jullie code doet en naar jullie aanwijzingen te luisteren maar het is voor mij grotendeels cryptisch wat er in de code staat.
Het gevoel van frustratie en boosheid over mijn eigen onkunde neemt met het uur toe.
Hier ga ik zelf echt niet uitkomen.:(
Help....

Rob

Bekijk bijlage Kopie van Scholingstabel.xlsm
 
Laatst bewerkt:
Dit was een antwoord op je vorige vraag Rob.

Kijk eens naar het rode gedeelte en pas de rest van de code aan.
Code:
Sub tst()
Dim sv, i As Long, j As Long, blauw As Long, oranje As Long
[COLOR=#ff0000]sv = Sheets("Opl. status").Range("A1:BS1013")[/COLOR]
[COLOR=#ff0000]   For j = 8 To UBound(sv, 2)[/COLOR]
[COLOR=#ff0000]     For i = 13 To UBound(sv)[/COLOR]
        If Cells(i, j).DisplayFormat.Interior.Color = 16764057 Then blauw = blauw + 1
        If Cells(i, j).DisplayFormat.Interior.Color = 10079487 Then oranje = oranje + 1
     Next i
       Cells(1015, j) = blauw
       Cells(1016, j) = oranje
       blauw = 0
       oranje = 0
    Next j
End Sub
 
Harry,

Ook dat stukje code heb ik al geprobeerd te gebruiken en de code aan te passen.
Ik begrijp heel goed dat ik ook zelf iets moet zien te leren en dingen moet uitproberen.
Voor jullie is het allemaal niet zo moeilijk maar mij is het in de afgelopen 14 uur worstelen met de aanwijzingen niet gelukt.
Wat voor jullie vanzelfsprekend en logisch is dat is het voor mij in elk geval niet.
Ik heb het gevoel een stuk tekst in het Russisch te moeten lezen en leren zonder dat daar ook maar iets van een vertaling bij zit en vraag mij af wat ik tot nu toe uiteindelijk geleerd heb.
Het telkens maar weer verwezen worden heeft mij in elk geval niet veel geleerd.
Het heeft mij tot dusverre alleen maar een hoop frustratie opgeleverd omdat de aanwijzingen grotendeels abracadabra voor mij zijn.
Ik weet dat het aan mij ligt en dat jullie niet altijd een kant en klare oplossing met uitleg geven en dat is dan maar zo.
Het is mijn onkunde die tot die frustratie leidt en misschien moet ik excel en VBA wel helemaal aan de kant gooien.
Zeker als het, voor mij, lastigere vraagstukken betreft.
Mijn gevoel zegt mij nu dat ik me wel 3x bedenk voor ik weer een vraag stel want de frustratie van de afgelopen 14 uur hoef ik niet nog een keer.
Sorry dat ik het zelf niet kan.

Rob
 
Laat eens weten welke aantallen je precies verwacht op regels 1015 en 1016.
Hou er rekening mee dat wanneer een cel alleen blauw is gemaakt door de voorwaardelijke opmaak, de tekstkleur dan niet rood is.
 
Laatst bewerkt:
Edmoor,

Bedankt voor je reactie.
Op de regel 1015 staan per kolom de aantallen van blauwe cellen in de respectievelijke kolom.
Op de regel 1016 staan per kolom de aantallen van oranje cellen in de respectievelijke kolom.

De formule heb ik via E v R gekregen als oplossing van een eerdere vraag.
Hij werkt sneller als de VBA code en ik kan iedere gewenste celkleur aan de cel geven zonder dat dit van invloed is op de berekening en dat is heel handig.

Nu is het de bedoeling dat:
op regel 1017 per respectievelijke kolom de aantallen van blauwe cellen met een rode tekstkleur komen te staan en dat;
op regel 1018 per respectievelijke kolom de aantallen van oranje cellen met een rode tekstkleur komen te staan.

De code die jij me gaf werkt op zich prima met dien verstande dat hij in Kolom H1017 en H1018 de totalen neerzet van het hele bereik terwijl ik ze per respectievelijke kolom nodig heb.
De aanpassing die ik deed liet het aantal voor 1 kolom (H) zien maar niet die van de andere kolommen en daar liep ik vast.
De bijlage van mijn posting van vandaag 14:46 laat zien wat ik gedaan heb.
Alvast bedankt en hopelijk is het duidelijk genoeg.

Rob

PS. Is het handig om de berekening van het aantal cellen (blauw of oranje) met een rode tekstkleur alleen te laten berekenen als in rij 6 een getal is ingevoerd bij de geldigheidsduur. Wellicht maakt dat de berekening sneller?
 
Laatst bewerkt:
Als war E v R je gaf goed is, waarom zou je het dan anders willen?
 
Edmoor,

De formule die E v R mij gaf hoeft ook niets aan te veranderen die geeft in regel 1015 en 1016 exact aan wat ik wil weten.
Het gaat mij om het genereren van de gegevens voor regel 1017 en 1018.


Rob
 
Laatst bewerkt:
Overigens zat ik eerste instantie te denken aan een AANTAL.ALS of AANTALLEN.ALS formule waarbij een combinatie wordt gemaakt tussen de formule van E v R en de formule die in VO zorgt voor de rode tekstkleur. Dat kreeg ikzelf niet voor elkaar vandaar de vraag in het forum.

Rob
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan