Excel voorwaardelijke opmaak met formule doortrekken

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Telin
  • Registratie: Januari 2020
  • Laatst online: 22:06
Voor mijn werk ben ik nu bezig met een aardig grote excel sheet.
Nu wil ik de kleur van een cel aan de hand van de waarde in die cel laten aanpassen. Hiervoor gebruik ik voorwaardelijke opmaak met formule.

In dit voorbeeld heb ik de regel zo opgesteld dat cel A3 van kleur verandert naar aanleiding van het getal in die cel in verhouding tot de waardes die ik heb aangeven;

waarde cel C3 is minimum
waarde cel D3 is middelpunt
waarde cel E3 is maximum

In de uiteindelijke sheet zullen de minimum, middelpunt en maximum waardes per regel verschillen en daarom denk ik dat het makkelijkst is deze in aparte cellen te definiëren.

Afbeeldingslocatie: https://tweakers.net/i/JA6cZRf123PoT-f9OtE4FLuW4CE=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/A7CQC4YqYd7j7RwcWaMCXLGI.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/tjVs2s8uIAXRBiicAcvsGuJrvY8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/wjku2LvBLHgdnap2q5E3MgkK.jpg?f=user_large

Deze opzet werkt een geeft het gewenste resultaat/gedrag voor cel A3.

Mijn vraag is hoe kan ik nu makkelijk/snel deze opmaak doortrekken naar cellen A4 t/m A7 zodat cel A4 de min/middel/max waardes gebruikt gedefinieerd in C4, D4 en E4. Cel A5 de min/middel/max waardes gebruikt gedefinieerd in cel C5, D5 en E5 enz. enz.

Als ik cel A3 doortrek naar beneden krijgen cel A4 t/m A7 wel de opmaak maar gebruiken ze de waardes gedefinieerd in C3, D3 en E3.

Lijkt mij dat er toch een manier moet zijn om dit snel door te trekken/kopiëren naar de cellen A4 t/m A7 terwijl de gedefinieerde cellen ook meelopen naar C4, C5, C6 enz. enz.

Als het nu om een paar regels gaat is het nog wel te doen om handmatig voor iedere cel/regel handmatig de voorwaardelijke opmaak in te voeren maar uiteindelijk is het de bedoeling dat dit toegepast wordt in een sheet van een aantal honderd regels.

Of zit ik nu op een hele verkeerde weg?
Ik ben absoluut geen Excel guru dus wellicht is er een andere/betere manier op tot hetzelfde resultaat te komen?

...

Ik maak gebruik van Microsoft Windows 10 Enterprise 21H1 x64 en Microsoft Excel Versie 2111 Build 16.0.14701.20206 x64
...

Uiteraard heb ik zitten googlen en wellicht dat ik niet de juiste zoektermen gebruik voor wat ik wil maar ik kan er niet heel veel over terug vinden. Op de Microsoft support forums heb ik een topic gevonden die denk ik over dezelfde vraag gaat en het antwoord daar was dat de persoon maar contact moet opnemen met tech support :?

Op een Belgisch forum heb ik ook denk ik iets vergelijkbaars gevonden en daar wordt als oplossing gebracht dat je de cellen moet "doorvoeren" uit dat topic wordt mij niet duidelijk hoe wat wat je dan zou moeten doorvoeren dus ik heb zelf wat zitten spelen met de optie zonder enig resultaat.
...

Hopelijk kan een van jullie mij helpen of in de juiste richting wijzen.

Beste antwoord (via Telin op 13-12-2021 12:19)


  • g0tanks
  • Registratie: Oktober 2008
  • Nu online

g0tanks

Moderator CSA
Om te bereiken wat je wil moet je VBA gebruiken die elke regel afgaat en stuk voor stuk de voorwaardelijke opmaak instelt. Ik heb hieronder een voorbeeldje voor je gemaakt met hulp van Stackoverflow. Je mag zelf even uitvogelen hoe je de code draait en aanpast naar jouw situatie. ;)

