Toon posts:

Excel:voorwaardelijk opmaak

Pagina: 1
Acties:
  • 133 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In excel kan men tot max. 3 voorwaarden gaan bij opmaak.
Maar ik heb eigenlijk 9 voorwaarden nodig nl.
- 7 verschillende personen elk een aparte kleur
- 1 voor als een groep aangeduid is (meer dan 1 persoon aangeduid is) dit geef ik kleur bruin
- 1 als niemand aangeduid is in de groep dan geef ik zwart
Hoe kan ik dit oplossen in excel???

Help me, please.

Anja :?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:34
Met VBA.
Stel, je wilt de kleur van cel A1 in sheet 1 afhankelijk maken van de waarde van cel A1.
Plak dan deze code in je visual basic editor, onder sheet1:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ActiveSheet.Cells(1, 1).Address Then
    'MsgBox Target.Font.Color
    'Hiermee test je kleurnummers.
    Select Case Target.Value
    Case 1
        Target.Font.Color = 255 'rood
    Case 2
        Target.Font.Color = 65280 'groen
    Case 3
        Target.Font.Color = 16711935 'roze
    Case "Pietje"
        Target.Font.Color = 6697881 'paars

    Case Else
        Target.Font.Color = 0 'automatisch, meestal zwart
    End Select
End If
End Sub

[ Voor 10% gewijzigd door onkl op 24-11-2004 14:36 ]


  • joostman
  • Registratie: Oktober 2003
  • Laatst online: 08-08 15:07
Ik heb dus dezelfde vraag als de poster.
Ik wil meer dan 3 voorwaardelijke functies in Excel hebben.

De uitleg van het script is voor mij niet duidelijk en weet ik ook niet of dit op elke sheet / probleem gebruikt kan worden...

Is het niet gewoon een register setting die veranderd kan worden (tweak) oid in excel? Waarom slechts 3?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:34
Voor zover ik weet is dit geen setting die je kan veranderen. Ter vertroosting: Je bent absoluut de enige niet die hiervan baalt. (Count me in)
Als je wilt wil ik de code die hierboven staat wel verduidelijken, alhier een kopietje met wat meer uitleg:
Visual Basic:
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
Private Sub Worksheet_Change(ByVal Target As Range)
'dit is een functie binnen de visual basic omgeving van Excel. Rag op Alt-F11
'en plak deze code in het blad waar je je "voorwaardelijke opmaak" wilt zien.

'De functie Worksheet_change wordt aangeroepen als er iets 
'verandert op het tabblad. Target is dan een verwijzing naar de 
'cel die verandert. 
If Target.Address = ActiveSheet.Range("A1").Address Then    
    'als het adres van de cel gelijk is aan het adres van de cel A1, dan moet
    'het onderstaande gebeuren.
    Select Case Target.Value 'zoek hieronder de "case" die 
    'gelijk is aan de waarde van target
    Case 1
        Target.Font.Color = 255 'rood
    Case 2
        Target.Font.Color = 65280 'groen
    Case 3
        Target.Font.Color = 16711935 'roze
    Case "Pietje"
        Target.Font.Color = 6697881 'paars
    Case Else 'in alle andere gevallen: maak de tekenkleur weer normaal
        Target.Font.Color = 0 'automatisch, meestal zwart
    End Select
End If
End Sub


Mocht het je niet helemaal duidelijk zijn wat je hiermee aanmoet, geef dan even een complete omschrijving van je probleem, dus welke cellen wanneer wat moeten doen, dan zijn er vast goede hints te geven.

Verwijderd

onkl schreef op vrijdag 28 januari 2005 @ 11:08:
Voor zover ik weet is dit geen setting die je kan veranderen. Ter vertroosting: Je bent absoluut de enige niet die hiervan baalt. (Count me in)
Als je wilt wil ik de code die hierboven staat wel verduidelijken, alhier een kopietje met wat meer uitleg:

vb-code

Mocht het je niet helemaal duidelijk zijn wat je hiermee aanmoet, geef dan even een complete omschrijving van je probleem, dus welke cellen wanneer wat moeten doen, dan zijn er vast goede hints te geven.
Ik heb dit net even geprobeerd en het werkt inderdaad. Ik vraag me alleen wel af hoe je er nu voor zorgt dat het voor bepaalde cellen geldt (bijv B1:B7). Ik heb dit in de code eens veranderd maar waarschijnlijk niet op de goede manier.

