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

VBA ODER-Abfrage

Forumthread: VBA ODER-Abfrage

VBA ODER-Abfrage
Erik
Hallo zusammen,
ich will mit VBA eine doppelte Or-abfrage machen aber es hängt ein wenig. Er soll schauen ob in den Zellen "n.b." steht oder ein Zahlenwert. In zwei Zellen soll er aber wenn eine davon n.b. enthält annehmen das ein Zahlenwert vorliegt.
Das Ziel soll sein, alle Zellen zu prüfen um dann ein Kreuzchen zu setzten bei Vollständig, Unvollständig oder Teilweise. Ich hoffe es ist verständlich.
Meine Idee:
If Sheets("EA").Cells(18, 5).Value = "n.b." And _
Sheets("EA").Cells(19, 5).Value = "n.b." And _
Sheets("EA").Cells(21, 5).Value = "n.b." And _
Sheets("EA").Cells(22, 5).Value = "n.b." And _
Sheets("EA").Cells(23, 5).Value = "n.b." And _
Sheets("EA").Cells(24, 5).Value = "n.b." And _
Sheets("EA").Cells(25, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 3).Value = "x"
End If
If Sheets("Übersichtsblatt").Cells(21, 3).Value = "" Then
If Sheets("EA").Cells(18, 5).Value = "n.b." Or _
Sheets("EA").Cells(19, 5).Value = "n.b." Or _
Sheets("EA").Cells(21, 5).Value = "n.b." Or _
Sheets("EA").Cells(24, 5).Value = "n.b." Or _
Sheets("EA").Cells(25, 5).Value = "n.b." Or _
Sheets("EA").Cells(22, 5).Value = "n.b." And Sheets("EA").Cells(23, 5).Value = numeric Or _
Sheets("EA").Cells(22, 5).Value = numeric And Sheets("EA").Cells(23, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 4).Value = "x"
End If
End If
If Sheets("Übersichtsblatt").Cells(21, 3).Value = "" And _
Sheets("Übersichtsblatt").Cells(21, 4).Value = "" Then
Sheets("Übersichtsblatt").Cells(21, 2).Value = "x"
End If
Beim mittleren Teil hängt es. Ohne die zweite Or-abfrage funktioniert alles super. Aber das Kreuzchen soll halt auch bei "Vollständig" gesetzt werden wenn die Zellen 22,5 oder 23,5 nur einen Zahlenwert enthalten sollte.
Danke im Voraus.
Erik
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA ODER-Abfrage
10.05.2012 09:28:34
Sheldon
Hi Erik,
weil es heißen muss If Isnumeric(Sheets("EA").Cells(22, 5).Value = "n.b." And Sheets("EA").Cells(23, 5).Value) Or _
bei = numeric erwartet VBA eine Variable mit diesem Namen, deren Inhalt mit der Zelle abgeglichen wird.
Gruß
Sheldon
Sorry, Fehler, so ists richtig
10.05.2012 09:30:02
Sheldon
Hi nochmals,
es muss natürlich heißen
Sheets("EA").Cells(22, 5).Value = "n.b." And Isnumeric(Sheets("EA").Cells(23, 5).Value) Or _
Gruß
Sheldon
Anzeige
AW: Sorry, Fehler, so ists richtig
10.05.2012 09:52:32
Erik
Hab es so verändert wie du gesagt hast aber jetzt passiert folgendes, wenn eigentlich Vollständig angekreuzt werden soll, kreuzt er bei Unvollständig. Kann man das irgendwie drehen ? ^^
If Sheets("EA").Cells(18, 5).Value = "n.b." And _
Sheets("EA").Cells(19, 5).Value = "n.b." And _
Sheets("EA").Cells(21, 5).Value = "n.b." And _
Sheets("EA").Cells(22, 5).Value = "n.b." And _
Sheets("EA").Cells(23, 5).Value = "n.b." And _
Sheets("EA").Cells(24, 5).Value = "n.b." And _
Sheets("EA").Cells(25, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 3).Value = "x"
End If
If Sheets("Übersichtsblatt").Cells(21, 3).Value = "" Then
If Sheets("EA").Cells(18, 5).Value = "n.b." Or _
Sheets("EA").Cells(19, 5).Value = "n.b." Or _
Sheets("EA").Cells(21, 5).Value = "n.b." Or _
Sheets("EA").Cells(24, 5).Value = "n.b." Or _
Sheets("EA").Cells(25, 5).Value = "n.b." Or _
Sheets("EA").Cells(22, 5).Value = "n.b." And IsNumeric(Sheets("EA").Cells(23, 5).Value) Or _
IsNumeric(Sheets("EA").Cells(22, 5).Value) And Sheets("EA").Cells(23, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 4).Value = "x"
End If
End If
If Sheets("Übersichtsblatt").Cells(21, 3).Value = "" And _
Sheets("Übersichtsblatt").Cells(21, 4).Value = "" Then
Sheets("Übersichtsblatt").Cells(21, 2).Value = "x"
End If
Danke dir schon mal für deine Hilfe Sheldon
Anzeige
AW: Sorry, Fehler, so ists richtig
10.05.2012 10:36:17
Sheldon
Hi,
also anhand des Codes kann ich gar nicht erkennen, wo letztlich ein Kreuz gesetzt wird. Aber ich nehme mal an, das wird ein Logik-Problem sein, denn:
die Bedingungen erwarten wg der Or-Anweisungen nur, das irgendwo in 18,5; 19,5; 21,5; 24,5 oder 25,5 ein "n.b." steht. Trifft das zu, wird noch geprüft, ob einer der folgenden Werte numerisch ist und dann in 21,4 ein x eingetragen. Willst du aber in allen genannten Zellen n.b. stehen haben, müsste es ja And heißen und nicht Or.
Gruß
Sheldon
Anzeige
AW: VBA ODER-Abfrage
10.05.2012 09:41:25
Marc
Hallo!
Die Eigenschaft heißt nicht numeric. Du prüfst jetzt auf eine variable namens "numeric" die aber nicht belegt ist.
Die Funktion heißt isnumeric(Sheets("EA").Cells(22, 5)) und ergibt dann false oder true.
An der Wertabfrage könnte man sicher auch noch was besser machen. Für den ersten Teil vielleicht sowas wie zählenwenn ("E18:E25";"n.b.") und für den zweiten Teil eine abfrage auf anzal oder´anzahl2.
Es säh (formatbereinigt) dann so aus:
Sub test()
With Sheets("EA")
If .Cells(18, 5).Value = "n.b." And _
.Cells(19, 5).Value = "n.b." And _
.Cells(21, 5).Value = "n.b." And _
.Cells(22, 5).Value = "n.b." And _
.Cells(23, 5).Value = "n.b." And _
.Cells(24, 5).Value = "n.b." And _
.Cells(25, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 3).Value = "x"
End If
If Sheets("Übersichtsblatt").Cells(21, 3).Value = "" Then
If .Cells(18, 5).Value = "n.b." Or _
.Cells(19, 5).Value = "n.b." Or _
.Cells(21, 5).Value = "n.b." Or _
.Cells(24, 5).Value = "n.b." Or _
.Cells(25, 5).Value = "n.b." Or _
.Cells(22, 5).Value = "n.b." And IsNumeric(.Cells(23, 5)) Or _
IsNumeric(.Cells(22, 5)) And .Cells(23, 5).Value = "n.b." Then
Sheets("Übersichtsblatt").Cells(21, 4).Value = "x"
End If
End If
End With
With Sheets("Übersichtsblatt")
If .Cells(21, 3).Value = "" And _
.Cells(21, 4).Value = "" Then
.Cells(21, 2).Value = "x"
End If
End With
End Sub
An Werten oder logik hab ich nix geändert!
Gruß, MCO
Anzeige
AW: VBA ODER-Abfrage
10.05.2012 09:59:29
Erik
Hey Marc,
danke für deine Hilfe aber wie ich vorhin geschrieben habe ist es auch mit deiner Schreibweise.
Hast du vielleicht ne Idee wie ich das Problem lösen kann ?
Bei (22,5 und 23,5) steht ein "n.b.", nun soll es eigentlich Unvollständig sein wenn bei den anderen Zellen ein Wert drinne steht. Wenn ich bei einem eine Zahl eintage dann kreuzt er Vollständig an ^^ .. genau falsch.
Anzeige
was ist denn mit Cells(20,5)? owt
10.05.2012 10:47:59
Rudi
AW: was ist denn mit Cells(20,5)? owt
10.05.2012 15:04:30
Erik
Hey Rudi,
die wird net geprüft.
Erik
ganz anderer Ansatz
10.05.2012 16:01:06
Rudi
Hallo,
Sub xxxx()
Dim arr(6), i As Integer
Dim bln3 As Boolean, bln4 As Boolean
With Sheets("EA")
For i = 0 To 1
arr(0) = .Cells(i + 18, 5)
Next
For i = 2 To 6
arr(i) = .Cells(i + 19, 5)
Next
End With
bln3 = True
For i = 0 To 6
bln3 = bln3 And arr(i) = "n.b."
Next
If Not bln3 Then
bln4 = True
For i = 0 To 2
bln4 = bln4 And arr(i) = "n.b."
Next
For i = 3 To 4
bln4 = bln4 And (arr(i) = "n.b." Or IsNumeric(arr(i)))
Next
For i = 5 To 6
bln4 = bln4 And arr(i) = "n.b."
Next
End If
With Sheets("Übersichtsblatt")
.Range(.Cells(21, 2), .Cells(21, 4)) = ""
If Not bln3 And Not bln4 Then .Cells(21, 2) = "x"
If bln3 Then .Cells(21, 3) = "x"
If bln4 Then .Cells(21, 4) = "x"
End With
End Sub

