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

Forumthread: VBA: Vergleich größer/kleiner funktioniert nicht

VBA: Vergleich größer/kleiner funktioniert nicht
25.09.2007 10:08:31
der.dan
Hallo und guten Morgen.
Und wieder einmal macht mein VBA-Code nicht das was er soll. Diesmal hakt's an folgender Stelle:
Es soll verglichen werden, ob ein Zellwert kleiner und/oder größer ist als zwei Variablen. Dummerweise kann ich eingeben was ich will, der Zellwert ist irgendwie nie größer als 0 (NULL) - dabei ist doch von der Theorie her jede positive Zahl größer als 0...
Hier mal der betreffende Code:

Sub test()
Dim zeile, zzeile, nzeile, lzeile As Long
Dim ssvPLZ, ssbPLZ As String
ssvPLZ = Worksheets("Eingeben und Suchen").Range("B19").Value
ssbPLZ = Worksheets("Eingeben und Suchen").Range("B20").Value
lzeile = Sheets("Kundenliste").Cells(65536, 1).End(xlUp).Row
MsgBox lzeile
For zeile = 1 To lzeile
nzeile = Sheets("Eingeben und Suchen").Cells(65536, 1).End(xlUp).Row + 1
MsgBox zeile
If Sheets("Kundenliste").Cells(zeile, 4) > ssvPLZ Then MsgBox ("größer als ssvPLZ")
If Sheets("Kundenliste").Cells(zeile, 4) 


ssvPLZ und ssbPLZ sind "0" bzw. "99999" - jedoch mit beschriebenem Ergebnis...
Kurioserweise hat das Ganze letzte Woche Freitag noch einwandfrei funktioniert...
Nur finde ich den Grund für das nicht-funktionieren einfach nicht - wer kann mir helfen?
Gruß
Dan

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nicht
25.09.2007 10:37:36
Sigi
Hi Dan,
kann es sein, dass du Äpfel mit Birnen vergleichst?
Ich weiß nicht was in deinen Zellen zum Vergleichen steht.
Aber deine Variablendefinitionen sind: ssbPLZ ein String, ssvPLZ ein Variant. lzeile ist ein Long, zeile, zzeile und nzeile jeweils ein Variant. Ist das so gewollt?
Gruß
Sigi

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
25.09.2007 12:26:38
der.dan
Hi Sigi,
Moooment - ich dachte bisher dass eine Deklaration nach dem Muster "Dim ssvPLZ, ssbPLZ as string" etc. dann ALLE Variablen entsprechend deklariert und nicht solche die vor dem Komma stehen als Standardtyp Variant deklariert werden... Lieg ich da jetzt doch falsch?
Hm... Aber ich find's trotzdem irgendwie verwunderlich dass Freitag noch alles funktioniert hat...
Gruß
Dan

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
25.09.2007 21:18:06
Renee
Hi Dan,
Lieg ich da jetzt doch falsch?
Ja. Sonst müsste bei diesem Code, schon in der ersten Zuweisung ein Fehler auftreten:

Sub x()
Dim lLong1, lLong2 As Long
lLong1 = "ABC"
lLong2 = "ABC"
End Sub


GreetZ Renee

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
26.09.2007 08:42:00
der.dan
Hm - na gut... ;-) Habe also jetzt die Deklarationen umgeschrieben... Mit folgendem Ergebnis: Für die PLZ funktioniert's jetzt wieder - nur kann ich nach wie vor nicht nach Monaten suchen... Obwohl hier die Abfrage, Deklaration etc. wie bei der PLZ ist...
Hab die Datei einfach mal angehängt, betroffen ist das Sub CommandButton_sWeiter_Click() (Zeile 407-593)...: https://www.herber.de/bbs/user/46336.xls
Gruß vom Dan

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
26.09.2007 09:36:00
Renee
Hi Dan,
Dein Code vergleicht TEXT mit TEXT und damit ist z.B. "12" kleiner als "2" . In dem Fall kann es nur funtkionieren, wenn beide Zellinhalte (Suchwert und Datensatzwert) als Zahl formatiert und im Code auch als solche definiert werden.
Sonst will ich mich eher nicht zum Code äussern, würde Dir aber dringend empfehlen einige Code-Beispiel von "Datensätze filtern / suchen" im Archiv/Recherche zu studieren!
GreetZ Renee

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
26.09.2007 15:08:40
der.dan
Hi Renee,
habe die Definitionen und Deklarationen sowie Zellwerte entsprechend angepasst. Und siehe da: Alles gut. :-D
Naja, dass mein Code nicht der "schönste" ist - nun gut, das ist mir eigentlich schon klar... Bin halt noch am "üben" und erfreut, dass ich die Sachen die die Datei jetzt macht hinbekommen habe....
Wenn Sie soweit am Laufen ist, will ich nach und nach schauen was ich da noch alles verbessern und "entschlacken" kann... Ach ja: Und dabei sicherlich auch die eine oder andere Funktion aus dem Archiv testen. (Nicht dass ich da nicht schon vorher schon reingeschaut hätte... Habe jedoch die Sachen die ich fand nicht funktionsfähig in meine Datei einbauen können und deswegen einen Tipp hier aus dem Forum aufgegriffen, der vielleicht nicht der schönste ist, aber zumindest schon mal funktioniert und nun ja auch nicht mehr Text mit Zahlen vergleicht... ;-) )
Auf jeden Fall vielen Dank für Deine Hilfe. (Natürlich auch an alle anderen...!)
Gruß
Dan
:-)

