Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: String Abgleich/Vergleich (Zahl/Zahl mit Text

VBA: String Abgleich/Vergleich (Zahl/Zahl mit Text
22.01.2015 08:55:19
Andi
Wieder mal ein Hallo an die Profis,
habe mir vor vielen Jahren eine umfangreiche Excel-Matrix programmieren lassen, deren Autor leider nicht mehr verfügbar ist :(
Nun haben sich Daten/Datensätze verändert und eine Funktion läuft nicht mehr - wie gewünscht. Vielleicht kann jemand helfen?
Funktionshintergrund:
Eine bestehende Tabelle wird mittels einer Importroutine aktualisiert. Hierbei gibt es pro Datensatz versch. Abfragen und Vergleiche. Sollten Datensätze nicht zu 100% übereinstimmen, wird eine Userform angezeigt. Hier kann der User den passenden DS anziehen oder andere Funktionen anreizen.
Problem:
Eines der zu importierenden Felder bestand bislang immer nur aus Zahlen (1234).
Das hat sich geändert, denn dieser Zahlenwert ist nun durch Buchstaben ergänzt worden. Diese Buchstaben können an unbestimmter Stelle stehen (B879, 55A1).
Die Importroutine erkennt diese Werte nicht mehr; wahrscheinlich weil in der Funktion (s.u.) eine Val() stattfindet?
Kann man diese Funktion umschreiben oder ändern, ohne Einfluss auf die gesamte restliche Prozedur zu nehmen und doch auch Zahlen-Buchstaben Kombinationen erkennen?
Der orig. Code:
  • 
    Public Function ProjektBestimmen(strKuerzel) As String
    Dim wks            As Worksheet
    Dim rngSuchbereich As Range
    Dim rngZelle       As Range
    Set wks = ActiveWorkbook.Worksheets(cstrWksRefProj)
    Set rngSuchbereich = wks.Range(cstrRangeRefProj)
    For Each rngZelle In rngSuchbereich
    'Problemzeile(?):
    If rngZelle.Value = Val(strKuerzel) Then
    ProjektBestimmen = wks.Cells(rngZelle.Row, 1).Value
    End If
    Next rngZelle
    End Function
    

  • Die beiden nachfolgenden Versuche kehrten das Problem nur um (1) oder erzielten keine Lösung (2):
    1. Verzicht auf Val():
  • If rngZelle.Value = strKuerzel Then

  • 2. Ergänzung durch "or", um beides abzufangen:
  • If rngZelle.Value = strKuerzel Or rngZelle.Value = Val(strKuerzel) Then

  • Danke für Eure Hilfe!
    Gruß

    Anzeige

    4
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA: String Abgleich/Vergleich (Zahl/Zahl mit Text
    22.01.2015 13:00:16
    Rudi
    Hallo,
    wenn strKuerzel tatsächlich immer ein String ist:
    if Cstr(rngZelle) = strKuerzel Then
    Gruß
    Rudi

    ergänzung
    22.01.2015 13:04:28
    Rudi
    Hallo,
    um ganz sicher zu gehen:
    if Cstr(rngZelle) = Cstr(strKuerzel) Then
    Gruß
    Rudi

    AW: ergänzung
    22.01.2015 15:49:33
    Andi
    Hallo,
    ich hatte es anders herum mit CStr versucht.
    Es stellte sich auch heraus, das Excel an einigen Stellen Leerzeichen hinter die Importwerte bastelt. Das muss man erstmal finden :(
    Die Lösung funktioniert. DANKESCHÖN!

    Anzeige
    Leerzeichen
    22.01.2015 16:24:06
    Rudi
    Hallo,
    die kannst du mit Trim entfernen.
    if trim(cstr(rngzelle))=cstr(strKuerzel) then
    Gruß
    Rudi
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    VBA: String Abgleich und Vergleich von Zahlen und Text in Excel


    Schritt-für-Schritt-Anleitung

    Um sicherzustellen, dass Du in Deinem VBA-Code Zahlen und Text korrekt vergleichen kannst, befolge diese Schritte:

    1. Identifiziere die Funktion: Finde die Funktion, die die Strings vergleichen soll. In diesem Fall ist es ProjektBestimmen.

    2. Ändere die Vergleichszeile: Anstelle von If rngZelle.Value = Val(strKuerzel) Then, verwende:

      If Trim(CStr(rngZelle.Value)) = Trim(CStr(strKuerzel)) Then

      Dies sorgt dafür, dass Leerzeichen entfernt werden und die Werte in Strings umgewandelt werden.

    3. Testen der Funktion: Führe die Funktion aus und teste sie mit verschiedenen Eingabewerten, um sicherzustellen, dass auch Kombinationen aus Zahlen und Buchstaben korrekt erkannt werden.

    4. Debugging: Falls das Ergebnis nicht wie erwartet ist, überprüfe die Eingabewerte auf zusätzliche Leerzeichen oder unerwartete Zeichen.


    Häufige Fehler und Lösungen

    • Problem: Leerzeichen hinter den importierten Werten.

      • Lösung: Verwende Trim() um diese zu entfernen, z.B. If Trim(CStr(rngZelle)) = Trim(CStr(strKuerzel)) Then.
    • Problem: Verwendung von Val() gibt unerwartete Ergebnisse.

      • Lösung: Vermeide die Verwendung von Val() für den Vergleich, wenn Du mit Strings arbeitest. Benutze stattdessen CStr().
    • Problem: Strings werden nicht korrekt erkannt.

      • Lösung: Stelle sicher, dass beide Werte mit CStr() konvertiert werden, um sicherzustellen, dass der Vergleich korrekt ist.

    Alternative Methoden

    Eine alternative Methode zum Vergleich von Strings in VBA ist die Verwendung der StrComp-Funktion. Diese Funktion ermöglicht es, die Groß- und Kleinschreibung zu ignorieren oder zu berücksichtigen. Hier ein Beispiel:

    If StrComp(Trim(CStr(rngZelle.Value)), Trim(CStr(strKuerzel)), vbTextCompare) = 0 Then
        ' Werte sind gleich
    End If

    Diese Methode ist besonders nützlich, wenn Du sicherstellen möchtest, dass der Vergleich case-insensitiv ist.


    Praktische Beispiele

    Hier sind einige praktische Beispiele für den Vergleich von Strings in VBA:

    1. Vergleich von Zahlen und Text:

      Dim strKuerzel As String
      strKuerzel = "B879"
      If Trim(CStr(rngZelle.Value)) = Trim(strKuerzel) Then
         ' Aktion ausführen
      End If
    2. Verwendung von StrComp:

      If StrComp(Trim(CStr(rngZelle.Value)), Trim(strKuerzel), vbTextCompare) = 0 Then
         ' Aktion ausführen
      End If

    Tipps für Profis

    • Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.

    • Verwende Debug.Print, um Werte während der Laufzeit zu überprüfen, falls Du Schwierigkeiten beim Vergleich hast.

    • Achte darauf, dass Du die richtige Datentypen verwendest, insbesondere wenn Du mit Excel VBA Integer to String oder VBA as String arbeitest.


    FAQ: Häufige Fragen

    1. Wie kann ich sicherstellen, dass Leerzeichen nicht das Ergebnis beeinflussen?
    Verwende die Trim()-Funktion, um alle führenden und nachfolgenden Leerzeichen zu entfernen, bevor Du einen Vergleich durchführst.

    2. Was ist der Unterschied zwischen Val() und CStr()?
    Val() konvertiert einen String in eine Zahl, während CStr() einen Wert in einen String umwandelt. Verwende CStr() für den Vergleich von Strings.

    3. Gibt es eine Möglichkeit, die Groß- und Kleinschreibung beim Vergleich zu ignorieren?
    Ja, benutze die StrComp-Funktion mit dem Parameter vbTextCompare, um einen case-insensitiven Vergleich durchzuführen.

    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