IsEmpty() und Ampel-Regel

Bild

Betrifft: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 22.04.2015 10:14:48

Guten Morgen,
ich versuche momentan mithilfe von IsEmpty den Wert einer Zelle zu überprüfen und daraufhin eine Zahl in eine andere Zelle zu schreiben, welche mit der Ampel-Regel belegt ist.
Kurze Erläuterung der Ampelwerte:
B5 & C5 leer macht grün
B5 = 0 & C5 = nicht leer macht rot
B5 = 1 & C5 = nicht leer macht gelb
alles andere soll -1 ergeben, somit schwarz
Dasselbe gilt für B6 und C6.
Hier der Code:


Sub Ampel()
Dim B5b As Boolean, B6b As Boolean, C5b As Boolean, C6b As Boolean, B5 As Integer, B6 As  _
Integer, C5 As String, C6 As String
'B5b = Worksheets("Template").Range("B5")
'B6b = Worksheets("Template").Range("B6")
B5 = Worksheets("Template").Range("B5") '.Value
B6 = Worksheets("Template").Range("B6") '.Value
'C5b = Worksheets("Template").Range("C5")
'C6b = Worksheets("Template").Range("C6")
C5 = Worksheets("Template").Range("C5")
C6 = Worksheets("Template").Range("C6")
If IsEmpty(B5) = True And IsEmpty(C5) = True Or IsEmpty(B6) = True And IsEmpty(C6) = True Then
Worksheets("Template").Range("D4").Value = 2 'green light
    ElseIf B5 = 0 And IsEmpty(C5) = False Or B6 = 0 And IsEmpty(C6) = False Then
    Worksheets("Template").Range("D4").Value = 0 'red light
        ElseIf B5 = 1 And IsEmpty(C5) = False Or B6 = 1 And IsEmpty(C6) = False Then
        Worksheets("Template").Range("D4").Value = 1 'yellow light
            Else
            Worksheets("Template").Range("D4").Value = -1 'black light
End If
End Sub

Egal welche Werte ich in Excel eingebe, am Ende wird D4 = 0 gesetzt.
Boolean, Integer, String, bringt mich ein bisschen durcheinander. Muss ich dafür - wie schon im Code angedeutet - neue Variablen definieren?
Danke für eure Hilfe!
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Nepumuk
Geschrieben am: 22.04.2015 10:49:46
Hallo,
Empty ist ein Wert den nur ein Variant annehmen kann.
Gruß
Nepumuk

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 22.04.2015 12:26:23
Hallo Nepumuk,
okay, gut.
Reicht es demnach aus, wenn ich C5 und C6 als Variant setze?
Mein Wissen rund um VBA ist noch recht überschaubar. Kannst du mir bitte noch ein paar weitere Hilfsansätze geben?
Danke!
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Nepumuk
Geschrieben am: 22.04.2015 12:47:05
Hallo,
so?

Public Sub Ampel()
    
    Dim B5 As Variant, B6 As Variant, C5 As Variant, C6 As Variant
    
    With Worksheets("Template")
        
        B5 = .Range("B5").Value
        B6 = .Range("B6").Value
        C5 = .Range("C5").Value
        C6 = .Range("C6").Value
        
        If IsEmpty(B5) And IsEmpty(C5) Or IsEmpty(B6) And IsEmpty(C6) Then
            .Range("D4").Value = 2 'green light
        ElseIf B5 = 0 And Not IsEmpty(C5) Or B6 = 0 And Not IsEmpty(C6) Then
            .Range("D4").Value = 0 'red light
        ElseIf B5 = 1 And Not IsEmpty(C5) Or B6 = 1 And Not IsEmpty(C6) Then
            .Range("D4").Value = 1 'yellow light
        Else
            .Range("D4").Value = -1 'black light
        End If
    End With
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 22.04.2015 13:21:17
Hallo Nepumuk,
wow! Danke! So sauber und übersichtlich.
Jedoch scheint es leider nur zufällig erfolgreich zu sein.
Blöde Frage, aber kann der Code zu schnell ausgefürt werden? Sodass die Werte einfach nicht sauber gespeichert/gesetzt werden?
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Nepumuk
Geschrieben am: 22.04.2015 14:12:38
Hallo,
zu schnell gibt es nicht, wenn dann liegt das an den Bedingungen. Prüf das nochmal nach, wobei du bedenken musst eine leere Zelle liefert auch immer den Wert 0 zurück wenn du die Value-Eigenschaft abfragst.
Gruß
Nepumuk

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 23.04.2015 08:43:58
Morgen Nepumuk,
es scheint jetzt zu funktionieren:

Sub Ampel1()
    
    Dim B5 As Variant, B6 As Variant, C5 As Variant, C6 As Variant
    
    With Worksheets("Template")
        
        B5 = .Range("B5")
        B6 = .Range("B6")
        C5 = .Range("C5")
        C6 = .Range("C6")
        
        If ((IsEmpty(B5) = True And Not B5 = 0) And IsEmpty(C5) = True) Or ((IsEmpty(B6) = True  _
And Not B6 = 0) And IsEmpty(C6) = True) Then
            .Range("D4").Value = 2 'green light
        ElseIf (B5 = "0" And IsEmpty(C5) = False) Or (B6 = "0" And IsEmpty(C6) = False) Then
            .Range("D4").Value = 0 'red light
        ElseIf (B5 = "1" And IsEmpty(C5) = False) Or (B6 = "1" And IsEmpty(C6) = False) Then
            .Range("D4").Value = 1 'yellow light
        Else
            .Range("D4").Value = -1 'black light
        End If
    End With
    'Debug.Print B5, C5, B6, C6
End Sub
Danke nochmal!
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 23.04.2015 13:30:06
Nochmal Morgen Nepumuk,
ich möchte dich nochmal um Hilfe bitten.
Den Code, den ich diesen morgen schon gepostet habe, möchte ich in der Hinsicht verändern, dass er auf mehrere Range("X:X") zielt; undzwar auf B5:B6; B8:B9; B11:B12; B14:B15; B17:B18.
Das bedeutet zwischen den Zeilen ist immer eine Zeile, welche unberührt lassen soll (hier ist die Überschrift und die Ampel selber platziert).
Schlussfolgernd muss der Code immer diese eine Zeile überspringen und die nachfolgenden Zellen formattieren.
Wie realisiere ich das am besten? Kannst du mir Starthilfe geben und ich bastel mich dann durch?
Vielen Dank dafür!
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Nepumuk
Geschrieben am: 23.04.2015 14:56:42
Hallo,
lade doch einfach eine Mustertabelle hoch.
Gruß
Nepumuk

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 24.04.2015 09:12:00
Guten Morgen Nepumuk,
hier die Datei:
https://www.herber.de/bbs/user/97279.xlsx
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Nepumuk
Geschrieben am: 26.04.2015 15:02:03
Hallo,
so?

Public Sub Ampel()
    
    Dim B5 As Variant, B6 As Variant, C5 As Variant, C6 As Variant
    Dim lngIndex As Long
    
    With Worksheets("Template")
        
        For lngIndex = 5 To 17 Step 3
            
            B5 = .Cells(lngIndex, 2).Value
            B6 = .Cells(lngIndex + 1, 2).Value
            C5 = .Cells(lngIndex, 3).Value
            C6 = .Cells(lngIndex + 1, 3).Value
            
            If IsEmpty(B5) And IsEmpty(C5) Or IsEmpty(B6) And IsEmpty(C6) Then
                .Cells(lngIndex - 1, 4).Value = 2 'green light
            ElseIf B5 = 0 And Not IsEmpty(C5) Or B6 = 0 And Not IsEmpty(C6) Then
                .Cells(lngIndex - 1, 4).Value = 0 'red light
            ElseIf B5 = 1 And Not IsEmpty(C5) Or B6 = 1 And Not IsEmpty(C6) Then
                .Cells(lngIndex - 1, 4).Value = 1 'yellow light
            Else
                .Cells(lngIndex - 1, 4).Value = -1 'black light
            End If
        Next
    End With
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 27.04.2015 08:51:17
Guten Morgen Nepumuk,
ein Traum! Ich danke dir vielmals!
Habe nur noch den Code ein wenig angepasst.