Anzeige
AW: VBA: Vergleich größer/kleiner funktioniert nic
26.09.2007 08:51:58
der.dan
Hm - na gut... ;-) Habe also jetzt die Deklarationen umgeschrieben... Mit folgendem Ergebnis: Für die PLZ funktioniert's jetzt wieder - nur kann ich nach wie vor nicht nach Monaten suchen... Obwohl hier die Abfrage, Deklaration etc. wie bei der PLZ ist...
Hab die Datei einfach mal angehängt, betroffen ist das Sub CommandButton_sWeiter_Click() (Zeile 407-593)...: https://www.herber.de/bbs/user/46336.xls
Gruß vom Dan
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Vergleich größer/kleiner richtig umsetzen


Schritt-für-Schritt-Anleitung

  1. Variablen korrekt deklarieren: Stelle sicher, dass du alle Variablen entsprechend ihrem Datentyp deklarierst. Zum Beispiel:

    Dim ssvPLZ As Long
    Dim ssbPLZ As Long

    Vermeide die Verwendung von Variant, wenn du mit Zahlen arbeitest, um Fehler im Vergleich zu verhindern.

  2. Zellwerte als Zahlen formatieren: Achte darauf, dass die Zellwerte, die du vergleichst, als Zahlen formatiert sind. Ein Textwert wie "12" wird möglicherweise nicht korrekt mit der Zahl 2 verglichen.

  3. Vergleichsoperatoren verwenden: Nutze die richtigen Operatoren in deinem Code, wie >, <, >=, und <=. Beispiel:

    If Sheets("Kundenliste").Cells(zeile, 4) > ssvPLZ Then
       MsgBox ("größer als ssvPLZ")
    End If
  4. Debugging: Verwende MsgBox oder die Debug.Print-Anweisung, um den Wert von Variablen während der Ausführung zu überprüfen. So kannst du sehen, ob der Wert wie erwartet ist.

  5. Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung, um unvorhergesehene Fehler zu erkennen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    ErrorHandler:
       MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

Häufige Fehler und Lösungen

  • Problem: Der Vergleich funktioniert nicht, weil der Zellwert als Text formatiert ist.

    • Lösung: Stelle sicher, dass die Zellen als Zahl formatiert sind. Du kannst dies in Excel durch Rechtsklick auf die Zelle und Auswahl von "Zellen formatieren" überprüfen.
  • Problem: Variablen werden nicht korrekt deklariert.

    • Lösung: Achte darauf, dass die Deklaration aller Variablen im Code korrekt erfolgt. Alle Variablen sollten den richtigen Datentyp haben, z.B. Long für Ganzzahlen.
  • Problem: Vergleichsoperationen mit Variant.

    • Lösung: Verwende spezifische Datentypen, um sicherzustellen, dass die Vergleiche korrekt durchgeführt werden. Variant kann unerwartete Ergebnisse liefern.

Alternative Methoden

  • Verwende den CStr oder CInt-Befehl: Wenn du sicherstellen möchtest, dass du Zahlen vergleichst, kannst du Zellwerte wie folgt umwandeln:

    If CInt(Sheets("Kundenliste").Cells(zeile, 4)) > CInt(ssvPLZ) Then
       MsgBox ("größer als ssvPLZ")
    End If
  • Nutze die Val-Funktion: Diese Funktion konvertiert einen Textwert in eine Zahl. Dies kann nützlich sein, wenn du sicherstellen möchtest, dass der Vergleich korrekt durchgeführt wird:

    If Val(Sheets("Kundenliste").Cells(zeile, 4)) > Val(ssvPLZ) Then
       MsgBox ("größer als ssvPLZ")
    End If

Praktische Beispiele

Hier sind einige Beispiele, wie du in VBA Zellen vergleichen kannst:

  1. Vergleich von zwei Werten:

    Sub VergleichBeispiel()
       Dim wert1 As Long
       Dim wert2 As Long
       wert1 = 10
       wert2 = 20
       If wert1 < wert2 Then
           MsgBox "wert1 ist kleiner als wert2"
       End If
    End Sub
  2. Vergleich von Datumswerten:

    Sub DatumVergleich()
       Dim datum1 As Date
       Dim datum2 As Date
       datum1 = DateValue("2023-01-01")
       datum2 = DateValue("2023-12-31")
       If datum1 < datum2 Then
           MsgBox "datum1 ist kleiner als datum2"
       End If
    End Sub

Tipps für Profis

  • Nutze Debug.Print für eine bessere Fehlerdiagnose anstelle von MsgBox, da es die Ausführung des Codes nicht unterbricht.
  • Halte deinen Code sauber und gut strukturiert, um die Lesbarkeit zu erhöhen und spätere Anpassungen zu erleichtern.
  • Verwende Option Explicit am Anfang deines Codes, um zu erzwingen, dass alle Variablen deklariert werden. Dies hilft, Fehler durch Tippfehler zu vermeiden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen >= und > in VBA? >= prüft, ob ein Wert größer oder gleich einem anderen ist, während > nur prüft, ob er größer ist.

2. Warum funktioniert mein Vergleich manchmal nicht? Das kann daran liegen, dass du unterschiedliche Datentypen vergleichst. Stelle sicher, dass alle Werte als Zahlen formatiert sind, bevor du den Vergleich durchführst.

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