Microsoft Excel

Herbers Excel/VBA-Archiv

Verschachtelte IF-Anweisungen | Herbers Excel-Forum


Betrifft: Verschachtelte IF-Anweisungen von: Nicole
Geschrieben am: 15.12.2009 11:28:05

Hallo alle zusammen,

meine IFs funktionieren, solange ich das ELSE auskommentiert habe, da alle hintereinander stehen. Stelle ich das ELSE mit herein, ist alles rot!!. Wie verschachtele ich richtig, so dass das ELSE nur zum Tragen kommt, falls keine der anderen IFs ein Ergebnis liefert?

For n = 0 To Zeilen - 1
Set Z1 = Range("B7").Offset(n, 10)
Set Z2 = Range("B7").Offset(n, 11)
Set Z3 = Range("B7").Offset(n, 7)
Set Z4 = Range("B7").Offset(n, 9)


If Z2 = "" Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
End If

If Z3 = "" Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
End If

If Z3 = "A" Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
End If

If Z3 = "V" And Format(Z1, "yyyyMM") = Z2 Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbGreen
End If

If Z3 = "G" And Format(Z4, "yyyyMM") = Z2 Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbGreen

' Else
' Z2.Offset(0, 1).Value = "nicht OK"
' Z2.Offset(0, 1).Interior.Color = vbRed

End If
Next n

Vielen Dank für die Hilfe im voraus.
Nicole

  

Betrifft: AW: Verschachtelte IF-Anweisungen von: Philipp
Geschrieben am: 15.12.2009 11:40:44

So vielleicht

Sub test()

For n = 0 To Zeilen - 1
Set Z1 = Range("B7").Offset(n, 10)
Set Z2 = Range("B7").Offset(n, 11)
Set Z3 = Range("B7").Offset(n, 7)
Set Z4 = Range("B7").Offset(n, 9)


If Z2 = "" Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
 Else
 Z2.Offset(0, 1).Value = "nicht OK"
 Z2.Offset(0, 1).Interior.Color = vbRed
End If


Select Case Z3

Case ""
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
Case "A"
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbWhite
Case "G"
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbGreen
Case Else
 Z2.Offset(0, 1).Value = "nicht OK"
 Z2.Offset(0, 1).Interior.Color = vbRed

End Select

Next n


End Sub



  

Betrifft: AW: Verschachtelte IF-Anweisungen von: Nicole
Geschrieben am: 15.12.2009 14:15:25

hab mir auch schon gedacht, mit CASE zu arbeiten, aber was mach ich mit den 2fach-Bedingungen? In CASE kann ich ja nicht mit AND arbeiten oder?
Ich brauche ja als CASE:

If Z3 = "V" And Format(Z1, "yyyyMM") = Z2 Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbGreen
End If

Die Zelle muss also ein V enthalten und das Datum einer anderen Zelle muss gleich dem Datum einer 3. Zelle sein. Wie geht das?


  

Betrifft: AW: Verschachtelte IF-Anweisungen von: Nicole
Geschrieben am: 15.12.2009 14:15:25

hab mir auch schon gedacht, mit CASE zu arbeiten, aber was mach ich mit den 2fach-Bedingungen? In CASE kann ich ja nicht mit AND arbeiten oder?
Ich brauche ja als CASE:

If Z3 = "V" And Format(Z1, "yyyyMM") = Z2 Then
Z2.Offset(0, 1).Value = "OK"
Z2.Offset(0, 1).Interior.Color = vbGreen
End If

Die Zelle muss also ein V enthalten und das Datum einer anderen Zelle muss gleich dem Datum einer 3. Zelle sein. Wie geht das?


  

Betrifft: einfach nach CASE das IF von: Björn B.
Geschrieben am: 15.12.2009 14:25:55

Hallo Nicole,

Du baust das Teil mit CASE auf und nach CASE = "V" bringst Du in der nächsten Zeile Deine If-Bedingung.
Müsste in etwas so aussehen (nicht getestet!!!):

Case = "V" 
  If Format(Z1, "yyyyMM") = Z2 Then
    Z2.Offset(0, 1).Value = "OK"
    Z2.Offset(0, 1).Interior.Color = vbGreen
  End If
Gruß
Björn B.


  

Betrifft: AW: einfach nach CASE das IF von: Nicole
Geschrieben am: 15.12.2009 15:48:20

super, danke, funktioniert. Für spätere Interessenten hier der Code (ein wenig abgespeckt). Abgefragt wird, was in einer Spalte Z3 steht und zusätzlich werden noch zwei Datumswerte miteinander verglichen, von dem einer ein Textformat hat:

Dim bereich As Range, Z1 As Range, Z2 As Range
Dim Zeilen As Long, n As Long
Set bereich = Range("B7").CurrentRegion
Zeilen = bereich.Rows.Count

For n = 0 To Zeilen - 1
Set Z1 = Range("B7").Offset(n, 10) 'Datum 1
Set Z2 = Range("B7").Offset(n, 11) 'Datum als Text
Set Z3 = Range("B7").Offset(n, 7) 'Abgleichszelle z.B. Sportarten

Select Case Z3
Case ""
Z2.Offset(0, 1).Value = "keine Sportart vorhanden"
Z2.Offset(0, 1).Interior.Color = vbWhite

Case "Squash"
If Z2 = "" Then
Z2.Offset(0, 1).Value = "kein Textdatum"
Z2.Offset(0, 1).Interior.Color = vbWhite
Else
Z2.Offset(0, 1).Value = "Squash ist da"
Z2.Offset(0, 1).Interior.Color = vbGreen
End If

Case "Laufen"
If Z2 = "" Then
Z2.Offset(0, 1).Value = "kein Textdatum"
Z2.Offset(0, 1).Interior.Color = vbWhite
Else
If Format(Z1, "yyyyMM") = Z2 Then
Z2.Offset(0, 1).Value = "Laufen ist da"
Z2.Offset(0, 1).Interior.Color = vbGreen
Else
Z2.Offset(0, 1).Value = "die Datumswerte stimmen nicht überein"
Z2.Offset(0, 1).Interior.Color = vbRed
End If
End If


Case Else
Z2.Offset(0, 1).Value = "nicht OK"
Z2.Offset(0, 1).Interior.Color = vbRed

End Select
Next n