Gruß
Rudi
Anzeige
;
Anzeige

Infobox / Tutorial

Excel VBA ODER-Abfrage für die Zellprüfung


Schritt-für-Schritt-Anleitung

Um eine ODER-Abfrage in Excel VBA zu erstellen, die prüft, ob in bestimmten Zellen "n.b." oder ein Zahlenwert steht, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (dein Workbook)“ > Einfügen > Modul.

  3. Kopiere und füge den folgenden Code ein:

    Sub ODERAbfrage()
       Dim i As Integer
       Dim blnVollstaendig As Boolean
       Dim blnUnvollstaendig As Boolean
       Dim arr(6) As Variant
    
       With Sheets("EA")
           For i = 0 To 6
               arr(i) = .Cells(i + 18, 5).Value
           Next i
       End With
    
       blnVollstaendig = True
       For i = 0 To 6
           blnVollstaendig = blnVollstaendig And (arr(i) = "n.b.")
       Next i
    
       blnUnvollstaendig = Not blnVollstaendig
       For i = 0 To 2
           blnUnvollstaendig = blnUnvollstaendig And (arr(i) = "n.b.")
       Next i
       For i = 3 To 4
           blnUnvollstaendig = blnUnvollstaendig And (arr(i) = "n.b." Or IsNumeric(arr(i)))
       Next i
       For i = 5 To 6
           blnUnvollstaendig = blnUnvollstaendig And (arr(i) = "n.b.")
       Next i
    
       With Sheets("Übersichtsblatt")
           .Cells(21, 2).Value = IIf(blnUnvollstaendig, "x", "")
           .Cells(21, 3).Value = IIf(blnVollstaendig, "x", "")
           .Cells(21, 4).Value = IIf(blnUnvollstaendig, "x", "")
       End With
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus.