Afbeeldingslocatie: https://tweakers.net/i/M50EzEZvrEhSc1_KgvLuKlWDXnY=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/8e7wS2oDKx3xB72mMlE5sLG3.png?f=user_large

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Option Explicit
Sub ApplyConditionalFormatting()
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Sheets("Sheet1") ' change to your sheet here
    Dim rw As Long
    Dim rng As Range

    For rw = 2 To 6 ' change to your respective rows
        With ws
            Set rng = .Range(.Cells(rw, "A"), .Cells(rw, "A")) ' change to your respective columns

            With rng
                .FormatConditions.AddColorScale ColorScaleType:=3
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
            End With

            With rng.FormatConditions(1)
                With .ColorScaleCriteria(1)
                    .Type = xlConditionValueNumber
                    .Value = "='" & ws.Name & "'!$B$" & rw
                    .FormatColor.Color = 7039480
                End With

                With .ColorScaleCriteria(2)
                    .Type = xlConditionValueFormula
                    .Value = "='" & ws.Name & "'!$C$" & rw
                    .FormatColor.Color = 8711167
                End With

                With .ColorScaleCriteria(3)
                    .Type = xlConditionValueFormula
                    .Value = "='" & ws.Name & "'!$D$" & rw
                    .FormatColor.Color = 8109667
                End With
            End With
        End With
    Next rw
End Sub

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW

Alle reacties


  • Telin
  • Registratie: Januari 2020
  • Laatst online: 22:06
Frappuccino schreef op zaterdag 11 december 2021 @ 17:25:
Heb je het al geprobeerd zonder $ voor het getal? Dus $C3 ipv $C$3, $D3 ipv $D$3 en $E3 ipv $E$3.
Dit mag niet van excel:

Afbeeldingslocatie: https://tweakers.net/i/iYc85_WtNqgIAEE3rjsEx5iffvs=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/hfh0qZBYKs2zMaretXZifoi6.jpg?f=user_large

Acties:
  • Beste antwoord

  • g0tanks
  • Registratie: Oktober 2008
  • Nu online

g0tanks

Moderator CSA
Om te bereiken wat je wil moet je VBA gebruiken die elke regel afgaat en stuk voor stuk de voorwaardelijke opmaak instelt. Ik heb hieronder een voorbeeldje voor je gemaakt met hulp van Stackoverflow. Je mag zelf even uitvogelen hoe je de code draait en aanpast naar jouw situatie. ;)

Afbeeldingslocatie: https://tweakers.net/i/M50EzEZvrEhSc1_KgvLuKlWDXnY=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/8e7wS2oDKx3xB72mMlE5sLG3.png?f=user_large

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Option Explicit
Sub ApplyConditionalFormatting()
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Sheets("Sheet1") ' change to your sheet here
    Dim rw As Long
    Dim rng As Range

    For rw = 2 To 6 ' change to your respective rows
        With ws
            Set rng = .Range(.Cells(rw, "A"), .Cells(rw, "A")) ' change to your respective columns

            With rng
                .FormatConditions.AddColorScale ColorScaleType:=3
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
            End With

            With rng.FormatConditions(1)
                With .ColorScaleCriteria(1)
                    .Type = xlConditionValueNumber
                    .Value = "='" & ws.Name & "'!$B$" & rw
                    .FormatColor.Color = 7039480
                End With

                With .ColorScaleCriteria(2)
                    .Type = xlConditionValueFormula
                    .Value = "='" & ws.Name & "'!$C$" & rw
                    .FormatColor.Color = 8711167
                End With

                With .ColorScaleCriteria(3)
                    .Type = xlConditionValueFormula
                    .Value = "='" & ws.Name & "'!$D$" & rw
                    .FormatColor.Color = 8109667
                End With
            End With
        End With
    Next rw
End Sub

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Telin,
Als je het jezelf niet al te moeilijk wil maken zou je 4 regels vw. opmaak kunnen instellen (met 4 kleuren), waarmee je redelijk in de buurt komt van je voorbeeld hierboven. Die regels moet je slechts 1 keer instellen voor alle cellen in kolom A. Doe het volgende:
1. Selecteer A3:A7 (of tot zover als in kolom A de regels moeten gelden) en laat die cellen geselecteerd staan tot je alle 4 regels hebt ingevoerd.
2. Duid bij vw. opmaak bij elke regel aan dat je een formule wil gebruiken om te bepalen welke cellen moeten worden opgemaakt.
3. Stel achtereenvolgens de volgende regels in:
=A3<GEMIDDELDE(C3;D3) --> rood.
=EN(A3>=GEMIDDELDE(C3;D3);A3<D3) --> oranje.
=EN(A3>=D3;A3<=GEMIDDELDE(D3;E3)) --> geel
=EN(A3>=GEMIDDELDE(D3;E3);A3<=E3) --> groen.
Hieronder een voorbeeld wat je dan als resultaat kunt krijgen.

Afbeeldingslocatie: https://tweakers.net/i/O5yl9VRqX98C78Fi4MrphV4tAhI=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/htoLViEqmlNkZvl1Q3EF0Hzd.jpg?f=user_large
Pagina: 1