Hét vraag- en antwoordplatform van Nederland

Met Excel-VBA een cel kleuren afhankelijk van de inhoud van de cel?

Met voorwaardelijke opmaak heb ik dit voor elkaar. Als er 'A' staat dan moet de cel blauw kleuren (kleurnr. 15773696), etc. Zo zijn er in totaal 5 kleuren. Het gekke is dat je deze kleur niet geselecteerd ziet bij Start - Lettertype - Opvulling.
Deze kleuren kunnen per cel verschillend in een bereik. Zo moet elke cel in het bereik worden onderzocht op de inhoud ('A', 'H', 'N' of 'X') en daar moet dan de juiste 'harde' kleur komen. Als deze cel dan is ingekleurd door de VBA-code (middels een macro) en ik verander vervolgens de waarde van de cel dan moet de kleur blijven staan (vandaar de term 'harde kleur'). In tegenstelling tot de 'softe' kleur door de 'Voorwaardelijke opmaak'. De kleurnrs voor H, N en X vul ik zelf later wel in.

Vraag: hoe maak ik zo'n VBA-code dat cellen in een bereik één-voor-één gaat onderzoeken en kleuren. Bv A1:D20

Ik heb al een macro gemaakt dat 1 cel blauw kleurt zonder naar de inhoud van de cel te kijken:

Sub Kleur_de_cel_blauw()
'
' Kleur_de_cel_blauw Macro
'

'
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub

Verwijderde gebruiker
7 jaar geleden
13.5K
paulus811
7 jaar geleden
Zet om de macro een do - while statement. 1e regel is dan do while activecell.value <> "" Laatste regels zijn
Activecell.offset(1;0).select
Wend Zoiets, ik geef antwoord via de app dus kan het niet controleren, maar in deze richting moet je het zoeken.
Verwijderde gebruiker
7 jaar geleden
Volgens mij loop je dan niet door de rijen en de kolommen, maar slechts door één van de twee.
paulus811
7 jaar geleden
Klopt, voor meer kolommen spring je aan het eindvterug naar regel 1 en begin je opnieuw

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Het beste antwoord

Hier is een routine die de kleur verandert als je de waarde van een cel verandert alleen als deze wit is.
Je moet zelf de waarden nog invullen. Je kunt er nog wat toeters en bellen in aanbrengen om te zorgen dat hij niet steeds het hele blad hoeft door te spitten.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim R&, C&
For R = Sheet1.UsedRange.Row To Sheet1.UsedRange.Row + Sheet1.UsedRange.Rows - 1
For C = Sheet1.UsedRange.Column To Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns - 1
If Range(Cells(R, C)).Interior.Color = vbWhite Then
If Cells(R, C) = "" Then
Range(Cells(R, C)).Interior.Color = ""
ElseIf Cells(R, C) = "" Then
Range(Cells(R, C)).Interior.Color = ""
ElseIf Cells(R, C) = "" Then
Range(Cells(R, C)).Interior.Color = ""
End If
End If
Next
Next
End Sub
(Lees meer...)
Verwijderde gebruiker
7 jaar geleden
Verwijderde gebruiker
7 jaar geleden
Dank voor je uitvoerige antwoord! Intussen heb ik al een goede code gekregen.
Verwijderde gebruiker
7 jaar geleden
Dit antwoord kwam het dichtst bij de gezochte oplossing en was het meest uitvoerig.

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 2500
Gekozen afbeelding