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

Code-Vergleich - Verständnisfrage

Code-Vergleich - Verständnisfrage
19.11.2021 12:14:24
icke
Hallo,
ich lerne gerade noch VBA und beschäftige mich aktuell mit einer Liste, bei der Zeilen abhängig vom Wert erscheinen bzw. verschwinden. Ich habe zwei Code-Schnipsel und verstehe nicht, warum der eine Schnipsel nicht funktioniert - der andere, der meiner Meinung nach das Gleiche mitgibt, aber schon. Evtl. könntet ihr mich dahingehend erleuchten? Das wäre toll. :) Vielen Dank im Voraus!
Dieser Code funktioniert nicht:
If Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3") _
And Range("K17").Value = data.Range("$C$1") Then
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ElseIf Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3") _
And Range("K17").Value = data.Range("$C$2") Then 'Gehe zu 7.1
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K18").Select
ElseIf Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3") _
And Range("K17").Value = data.Range("$C$3") Then 'Gehe zu X1.
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K22").Select
End If
Dieser Code funktioniert:
If Range("K14").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$1") Then
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ElseIf Range("K15").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$1") Then
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ElseIf Range("K14").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$2") Then 'Gehe zu 7.1
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K18").Select
ElseIf Range("K15").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$2") Then 'Gehe zu 7.1
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K18").Select
ElseIf Range("K14").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$3") Then 'Gehe zu X1.
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K22").Select
ElseIf Range("K15").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$3") Then 'Gehe zu X1.
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K22").Select
End If

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:27:55
Peter
Würde ja doch sehr helfen, wenn du schreiben würdest, WAS nicht funktioniert!?
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:30:57
Michael
Moin,
wenn ich Fragen AND und OR kombiniert werden, setzte ich gerne Klammern um die durch OR verbundenen Teile. Die erste Zeile Deines nicht funktioniernden Codes sähe dann so aus:
If Range("K14").Value = data.Range("$C$3") Or (Range("K15").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$1")) Then
Die elseif-Zeilen analg.
Hilft das ?
Grüße
Michael
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:34:18
Daniel
Hi
naja, das sind ja unterschiedliche Bedingungsprüfungen.
beim nicht funktionierenden ist noch eine mit OR verknüpfte Bedingungsprüfung drin, die im funktionierenden Code fehlt.
Das müsste dann den Unterschied ausmachen.
wenn du versuchst das logisch nachzuvollziehen, dann bedenke, dass für OR und AND auch die von + und * bekannte Punkt vor Strich-Regel gilt:
zuerst werden die AND-Operationen ausgeführt und danach die OR-Operationen.
also mit Klammern ausgedrückt wird so gerechnet (ich setz mal eckeige Klammern):
If Range("K14").Value = data.Range("$C$3") Or [ Range("K15").Value = data.Range("$C$3") And Range("K17").Value = data.Range("$C$1") ] Then
Du willst aber wahrscheinlich eher so rechnen:
If [ Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3") ] And Range("K17").Value = data.Range("$C$1") Then
dazu musst du dann aber Klammern setzen, so wie hier gezeigt, dann natürlich runde.
Gruß Daniel
Anzeige
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:38:46
Michael
Das ergibt dann in dem Zusammenhang und unter den Voraussetzungen wohl mehr Sinn ;-)
noch besser statt AND
19.11.2021 12:46:52
Daniel
noch übersichtlicher wäre es, wenn du hier mit einem mehrstufigen IF-THEN arbeitest.
eine AND-Bedingung realisiert man oft besser nicht mit AND, sondern mit einem zusätzlichen IF-THEN, welches in das erste IF-Then geschachtelt ist.
macht die Sache meist kürzer und übersichtlicher als lange Bedingungsprüfungen, und oft auch in der Berechnung schneller.
Vorallem dann, wenn ein Teil der Bedingungsprüfung immer der gleiche ist, ist es sinnvoll das zu trennen:

If Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3")
If Range("K17").Value = data.Range("$C$1") Then
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ElseIf Range("K17").Value = data.Range("$C$2") Then 'Gehe zu 7.1
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K18").Select
ElseIf Range("K17").Value = data.Range("$C$3") Then 'Gehe zu X1.
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
ActiveSheet.Range("K22").Select
End If
End If
Gruß Daniel
Anzeige
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:36:09
Rudi
Hallo,
im funktionierenden Fall muss die Bedingung für K14 und K17 erfüllt sein.
Im nicht funktionierenden Fall muss die Bedingung für K14 erfüllt sein oder die Bedingung für K15 und K17.
Was willst du erreichen?
Evtl. hilft schon das OR zu klammern.

If (Range("K14").Value = data.Range("$C$3") Or Range("K15").Value = data.Range("$C$3")) _
And Range("K17").Value = data.Range("$C$1") Then
Gruß
Rudi
AW: Code-Vergleich - Verständnisfrage
19.11.2021 12:53:16
Rudi
so sieht das ein wenig klarer aus:

If Range("K14").Value = Data.Range("$C$3") Or Range("K15").Value = Data.Range("$C$3") Then
If Range("K17") = Data.Range("$C$1") Then
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
End If
If Range("K17") = Data.Range("$C$2") Then
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
Range("K18").Select
End If
If Range("K17") = Data.Range("$C$3") Then
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
Range("K22").Select
End If
End If
Ich würde das aber mit Select Case lösen.

Select Case Data.Range("C3")
Case Range("K14"), Range("K15")
Select Case Range("K17")
Case Data.Range("C1")
Rows("18:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
Case Data.Range("C2")   'Gehe zu 7.1
Rows("18:18").Hidden = False
Rows("19:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
Range("K18").Select
Case Data.Range("C3")   'Gehe zu X1.
Rows("18:21").Hidden = True
Rows("22:22").Hidden = False
Rows("23:105").Hidden = True
Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
Range("K22").Select
End Select
End Select
Gruß
Rudi
Anzeige
AW: Code-Vergleich - Verständnisfrage
19.11.2021 13:13:43
UweD
Hallo
unabhängig von der Klammersetzung noch ein Tipp
anstelle

Rows("106:110").Hidden = False
Rows("111:171").Hidden = False
geht auch

Rows("106:171").Hidden = False
LG UweD
AW: Code-Vergleich - Verständnisfrage
19.11.2021 13:25:14
icke
Hallo Uwe,
ja, das mache ich aktuell noch zu meiner besseren Übersicht. Dann muss ich nicht jedes Mal runterscrollen und nachschauen, welche Zeilen ich jetzt doch wieder ein-/ausblenden muss. Ist aber für den Abschluss geplant, sowas glatt zu ziehen. :)
AW: Code-Vergleich - Verständnisfrage
19.11.2021 13:28:45
icke
Hallo alle zusammen,
das ging ja fix. :)
@Peter: Da hast du natürlich recht, das hätte ich näher spezifizieren müssen. Sorry! (Alles was mit dem (nicht funktionierenden) Code zu tun hatte, hat nicht funktioniert.)
@Michael & Rudi: Der Trick mit den Klammern hat funktioniert, vielen Dank!
@Daniel & Rudi: Das mit der Verschachtelung ist natürlich eleganter. Mach ich so. Vielen Dank! :)
Anzeige
AW: Code-Vergleich - Verständnisfrage
19.11.2021 14:26:11
GerdL
Noch ein Gedicht.

If Range("K14").Value = Data.Range("$C$3") Or Range("K15").Value = Data.Range("$C$3") Then
Select Case Range("K17")
Case Data.Range("$C$1")
Rows("18:105").Hidden = True
Rows("106:171").Hidden = False
Case Data.Range("$C$2")
Union(Rows("18:18"), Rows("106:171")).Hidden = False
Rows("19:105").Hidden = True
Range("K18").Select
Case Data.Range("$C$3")
Union(Rows("18:21"), Rows("23:105")).Hidden = True
Union(Rows("22:22"), Rows("106:171")).Hidden = False
Range("K22").Select
End Select
End If
Gruß Gerd
Ich möchte auch mitspielen :-)
19.11.2021 21:47:04
Yal
Menno, ich komme immer nach der Kampf :-(
Jüngchen, Du hast eigentlich 6 Blöcke:
18:18
19:21
22:22
23:105
106:110
111:171
Davon sind 19:21 und 23:105 immer hidden (!)
und 106:110 und 111:171 immer nicht hidden (warum nicht gleich 106:171 ?)
es bleibt 18:18 und 22:22 übrig.
Bei beiden müssen entweder K14 oder K15 gleich C3 sein
aber beim erste muss zusätzlich K17 gleich C1 oder C3
beim zweiten zusätzlich K17 gleich C1 oder C2
Also:

Sub test()
Rows("19:21").Hidden = True
Rows("23:105").Hidden = True
Rows("106:171").Hidden = False
K14_C3 = Range("K14").Value = Data.Range("$C$3")
K15_C3 = Range("K15").Value = Data.Range("$C$3")
K17_C1 = Range("K17").Value = Data.Range("$C$1")
K17_C2 = Range("K17").Value = Data.Range("$C$2")
K17_C3 = Range("K17").Value = Data.Range("$C$3")
Rows("18:18").Hidden = (K14_C3 Or K15_C3) And (K17_C1 Or K17_C3)
Rows("22:22").Hidden = (K14_C3 Or K15_C3) And (K17_C1 Or K17_C2)
End Sub
oder wenn man vorher kombinieren möchte:
(Fällt mir gerade ein, dass man 19:105 auf True setzen kann, da 22:22 nachträglich "justiert" wird)

Sub test()
Rows("19:105").Hidden = True
Rows("106:171").Hidden = False
K14_K15_C3 = Range("K14").Value = Data.Range("$C$3") Or Range("K15").Value = Data.Range("$C$3")
K17_C1_C2 = Range("K17").Value = Data.Range("$C$1") Or Range("K17").Value = Data.Range("$C$2")
K17_C1_C3 = Range("K17").Value = Data.Range("$C$1") Or Range("K17").Value = Data.Range("$C$3")
Rows("18:18").Hidden = K14_K15_C3 And K17_C1_C3
Rows("22:22").Hidden = K14_K15_C3 And K17_C1_C2
End Sub
Wenn Du mich fragst -aber um diese Uhrzeit am Freitag Abend fragt ja keiner :-) - Ich finde die erste Version sauberer.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige