Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

IsEmpty() und Ampel-Regel

IsEmpty() und Ampel-Regel
22.04.2015 10:14:48
Frederik
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

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IsEmpty() und Ampel-Regel
22.04.2015 10:49:46
Nepumuk
Hallo,
Empty ist ein Wert den nur ein Variant annehmen kann.
Gruß
Nepumuk

AW: IsEmpty() und Ampel-Regel
22.04.2015 12:26:23
Frederik
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

AW: IsEmpty() und Ampel-Regel
22.04.2015 12:47:05
Nepumuk
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

Anzeige
AW: IsEmpty() und Ampel-Regel
22.04.2015 13:21:17
Frederik
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

AW: IsEmpty() und Ampel-Regel
22.04.2015 14:12:38
Nepumuk
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

AW: IsEmpty() und Ampel-Regel
23.04.2015 08:43:58
Frederik
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

Anzeige
AW: IsEmpty() und Ampel-Regel
23.04.2015 13:30:06
Frederik
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

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

AW: IsEmpty() und Ampel-Regel
26.04.2015 15:02:03
Nepumuk
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

Anzeige
AW: IsEmpty() und Ampel-Regel
27.04.2015 08:51:17
Frederik
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

Anzeige
AW: IsEmpty() und Ampel-Regel
22.04.2015 11:29:18
ransi
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

Anzeige
AW: IsEmpty() und Ampel-Regel
22.04.2015 11:38:35
ransi
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

Anzeige
AW: IsEmpty() und Ampel-Regel
22.04.2015 12:40:32
Frederik
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige