Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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

und oder in einer If-Abfrage

und oder in einer If-Abfrage
08.08.2022 18:50:54
Martin
Hallihallo =)
kann ich in einer einzigen If-Abfrage prüfen, ob Vorraussetzung 1 erfüllt ist UND (Vorrausetzung 2 ODER 3) erfüllt sind?
Bsp.:
If cells(1,1).value = 4 and cells(1,2).value=4 or cells (1,2).value=0 Then
End if
Oder braucht es zwei If Abfragen?
If cells(1,1).value = 4 Then
If cells(1,2).value=4 or cells (1,2).value=0 Then
end if
End if
Dankeschön für kurzen Rat =)
Was ist es möglich in einer Abfrage reinzupacken und ist das auch sinnvoll?
Euch noch einen schönen Abend, Martin

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

Betreff
Datum
Anwender
Anzeige
AW: und oder in einer If-Abfrage
08.08.2022 18:54:45
ReginaR
Hi, das geht in einem :
If cells(1,1).value = 4 and (cells(1,2).value=4 or cells (1,2).value=0 ) Then
Gruß Regina
AW: und oder in einer If-Abfrage
08.08.2022 19:09:22
Martin
Hi Regina,
peinlich peinlich *lach*
hatte ich in Textform ja bereits geschrieben.... wenigstens weiß ich nun auch offiziell, dass das die richtige Schreibweise und kein Murks ist.
Dir noch einen schönen Abend.
Danke und Grüße
AW: und oder in einer If-Abfrage
08.08.2022 19:32:55
Daniel
Hi
das geht schon mit einer einzigen Bedingungsprüfung.
wenn man UND und ODER in einer Abfrage kombiniert, muss man beachten, das hier ähnlich wie bei PLUS und MAL die Regel gilt:
"UND vor ODER", dh es werden zuerst die beiden Bedingungen verknüpft, die mit UND verbunden sind dann mit diesem Ergebnis die mit ODER-verknüpften Bedingungen.
Will man das anders haben und zuerst die mit ODER verknüpften Bedingungen kombinieren, dann muss man Klammern setzen.
alternativ kann man auch jede UND-Verknüpfung durch ein geschachteltes IF darstellen, beides ist möglich.
wenn man auf die Rechenzeit schaut, dann ist es günstiger, anstelle einer UND-Verknüpfung zwei IFs ineinander zu schachteln.
macht man

If cells(1,1).value = 4 and (cells(1,2).value=4 or cells (1,2).value=0) Then
so wird jede der drei Vergleiche immer durchgeführt.
Schreibt man hingegen

If cells(1,1).value = 4 Then
If cells(1,2).value=4 or cells (1,2).value=0 Then
so wird nur das erste IF immer durchgeführt und das zweite nur dann, wenn das erste erfüllt ist, also weniger oft.
Allerdings macht sich das nur bemerkbar, wenn man das sehr oft macht (in Schleifen mit hohen umlaufzahlen) und wenn die Prüfung, die im zweiten IF durchgeführt werden muss, zeitaufwendig ist (vielleicht ein CountIF oder VLookUp)
Auch ist es in der geschachtelten Variante einfacher, bei einem Fehlerabbruch die Ursache zu ermitteln oder beim Testen im Einzelstepmodus einen Logikfehler zu finden.
insgesamt ist es also sinnvoller, UND-Verknüpfungen durch geschachtelte IFs darzustellen.
Eine einzige große Bedingungsabfrage hat nur dann Vorteile, wenn es einen ELSE-Teil gibt der ausprogrammiert werden muss.
bei geschachtelten IFs hast du auch mehrere ELSE-Teile, die jeweils programmiert werden müssen.
Wenn das aber immer das gleiche ist, müsstest du bei geschachtelten IFs diesen Codeteil mehrfach wiederholen, erstellst du nur eine einzige große Bedingungsprüfung, dann musst du das auch nur einmal hinschreiben.
Gruß Daniel
Anzeige
AW: und oder in einer If-Abfrage
09.08.2022 08:27:17
Martin
Guten Morgen Daniel,
Dankeschön für deine ausführliche Antwort und Erklärung! =)
Ich habe jetzt mal den Programmteil mit beiden Methoden getestet, wenn ich nur die bisherige Programmierung mit Klammern versehen, dauert die Berechnung 3,1-3,2 Sekunden.
Mit geschachtelten Abfragen und einer Anordnung, dass die Abfragenkette möglichst früh unterbrochen wird, dauert es nur noch knapp unter 2 Sekunden.
Ein Großteil des Zeitaufwands in dem Programmteil ist nach wie vor das Öffnen und Schließen von Dateien, dennoch bzw. umso mehr bemerkenswert was die optimierte Abfragen ausmachen!
Auch wenn es im ganzen Programm nur einen kleinen Teil ausmacht ;)
Jetzt muss ich nur noch herausfinden, wieso es deutlich schneller geht, wenn der Mauszeiger beim Berechnen nicht über den Zellen sondern der Ribbonleiste oder den CommandButtons ist.
Bei meinem Hauptrechner kaum merklich -10% Geschwindigkeit aber an dem Zweitrechner dauert es 2-3x so lange, wenn man den Mauszeiger nicht an die "richtige Stelle" bewegt.
Euch noch einen wunderschönen Tag.
lg Martin
Anzeige
AW: und oder in einer If-Abfrage
09.08.2022 09:39:58
GerdL
Hallo Martin,
ich vermute, du hast die Performance-Bremsen "Select" und "Activate" in deinem Code.
Gruß Gerd
AW: und oder in einer If-Abfrage
09.08.2022 09:47:11
Martin
Hallo Gerd,
kannst du bitte ein bisschen mehr ins Detail gehen?
Ich nutze kein Mousover oder ähnliches.
Das Schlimmste was ich nutze, dass es an 1-2 Stellen schaut welche Zelle selektiert ist beim Klicken des Buttons und am Ende einen bestimmten Bereich selektiert und kopiert.....
Käme mir aber komisch vor, wenn das je nach Cursorposition 30+ Sekunden ausmacht.
Activate on Mouseover nutze ich auch nirgends, wenn sinnvoll und möglich könnte ich das sonst deaktivieren?
lg

Private Sub SpeedOn()
'Speedblock on
With Application
.ScreenUpdating = False
.DisplayStatusBar = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
ActiveSheet.DisplayPageBreaks = False
End Sub
Private Sub SpeedOff()
'Speedblock off
With Application
.ScreenUpdating = True
.DisplayStatusBar = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.DisplayAlerts = True
End With
ActiveSheet.DisplayPageBreaks = True
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige