Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: IF-If-Then-Else-Anweisung; wie Bedingungen verknüpfen?

IF-If-Then-Else-Anweisung; wie Bedingungen verknüpfen?
14.07.2015 10:07:15
Fritz
Hallo zusammen,
bin, was Excel betrifft, noch ziemlich in der Kinderschuhen…
möchte folgende Bedingungen verknüpfen, kriege es aber nicht hin:

Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
If Target = "CLOSED" Then
Range("D25:D26:D27:E25:E26:E27").Locked = True
Else
Range("D25:D26:D27:E25:E26:E27").Locked = False
End If
If Target.Address = "$F$25" Then
If Target = "CLOSED" Then
Range("G25:G26:G27:H25:H26:H27").Locked = True
Else
Range("G25:G26:G27:H25:H26:H27").Locked = False
End If
usw.
End If
End Sub

es liegt am verknüpfen, denn nur mit einer Bedingung läuft's:

Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
If Target = "CLOSED" Then
Range("D25:D26:D27:E25:E26:E27").Locked = True
Else
Range("D25:D26:D27:E25:E26:E27").Locked = False
End If
End If
End Sub
Vielen Dank für Eure Hilfe!
MfG, Fritz

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: IF-If-Then-Else-Anweisung; wie Bed verknüpfen?
14.07.2015 10:16:18
Daniel
Hi
du musst die IFs auch sauber abschließen, oder mit ElseIF arbeiten, wenns mehrere Varianten gibt:
a) sauber abgeschlossene einzelne IF-Blöcke:
Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
If Target = "CLOSED" Then
Range("D25:D26:D27:E25:E26:E27").Locked = True
Else
Range("D25:D26:D27:E25:E26:E27").Locked = False
End If
End If
If Target.Address = "$F$25" Then
If Target = "CLOSED" Then
Range("G25:G26:G27:H25:H26:H27").Locked = True
Else
Range("G25:G26:G27:H25:H26:H27").Locked = False
End If
End If
usw.
End Sub
b) mehrere Bedinungen mit ElseIF
Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
If Target.Address = "$C$25" Then
If Target = "CLOSED" Then
Range("D25:D26:D27:E25:E26:E27").Locked = True
Else
Range("D25:D26:D27:E25:E26:E27").Locked = False
End If
ElseIf Target.Address = "$F$25" Then
If Target = "CLOSED" Then
Range("G25:G26:G27:H25:H26:H27").Locked = True
Else
Range("G25:G26:G27:H25:H26:H27").Locked = False
End If
ElseIF ...
Else
End If
End Sub
da sich hier hier die einzelnen Bedingungen gegenseitig ausschließen, ist Variante b) die bessere.
Variante a) ist für den Fall, dass sich die einzelnen Bediungungen nicht gegenseitig ausschließen und dann ggf beide Teile ausgeführt werden müssen.
Gruß Daniel

Anzeige
AW: noch ein Tip:
14.07.2015 10:34:52
Daniel
den Inneren IF-Block kannst du dir sparen, denn der Ausdruck: Target = "CLOSED" erzeugt den notwendigen Wahrheitswert:
If Target.Address = "$C$25" Then
Range("D25:D26:D27:E25:E26:E27").Locked = (Target = "CLOSED")
ElseIf Target.Address = "$F$25" Then
Range("G25:G26:G27:H25:H26:H27").Locked = (Target = "CLOSED")
ElseIF ...

wenn die Regelmäßigkeit der Zellbezüge gegeben ist, kannst du noch weiter vereinfachen:
Select Case Target.Address
Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
Case Else
End Select
Gruß Daniel

Anzeige
AW: noch ein Tip:
14.07.2015 14:15:50
Fritz
Hallo Daniel,
der zusätzliche Tip ist genial und erleichtert vieles!!! Besten Dank!
noch eine kleine Frage, wie müsste es in diesem Fall aussehen, wenn noch eine zusätzliche Bedingung rein müsste:
Private Sub Worksheet_sperren()
Dim Wks As Worksheet
Set Wks = ActiveSheet
Select Case Target.Address
Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
Case Else
End Select
Select Case Target.Address
Case "$C$28"
Target.Offset(-3, 2).Locked = (Target = "No Option 1")
Case Else
End Select
End Sub

Anzeige
AW: noch ein Tip:
14.07.2015 14:23:38
Daniel
Hi
du kannst bei SelectCase auch mehrere Bediungugen, die sich gegenseitig ausschließen haben, das funktioniert dann ähnlich wie das ElseIF:

Select Case Target.Address
Case "$C$25", "$F$25", ... hier weitere Adressen eintragen wenn erforderlich
Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
Case "$C$28"
Target.Offset(-3, 2).Locked = (Target = "No Option 1")
Case Else
End Select

Gruß Daniel

Anzeige
AW: noch ein Tip:
15.07.2015 08:18:44
Fritz
Super! vielen Dank nochmal, Daniel!
Gruss, Fritz

