Spaltenvergleich mit reinkopierten Spalten

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von zorroot.

    Spaltenvergleich mit reinkopierten Spalten

    Hallo, ich möchte gerne in meinem VBA Tool zwei Spalten die zuvor aus unterschiedlichen Exelmappen bzw. Textdateien eingelesen worden vergleichen.

    Wird in der zweiten Spalte der gleiche Wert wie in der ersten gefunden, wird in Spalte drei eine "1" geschrieben, wird er nicht gefunden, eine "0".
    Den Code dafür habe ich bereits geschrieben und er funktioniert auch wunderbar, wenn die Werte zum Vergleichen in den beiden Spalten in der Mappe von Hand eingetragen wurden.

    Sobald der Code aber mit zuvor automatisch reinkopierten Werten arbeiten soll, spuckt er nur "0"en aus.
    Ich habe es bereits versucht die Spalten vor dem Vergleich auf Standartformatierung zu bringen oder mit Range.Value zu arbeiten.

    Bisher hat noch nichts funktioniert. Was mache ich falsch bzw. wie würde es anders funktionieren?

    Gruß Gummibaum :P

    Visual Basic-Quellcode

    1. For Each rngTab1 In Worksheets("Tabelle2").Range("A:A")
    2. nichtGefunden = True
    3. If Not rngTab1 = "" Then
    4. For Each rngTab2 In Worksheets("Tabelle2").Range("B:B")
    5. If Not rngTab2 = "" Then
    6. If rngTab1 = rngTab2 Then
    7. rngTab1.Offset(0, 2) = "1"
    8. Exit For
    9. End If
    10. Else
    11. Exit For
    12. End If
    13. Next rngTab2
    14. If Not rngTab1 = rngTab2 Then rngTab1.Offset(0, 2) = "0"
    15. Else
    16. Exit For
    17. End If
    18. Next rngTab1
    Wenn du den Code in den Codebereich von Tabelle2 packst, kannst du die die Sheet-Adressierung sparen.
    Außerdem geht die innere Schleife auf die Performance.
    Ich glaube, das hier wäre einfacher, performanter und übersichtlicher:

    Visual Basic-Quellcode

    1. ​For Each c In Intersect (UsedRange, Range("A:A"))
    2. If Not IsEmpty(c) Then
    3. If Range("B:B").Find(c.Value, LookAt:=xlWhole, LookIn:=xlValues) Is Nothing Then
    4. c.Offset(0,2).Value = 0
    5. Else
    6. c.Offset(0,2).Value = 1
    7. End If
    8. End If
    9. Next
    Ob das allerdings auch das Problem mit unterschiedlichen Datentypen löst, musst du testen.
    Sonst musst du mal ein Beispiel-Sheet hier rein stellen, das nicht geht.

    Edit:
    Ich würde das übrigens ohne VBA mir einer VLOOKUP (SVERWEIS) Formel im Arbeitsblatt lösen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Danke! Ich komme bloß noch nicht in deinem Code damit zurecht was ich bei UsedRange eintragen muss.

    Den Code kann ich leider nicht in den Tabellenbereich2 schreiben, da Tabelle2 erst bei Bedarf per Buttonklick eingefügt wird.

    Ich hänge mal eine Mappe an in der reinkopierte Spalten vorhanden sind und ich beide bereits auf Standart formatiert habe und sowie auch mein Code nochmal hinterlegt ist.
    Der Spaltenvergleich ist nur ein kleiner Teil des gesamten Makros und am Ende soll alles automatisch auf Klick ablaufen und möglichst wenige zusätzliche Anweisungen enthalten.

    Edit: OK, doch ohne meinen Codeschnipsel, da das Dateiformat nicht akzeptiert wird.
    Dateien
    Hallo Gummibaum,
    dein Code funktioniert, weil du dich zwei Mal auf die Standardeigenschaften von Objekten verlässt (Zeile 1 und 4 deines Codes). Der Code von petaod hingegen nutzt explizit die korrekte Eigenschaft (Zeile 3: c.value). Sobald Microsoft mal die Standardeigenschaften von Objekten ändert (was hin und wieder vorkommt), wird dein Code nicht mehr funktionieren, der von petaod hingegen schon.
    Viele Grüße,
    Zorroot