2 Spalten vergleichen

  • Excel

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

    2 Spalten vergleichen

    Hallo zusammen,

    ich bin (noch) blutiger VBA Anfänger und habe ein Problem - leider nichts passendes gegoogelt.

    Folgendes:
    Ich habe in Tabelle1 Spalte A und Tabelle2 Spalte A jeweils ca. 5000 Nummern

    Ich möchte prüfen ob die Nummern aus Tab1 SpalteA auch in der Tab2 Spalte A vorkommen, wenn ja soll neben der
    jeweiligen Nummer in Tab1 eine Meldung z.b. OK bzw. NOK erscheinen.

    Ist das ohne grösseren Aufwand umsetzbar?

    Danke und Gruss Michael
    Hallo,

    Ist das ohne grösseren Aufwand umsetzbar?
    ja. 20 - 30 Codezeilen sollten reichen.

    Am Besten Du baust Die eine Function die die Zeile in der der zu suchende Wert steht zurückgibt.
    Die könnte in etwa so aussehen:

    Visual Basic-Quellcode

    1. Function SearchRow(SearchRange As Range, SearchItem As Double) As Long
    2. Dim TargetCell As Range
    3. With SearchRange
    4. Set TargetCell = .Find(What:=SearchItem)
    5. End With
    6. If Not TargetCell Is Nothing Then
    7. With TargetCell
    8. SearchRow = .Cells.Row
    9. End With
    10. End If
    11. End Function


    Wenn SearchRow nichts findet wird 0 zurückgegeben, sonst die Zeile in der die Nummer steht.
    So Jetzt nur noch benutzen:

    Visual Basic-Quellcode

    1. DeineVariable = SearchRow Worksheets("Tabelle1").Range("A2:A5002"), MeineNummer


    DeineVariable und MeineNummer währen jeweils Variablen. Nur zum Verständnis.
    Den 2. VBTag brauchste dann nur noch in eine For...Next Schleife reinbauen. Und Durchlaufen lassen. Könnte bei 5000 Durchläufen etwas langsam werden.
    Achja... Es macht Sinn DeineVariable mit If zu prüfen. Wenn DeineVariable = 0, dann "NOK", sonst "OK".

    Bleibt das eigentlich bei 5000 Nummern oder werden das in Zukunft noch mehr?

    Hoffe ich hab nicht zu umständlich geschrieben.

    MFG Skorpion79
    Ja ist es. Ich würde es etwas anders lösen. Keine separate Funktion, dafür aber ein Abbruch der Suchschleife bei Nummernfund.
    Zum einfachen Arbeiten würde ich auch deinen Bereichen mit den Zahlen/ Daten direkt im Excel schon Namen geben. Geht natürlich auch im Makro, wenn Du es in der Tabelle machst. Kannst du die Daten auch auf dem Blatt verschieben und Dein Makro funktioniert trotzdem noch.
    In meinem Beispiel Habe ich die Spalten in den Worksheets selbst benamed.
    Tabelle1, Spalte A: Tab1SpA
    Tabelle2, Spalte A: Tab2SpA

    So nun lässt Du eine For..Each Schleife über die 1. Tabelle laufen, in der Du die Werte die Du suchen willst einliest: (Einfach mal im VB For each eintippen und F1 drücken)
    dann suchst du nach diesen Werten in der zweiten Tabelle. Wichtig abbruchbedingungen, falls der Wert gefunden wird und falls die Zeile leer ist! Damit nicht zuviel im leeren gesucht wird(Rechenzeit)

    Visual Basic-Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim rngTab1, rngTab2 As Range
    3. Dim nichtGefunden As Boolean
    4. For Each rngTab1 In Worksheets("Tabelle3").Range("Tab1SpA")
    5. nichtGefunden = True
    6. If Not rngTab1 = "" Then
    7. For Each rngTab2 In Worksheets("Tabelle4").Range("Tab2SpA")
    8. If Not rngTab2 = "" Then
    9. If rngTab1 = rngTab2 Then
    10. rngTab1.Offset(0, 1) = "OK"
    11. Exit For
    12. End If
    13. Else
    14. Exit For
    15. End If
    16. Next rngTab2
    17. If Not rngTab1 = rngTab2 Then rngTab1.Offset(0, 1) = "NOK"
    18. Else
    19. Exit For
    20. End If
    21. Next rngTab1
    22. End Sub


    schau es dir mal an, du musst es noch etwas auf deine Bedürfnisse anpassen...
    ja. 20 - 30 Codezeilen sollten reichen.


    Ganz ohne Codezeilen:

    Mach es so wie auf dem Picture:
    Kopiere die erste Formelzeile abwärts durch die ganzen zu testenden Zeilen.
    Um Spalten in zwei versch. Tabellen zu vergleichen musst du natürlich den
    absoluten Bezug in der Formel noch anpassen.
    Bilder
    • spaltenvergl.jpg

      30,04 kB, 431×412, 1.196 mal angesehen
    Moin, ich habe den Code von FloFuchs übernommen und auf mein Projekt angepasst. Es funktioniert alles tadellos, wenn die Daten in den Zellen die verglichen werden sollen per Hand eingetragen wurden. Der Spaltenabgleich soll dann aber in einem größeren Gesamtprojekt verwendet werden, indem die abzugleichenden Spalten aus verschiedenen Arbeitsmappen in die aktuelle reinkopiert werden. Mit den reinkopierten Spalten funktioniert es trotz Formatierung auf Standart usw. nicht, obwohl die selben Werte wie bei der manuellen Eintragung vorhanden sind.

    Woran kann das noch liegen?

    Gruß Gummibaum