Excel Makro f. "Bedingte Formatierung"

zarilla

Mitglied
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.
 
würde es ungefähr so machen:

Code:
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
 
danke das ist genau was ich brauche.
wie kann ich herausfinden ob die Zelle in einem bestimmten Bereich (zb. D4:O18 ) ist ?
 
if...-Abfrage

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

Code:
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
 
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.
 
Zuletzt bearbeitet:
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.
 
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:

Code:
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
 
In der Chip Februar 2004 habe ich under Tipps&Tricks etwas gefunden:

VBA-Editor starten und Programmcode editieren:
Code:
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.
 

Anhänge

  • beispiel2.jpg
    beispiel2.jpg
    27,7 KB · Aufrufe: 226
Zuletzt bearbeitet:
Zurück