AW: IF-If-Then-Else-Anweisung; wie Bed verknüpfen?
14.07.2015 10:41:46
Fritz
Genial! Besten Dank Daniel!!!
Gruss, Fritz
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel IF-Anweisungen: Bedingungen verknüpfen und optimieren


Schritt-für-Schritt-Anleitung

Um mehrere Bedingungen in einer Excel VBA IF-Anweisung zu verknüpfen, gibt es verschiedene Ansätze. Hier ist ein einfacher Weg, mehrere IF-Bedingungen zu kombinieren:

  1. Einzelne IF-Blöcke verwenden:

    Private Sub Worksheet_sperren()
       Dim Wks As Worksheet
       Set Wks = ActiveSheet
       If Target.Address = "$C$25" Then
           If Target = "CLOSED" Then
               Range("D25:D26:D27:E25:E26:E27").Locked = True
           Else
               Range("D25:D26:D27:E25:E26:E27").Locked = False
           End If
       End If
       If Target.Address = "$F$25" Then
           If Target = "CLOSED" Then
               Range("G25:G26:G27:H25:H26:H27").Locked = True
           Else
               Range("G25:G26:G27:H25:H26:H27").Locked = False
           End If
       End If
    End Sub
  2. Verwendung von ElseIf:

    Private Sub Worksheet_sperren()
       Dim Wks As Worksheet
       Set Wks = ActiveSheet
       If Target.Address = "$C$25" Then
           If Target = "CLOSED" Then
               Range("D25:D26:D27:E25:E26:E27").Locked = True
           Else
               Range("D25:D26:D27:E25:E26:E27").Locked = False
           End If
       ElseIf Target.Address = "$F$25" Then
           If Target = "CLOSED" Then
               Range("G25:G26:G27:H25:H26:H27").Locked = True
           Else
               Range("G25:G26:G27:H25:H26:H27").Locked = False
           End If
       End If
    End Sub
  3. Optimierung mit Select Case:

    Private Sub Worksheet_sperren()
       Dim Wks As Worksheet
       Set Wks = ActiveSheet
       Select Case Target.Address
           Case "$C$25", "$F$25"
               Target.Offset(0, 1).Resize(3, 2).Locked = (Target = "CLOSED")
           Case Else
       End Select
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Die IF-Bedingungen sind nicht richtig abgeschlossen.

    • Lösung: Stelle sicher, dass jede IF-Anweisung mit einem End If abgeschlossen wird.
  • Fehler: Die Bedingungen überschneiden sich.

    • Lösung: Nutze ElseIf, um sicherzustellen, dass nicht mehrere Bedingungen gleichzeitig erfüllt sind.
  • Fehler: Das Ziel wird nicht erkannt.

    • Lösung: Überprüfe, ob Target korrekt definiert ist und ob es sich um die richtige Zelle handelt.

Alternative Methoden

Eine gute Alternative zur Verwendung von IF-Anweisungen sind die VBA-Funktionen wie IIf oder das Select Case-Konstrukt, das es ermöglicht, mehrere Bedingungen übersichtlicher zu verknüpfen.

Beispiel für IIf:

Range("D25:D26:D27:E25:E26:E27").Locked = IIf(Target = "CLOSED", True, False)

Praktische Beispiele

  1. Verwendung von mehreren Bedingungen:

    Private Sub Worksheet_sperren()
       If Target.Address = "$C$25" Or Target.Address = "$F$25" Then
           Range("D25:D26:D27:E25:E26:E27").Locked = (Target = "CLOSED")
       End If
    End Sub
  2. Kombination von AND und OR:

    If (Target.Address = "$C$25" Or Target.Address = "$F$25") And (Target = "CLOSED") Then
       ' Code hier
    End If

Tipps für Profis

  • Nutze Kommentare in deinem Code, um komplexe Logik zu erklären.
  • Halte den Code übersichtlich, indem du Hilfsfunktionen erstellst.
  • Verwende Fehlerbehandlung (On Error GoTo), um Probleme frühzeitig zu erkennen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere IF-Anweisungen effizienter gestalten?
Verwende Select Case, um den Code zu vereinfachen und leserlicher zu gestalten.

2. Was ist der Unterschied zwischen IF und ElseIf?
ElseIf ermöglicht es dir, mehrere Bedingungen in einer einzigen IF-Struktur zu prüfen, wodurch die Ausführung des Codes effizienter wird.

3. Kann ich mehrere Bedingungen in einer IF-Anweisung kombinieren?
Ja, du kannst And oder Or verwenden, um mehrere Bedingungen in einer IF-Anweisung zu verknüpfen.

4. Wie kann ich die Lesbarkeit meines Codes verbessern?
Nutze Einrückungen, Kommentare und halte die Logik so einfach wie möglich, um die Lesbarkeit zu erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige