# Excel Makro f. "Bedingte Formatierung"



## zarilla (22. Juli 2004)

Hallo,
gleich zum Anfang: ich hab keine Ahnung von VBA u. VB und so weiter. 
Programmieren kann ich aber mehr oder weniger (PHP,Java, bisschen C,C++).

Ich soll eine schematische Darstellung eines Gerüstaufbaus entwerfen, bei der man die Höhen der einzelnen GerüstFelder eintragen kann (zwecks Volumenberechnung).
Und umso höher das wird umso *dunkelgelber* soll die Zelle werden  
Wenn also eine bestimmte Zelle geändert wird (Change ) soll ihre Hintergrundfarbe entsprechend des eingegeben Wertes angepasst werden.
Dafür könnte man eigentlich auch die Bedingte Formatierung nehmen, WENN die nicht auf 3 Bedingungen beschränkt wäre (warum auch immer das so ist...)


Ein guter Link oder ein paar Code-schnipsel würden mir schon weiterhelfen.
Danke schon mal.


----------



## thekorn (22. Juli 2004)

würde es ungefähr so machen:


```
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
For Each zelle In Target
    If zelle.Value > 255 Then
        wert = 255
    Else
        wert = zelle.Value
    End If
    zelle.Interior.Color = RGB(255, 255 - wert, 0)
Next zelle

End Sub
```

WICHTIG:  Das CHANGE-ereignis tritt zum Beispiel auch dann auf, wenn komplette Zeilen/Spalten gelöscht werden, hier würde dann im obigen Beispiel ein KOMPLETTE Zeile/Spalte formatiert werden, musst also noch ein bisschen weiter entwickeln.

gruß
thekorn


----------



## zarilla (22. Juli 2004)

danke das ist genau  was ich brauche.
wie kann ich herausfinden ob die Zelle in einem bestimmten Bereich (zb. D4:O18 )  ist ?


----------



## thekorn (23. Juli 2004)

*if...-Abfrage*

Mit einer If-Abfrage ist dies, wenn auch nicht  sehr elegant möglich:


```
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

For Each zelle In Target
    If zelle.Row >= 4 And zelle.Row <= 18 And zelle.Column >= 4 And zelle.Column <= 15 Then
        Select Case zelle.Value
            Case Is = 0
                zelle.Interior.ColorIndex = xlNone
            Case Is > 255
                zelle.Interior.Color = RGB(255, 0, 0)
            Case Else
                zelle.Interior.Color = RGB(255, 255 - zelle.Value, 0)
        End Select
    End If
Next zelle

End Sub
```

gruß
thekorn


----------



## zarilla (23. Juli 2004)

jop das is gut so.
Jetz  muss ich nur noch sehen wie ich feinere Abstufungen hinbekomme weil sich alles im Bereich von 10 m bewegt.


----------



## thekorn (23. Juli 2004)

tja, das habe ich mich auch schon gefragt, eigendlich sind mit der RGB-Funktion schon sehr feine abstufungen möglich, excel stellt sie, bei mir zumindest, nicht dar.


----------



## thekorn (23. Juli 2004)

*Farbproblem*

Excel stellt wohl nur wenige Farben zur Verfügung. Meine Idee ist jetzt einfach, dass ich alle Gelb- bis Rot-Werte (mit weiß eingerechnet gibt es 7 !? )in ein Array packe, und die auf den Zellenwert anwende:


```
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim farbe

farbe = Array(2, 36, 6, 44, 45, 46)

For Each zelle In Target
    If zelle.Row >= 4 And zelle.Row <= 18 And zelle.Column >= 4 And zelle.Column <= 15 Then
        Select Case zelle.Value
            Case Is = 0
                zelle.Interior.ColorIndex = xlNone
            Case Is >= 70
                zelle.Interior.ColorIndex = 3
            Case Else
            zelle.Interior.ColorIndex = farbe(Application.WorksheetFunction.RoundDown(zelle.Value / 10, 0))
        End Select
    End If
Next zelle

End Sub
```

gruß
thekorn


----------



## duckdonald (30. Juli 2004)

In der Chip Februar 2004 habe ich under Tipps&Tricks etwas gefunden:

VBA-Editor starten und Programmcode editieren:

```
Public Function Farbsumme(basis As Range, reihe As Range)
farbe = basis.Interior.ColorIndex
s = 0
For Each sc In reihe
If sc.Interior.ColorIndex = farbe Then
s = s + sc.Value
End If
Next
Farbsumme = s
End Function
```
Danach über >Datei / Schließen und zurück zu Excel<

Die Funktion benötigt als Argument zwei Werte.
Zuerst eine Zelladresse mit dem gewünschten Farbhintergrund und dann durch ein Semikolon getrennt den Zellbereich.


----------