En een andere vraag die zo in me opkomt...als je een tweede script wil maken voor andere cellen met andere waarden, kun je dan dat stuk script kopieren en ergens anders in Sheet1 plakken (in de vb-editor) en daarna de range en de criteria aanpassen...of is dat erg naief?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:34
1: een bereik i.p.v. een enkele cel:
Gebruik i.p.v. regel 8 in bovenstaand voorbeeld:
Visual Basic:
1
If Not (Intersect(Target, ActiveSheet.Range("B1:B7")) Is Nothing) Then

De functie intersect zoekt naar cellen die én in Target én in B1:B7 zitten. Zijn die er (het resultaat is niet "Nothing") ga dan door.
2: Meer dan 1 conditie: Nee, dat gaat niet zo. Als jij een cel veranderd gaat Excel op zoek naar de functie Worksheet_Change. Daar mag er maar 1 per tabblad van zijn.
Wat wel kan is meer dan 1 if lus in de functie zetten:
Visual Basic:
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
39
40
41
42
Private Sub Worksheet_Change(ByVal Target As Range)
'dit is een functie binnen de visual basic omgeving van Excel. Rag op Alt-F11
'en plak deze code in het blad waar je je "voorwaardelijke opmaak" wilt zien.

'De functie Worksheet_change wordt aangeroepen als er iets 
'verandert op het tabblad. Target is dan een verwijzing naar de 
'cel die verandert. 
If Not (Intersect(Target, Union(ActiveSheet.Range("B1:B7"),ActiveSheet.Range("A1"))) Is Nothing) Then
    'als de cel in A1 of in B1:B7 valt, dan moet
    'het onderstaande gebeuren.
    Select Case Target.Value 'zoek hieronder de "case" die 
    'gelijk is aan de waarde van target
    Case 1
        Target.Font.Color = 255 'rood
    Case 2
        Target.Font.Color = 65280 'groen
    Case 3
        Target.Font.Color = 16711935 'roze
    Case "Pietje"
        Target.Font.Color = 6697881 'paars
    Case Else 'in alle andere gevallen: maak de tekenkleur weer normaal
        Target.Font.Color = 0 'automatisch, meestal zwart
    End Select
End If
If Target.Address = ActiveSheet.Range("E11").Address Then    
    'als het adres van de cel gelijk is aan het adres van de cel E11, dan moet
    'het onderstaande gebeuren.
    Select Case Target.Value 'zoek hieronder de "case" die 
    'gelijk is aan de waarde van target
    Case "test"
        Target.Font.Color = 255 'rood
    Case "andere test"
        Target.Font.Color = 65280 'groen
    Case "en nog wat"
        Target.Font.Color = 16711935 'roze
    Case "Pietje"
        Target.Font.Color = 6697881 'paars
    Case Else 'in alle andere gevallen: maak de tekenkleur weer normaal
        Target.Font.Color = 0 'automatisch, meestal zwart
    End Select
End If
End Sub

(let op de Union in regel 8 overigens, zo kan je dezelfde regel laten gelden voor A1 en B1:B7)
Regels 8-24 regelen het gedrag van cel A1 en B1:B7, regel 25-eind van cel E11. En zo kan je rustig doorgaan.
Overigens:
als je nieuwe kleuren zoekt, andere dingen wilt dan tekenkleur etc., neem dan een macro op waarin je dat doet.
Bijvoorbeeld:
Visual Basic:
1
2
3
4
5
6
7
    Range("E1").Select
    Selection.Font.ColorIndex = 7
    Range("E2").Select
    With Selection.Interior
        .ColorIndex = 50
        .Pattern = xlSolid
    End With

zet de tekenkleur van E1 op paars en de achtergrondkleur van e2 op ranzig groen.
Target.Font.ColorIndex = 7 en
Target.Interior.ColorIndex = 50 doen dat dan in je macro.

Verwijderd

Ok. Ik ga dit meteen proberen zodra ik hier tijd voor heb.

Thanks Onkl.... :)
Pagina: 1