Public Sub Ampel()
    
    Dim B5 As Variant, B6 As Variant, C5 As Variant, C6 As Variant
    Dim lngIndex As Long
    
    With Worksheets("Template")
        
        For lngIndex = 5 To 17 Step 3
            
            B5 = .Cells(lngIndex, 2).Value
            B6 = .Cells(lngIndex + 1, 2).Value
            C5 = .Cells(lngIndex, 3).Value
            C6 = .Cells(lngIndex + 1, 3).Value
            
            If ((IsEmpty(B5) = True And Not B5 = 0) And IsEmpty(C5) = True) Or ((IsEmpty(B6) =  _
True And Not B6 = 0) And IsEmpty(C6) = True) Then
                .Cells(lngIndex - 1, 4).Value = 2 'green light
            ElseIf (B5 = "0" And IsEmpty(C5) = False) Or (B6 = "0" And IsEmpty(C6) = False)  _
Then
                .Cells(lngIndex - 1, 4).Value = 0 'red light
            ElseIf (B5 = "1" And IsEmpty(C5) = False) Or (B6 = "1" And IsEmpty(C6) = False)  _
Then
                .Cells(lngIndex - 1, 4).Value = 1 'yellow light
            ElseIf (B5 = "2" And IsEmpty(C5) = False) Or (B6 = "2" And IsEmpty(C6) = False)  _
Then
                .Cells(lngIndex - 1, 4).Value = 2 'yellow light
            Else
                .Cells(lngIndex - 1, 4).Value = -1 'black light
            End If
        Next
    End With
End Sub

Angenehmen Montag!
Frederik

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: ransi
Geschrieben am: 22.04.2015 11:29:18
Hallo Frederik,
Mit den vielen If, elseif, and, or kann man sich schonmal verhaspeln.
Versuch mal so:

Option Explicit

Sub machs()
    With Worksheets("Template")
        .Range("D4").Value = "Schwarz"
        If .Range("B5").Text & "DUMMY" & .Range("C5").Text = "DUMMY" Then .Range("D4").Value = "gruen"
        If .Range("B5").Text & "DUMMY" & .Range("C5").Text Like "0DUMMY?*" Then .Range("D4").Value = "rot"
        If .Range("B5").Text & "DUMMY" & .Range("C5").Text Like "1DUMMY?*" Then .Range("D4").Value = "gelb"
    End With
End Sub


ransi

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: ransi
Geschrieben am: 22.04.2015 11:38:35
Hallo Frederic,
Damit das für andere Zellen auch gilt, einfach ne schleife drumrum binden.

Option Explicit



Sub machs()
    Dim I As Integer
    For I = 5 To 6
        With Worksheets("Template")
            .Range("D" & I - 1).Value = "Schwarz"
            If .Range("B" & I).Text & "DUMMY" & .Range("C" & I).Text = "DUMMY" Then .Range("D" & I - 1).Value = "gruen"
            If .Range("B" & I).Text & "DUMMY" & .Range("C" & I).Text Like "0DUMMY?*" Then .Range("D" & I - 1).Value = "rot"
            If .Range("B" & I).Text & "DUMMY" & .Range("C" & I).Text Like "1DUMMY?*" Then .Range("D" & I - 1).Value = "gelb"
        End With
    Next
End Sub



ransi

Bild

Betrifft: AW: IsEmpty() und Ampel-Regel
von: Frederik Meyer
Geschrieben am: 22.04.2015 12:40:32
Hallo ransi,
danke für deine Hilfe!
Nur denke ich das wir beide nicht auf dem selben Weg gehen. Vielleicht liegt das daran, dass ich mich nicht deutlich genug ausgedrückt habe.
Also neuer Versuch:
Es dreht sich hier um Vorfälle.
Die 4 Werte in B5 geben das kritische Level des Vorfalls an.
Mit:
0: kritischer/schwerwiegender Vorfall [System kam zum stillstand]
1: "leichter" Vorfall [System blieb stabil]
2 oder nichts: minimaler Vorfall [Quasi keinen Einfluss auf das System gehabt]
-1: Stellt mehr oder weniger Fehler, bei der Eingabe der Daten, dar
Da aber nicht nur das Level des Vorfalls eingetragen werden darf, sondern auch eine Beschreibung dazu von nöten ist, will ich C5 durch IsEmpty() überprüfen. Falls dies leer ist, wird die Ampel schwarz und deutet auf eine Fehleingabe hin. Der Text hat hier natürlich unendlich viele Variationen - klar.
Hoffe das ich jetzt meine Intention verständlich gemacht habe.
Frederik

 Bild

Beiträge aus den Excel-Beispielen zum Thema "NAmen für das Speichern"