Hallo,
habe eine Arbeitsmappe erstellt.
Diese kannst Du hier herunterladen: https://www.dropbox.com/s/6aacow37gtsnoxr/Bedingte%20Formatierung%20Daten.xlsm?dl=0
Bei dieser Lösung habe i ch einen Ansatz gewählt, bei der direkt nach dem Ändern einer Zelle in der Daten-Tabelle die Zelle geprüft wird.
Modul modTypes:
Public Type Grenzwerte
Sollwert As Long
ToleranzOben As Long
ToleranzUnten As Long
Durchmesser As String
End Type
Tabelle Daten:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myCnf As New clsConfig
Application.EnableEvents = False
Dim Data As Grenzwerte
Data = myCnf.ReadGrenzwerte(Target)
If Target.Value = "" Then
Target.Interior.ColorIndex = 15
Else
If Data.Durchmesser = "aussen" Then
Target.Interior.ColorIndex = 38 ' rot
If Target.Text <= Data.Sollwert + Data.ToleranzOben And Target.Text >= Data.Sollwert + Data.ToleranzUnten Then Target.Interior.ColorIndex = 10 ' grün
If Target.Text > Data.Sollwert + Data.ToleranzOben Then Target.Interior.ColorIndex = 36 ' gelb
ElseIf Data.Durchmesser = "innen" Then
If Target.Text = "" Then
Target.Interior.ColorIndex = 15 ' leere Zelle grau färben
Else
Target.Interior.ColorIndex = 38 'rot
If Target.Text <= (Data.Sollwert + Data.ToleranzOben) And Target.Text >= (Data.Sollwert + Data.ToleranzUnten) Then Target.Interior.ColorIndex = 10 'grün
If Target.Text < (Data.Sollwert + Data.ToleranzUnten) Then Target.Interior.ColorIndex = 36 'gelb
End If
End If
End If
Application.EnableEvents = True
End Sub
Klasse clsConfig:
Private Function GetDataRange() As Range
With Worksheets("Einstellungen")
Set GetDataRange = .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, 5))
End With
End Function
Function ReadGrenzwerte(Target As Range) As Grenzwerte
Dim rngData As Range
Dim rngCells As Range
Dim rngRead As Range
Set rngData = GetDataRange
For Each rngCells In rngData.Columns(1).Cells
If Left(rngCells.FormulaR1C1, 1) = "=" Then
If Not Intersect(Range(rngCells.FormulaLocal), Target) Is Nothing Then
For Each rngRead In Intersect(rngData, rngCells.EntireRow).Cells
Select Case rngRead.Column
Case 2
ReadGrenzwerte.Sollwert = rngRead.Value
Case 3
ReadGrenzwerte.ToleranzOben = rngRead.Value
Case 4
ReadGrenzwerte.ToleranzUnten = rngRead.Value
Case 5
ReadGrenzwerte.Durchmesser = rngRead.Value
Case Else
End Select
Next
Exit For
End If
End If
Next
End Function
Damit diese Lösung funktioniert, muss in der Tabelle "Einstellungen" folgende Inhalte eingefügt werden:
Spalte |
Sollwert |
ToleranzOben |
ToleranzUnten |
Durchmesser |
Formel |
20 |
5 |
7 |
innen |
Formel |
25 |
7 |
3 |
aussen |
Die Werte können natürlich angepasst werden.
Im Feld Spalte muss ein Verweis zu der Spalte eingesetzt werden:
Bsp: A2: =Daten!A:A
A3: =Daten!B:B
In der Tabelle "Daten" stehen nur noch die auszuwertenden Zahlen wie Bsp.:
12 |
45 |
6 |
6 |
4 |
|
34 |
|
87 |
|
3 |
|
6 |
|
15 |
|
17 |
|
Die Tabelle 1 wird nicht benötigt. Diese wrde nur als Testtabelle eingefügt, um zu sehen, wie der VBA-Code funktioniert
LG, BigBen
|