Dieser Code überprüft die Zellen E18 bis E25 auf "n.b." und setzt die entsprechenden Kreuzchen im Übersichtsblatt.


Häufige Fehler und Lösungen

  • Fehler: "Variable nicht gefunden"

    • Stelle sicher, dass du IsNumeric korrekt schreibst. Es sollte IsNumeric(Sheets("EA").Cells(22, 5).Value) heißen.
  • Fehler: Falsches Kreuzchen wird gesetzt

    • Überprüfe, ob die Logik der ODER- und UND-Abfragen korrekt ist. Stelle sicher, dass die Bedingungen richtig kombiniert sind.

Alternative Methoden

Falls du eine andere Herangehensweise bevorzugst, kannst du die Funktion ZÄHLENWENN verwenden, um die Anzahl der "n.b."-Werte zu zählen:

If WorksheetFunction.CountIf(Sheets("EA").Range("E18:E25"), "n.b.") = 8 Then
    Sheets("Übersichtsblatt").Cells(21, 3).Value = "x"
End If

Diese Methode kann einfacher sein, wenn du nur die Anzahl der "n.b."-Werte benötigst.


Praktische Beispiele

Hier ein Beispiel für eine einfache ODER-Abfrage in VBA:

Sub Beispiel()
    If Sheets("EA").Cells(18, 5).Value = "n.b." Or IsNumeric(Sheets("EA").Cells(19, 5).Value) Then
        Sheets("Übersichtsblatt").Cells(21, 2).Value = "x"
    End If
End Sub

Dieses Beispiel überprüft, ob entweder in Zelle E18 "n.b." steht oder in Zelle E19 ein Zahlenwert vorhanden ist.


Tipps für Profis

  • Nutze Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Verwende Debug.Print, um während der Entwicklung den Wert von Variablen zu überprüfen.
  • Kommentiere deinen Code, um die Logik für zukünftige Referenzen klar zu halten.

FAQ: Häufige Fragen

1. Wie kann ich die Abfrage für mehr als zwei Zellen erweitern? Du kannst die Logik der Schleifen anpassen, um beliebig viele Zellen zu überprüfen.

2. Was mache ich, wenn ich eine andere Excel-Version nutze? Der oben angegebene VBA-Code sollte in den meisten Excel-Versionen funktionieren, die VBA unterstützen (z. B. Excel 2010 und neuer). Achte darauf, dass deine Version die entsprechenden Funktionen unterstützt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige