PDA

Vollständige Version anzeigen : If mit 2 Bedingungen


Lausitzcom
28.06.2006, 15:06
Hallo,

kann mir jemand sagen, wie ich eine If-Abfrage mit 2 Bedingungen in VBA realisieren kann. Mir gehts speziell um die Oder-Verknüpfung.

Beispiel:

If Range("A1").Value = xx oder?
Range("A2").Value = xx Then
...

Vielen Dank für Eure Hilfe.

myfake
28.06.2006, 15:14
Hallo lausitzcom,

Du hast es doch schon fast :)

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> lausitzcom()
&nbsp;
<span class="TOKEN">With</span> Sheets(&quot;Tabelle2&quot;)
<span class="TOKEN">If</span> .Range(&quot;A1&quot;).Value = &quot;A&quot; <span class="TOKEN">Or</span> .Range(&quot;A2&quot;).Value = 1 <span class="TOKEN">Then</span>
.Range(&quot;C3&quot;).Value = &quot;Ja&quot;
<span class="TOKEN">Else</span>
.Range(&quot;C3&quot;).Value = &quot;Nein&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)


cu
myfake

Lausitzcom
28.06.2006, 15:33
Hallo myfake,

vielen Dank für Deine Antwort. Leider kommt folgende Fehlermeldung:
"Unzulässiger oder nicht ausreichend definierter Verweis"

Folgende Abfrage brauche ich:

With Sheets("Berechnung")
If .Range("R12").Value = "Nein" Or .Range("R13").Value = "Nein" Or .Range("R14").Value = "Nein" Or .Range("R15").Value = "Nein" Or .Range("R16").Value = "Nein" Or .Range("R17").Value = "Nein" Or .Range("R18").Value = "Nein" Or .Range("R19").Value = "Nein" And _
Range("F6").Value = "" Then
If MsgBox("Frage?", vbYesNo + vbQuestion, "Rückfrage") = vbYes Then
...
End If
ElseMsgBox "..."
End If
End With

Eine Fehlermeldung erscheint nicht mehr. Jedoch wird immer dieselbe MsgBox angezeigt, egal ob F6 gefüllt ist oder nicht.

Grüße LC

Lumpensammler
28.06.2006, 15:46
Hallo, 3341,

ich würde die Tabellenfunktion Zählenwenn (WorksheetFunction.Countif) für die Überprüfung nutzen.

Gruß
LS

myfake
28.06.2006, 15:52
Hi,

hast Du es mal Schrittweise getestet? Hiermit meine ich jetzt nicht das Schrittweise Testen über die F8 Taste, sondern Bedingung für Bedingung.

Die erste Bedingung habe ich jetzt mal getestet. Hierbei ist mir aufgefallen, dass vor der "Range("F6")" Anweisung ein Punkt fehlt (evtl. kleine Ursache / große Wirkung ;) ).
Denn der Teil an sich scheint zu passen:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> lausitzcom2()
&nbsp;
<span class="TOKEN">With</span> Sheets(&quot;Tabelle2&quot;)
<span class="TOKEN">If</span> .Range(&quot;A12&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A13&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A14&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> _
.Range(&quot;A15&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A16&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A17&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> _
.Range(&quot;A18&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A19&quot;).Value = &quot;Nein&quot; <span class="TOKEN">And</span> .Range(&quot;C13&quot;).Value = &quot;&quot; <span class="TOKEN">Then</span>
.Range(&quot;D17&quot;).Value = &quot;Ja&quot;
<span class="TOKEN">Else</span>
.Range(&quot;D17&quot;).Value = &quot;Nein&quot;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Da kommt bei mir das erwartete Ergebnis heraus.

Schau doch mal, ob es bei Dir nach einfügen des Punktes klappt. Sonst liegt es imho an der nachfolgenden Anweisung.

cu
myfake

Lausitzcom
28.06.2006, 16:17
Hallo myfake,

mit der Formel sollen folgende 2 Varianten abgefragt werden:

1. Wenn in den Feldern R12 bis R19 in irgendeinem "Nein" steht und das Feld F6 leer ist, dann ...

2. Wenn in den Feldern R12 bis R19 in irgendeinem "Nein" steht und im Feld F6 "Ja" steht, dann ...

Grüße LC

myfake
28.06.2006, 16:26
Hallo LC,

dann schau doch mal, ob Dir der Code hier weiterhilft:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Sub</span> lausitzcom3()
&nbsp;
<span class="TOKEN">With</span> Sheets(&quot;Tabelle2&quot;)
&nbsp;
<span class="TOKEN">If</span> .Range(&quot;A12&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A13&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A14&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> _
.Range(&quot;A15&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A16&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A17&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> _
.Range(&quot;A18&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Or</span> .Range(&quot;A19&quot;).Value = &quot;Nein&quot; <span class="TOKEN">Then</span>
&nbsp;
Select Case .Range(&quot;C13&quot;).Value
Case &quot;&quot;
.Range(&quot;D17&quot;).Value = &quot;Nix&quot;
Case &quot;Ja&quot;
.Range(&quot;D17&quot;).Value = &quot;Ja&quot;
Case &quot;Nein&quot;
.Range(&quot;D17&quot;).Value = &quot;Ja&quot;
<span class="TOKEN">Case Else</span>
.Range(&quot;D17&quot;).Value = &quot;Wie jetzt?&quot;
<span class="TOKEN">End</span> Select
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Hier kannst Du recht leicht weitere Fälle (Case) einstellen, die (in meinem Bsp. in C13) eingestellt werden können.

Nur als Hinweis: Bislang fehlt aber noch die Anweisung was passieren soll, wenn in keinem Feld (F13:F19) "Nein" steht.

cu
myfake

Lumpensammler
28.06.2006, 16:38
Hallo, myfake,

Pater Brown pflegte was von hübsch-häßlich zu sagen: mit Zählenwenn und der entsprechenden Auswertung wird der Bandwurm weitaus übersichtlicher und verständlicher. Selbst eine Select Case Auswertung ist übersichtlicher. ;)

Gruß
LS

Lausitzcom
28.06.2006, 16:38
Hallo,

mit Eurer Hilfe bin ich zu folgender Lösung gekommen:

With Sheets("Berechnung")
If .Range("R12").Value = "Nein" Or .Range("R13").Value = "Nein" Or .Range("R14").Value = "Nein" Or .Range("R15").Value = "Nein" Or .Range("R16").Value = "Nein" Or .Range("R17").Value = "Nein" Or .Range("R18").Value = "Nein" Or .Range("R19").Value = "Nein" Then
If Range("F6").Value = "" Then
If MsgBox("...?", vbYesNo + vbQuestion, "Rückfrage") = vbYes Then
...
End If
Else
MsgBox "...", , "Hinweis"
End If
End If
End With

Vielen Dank und einen schönen Abend noch.

Grüße LC

myfake
28.06.2006, 17:40
Hallo LS,

wie es scheint hat es ja trotzdem hingehauen. ;) Aber Du hast natürlich recht - hübsch ist der Code nicht. Daher die Frage... wie würdest Du die Zählenwenn Anweisung denn einbauen (ohne lediglich zu zählen, ob etwas in den Zellen steht)?

cu
myfake