Office: Vergleich von zwei Spalten und ergänzen mittels VBA

Helfe beim Thema Vergleich von zwei Spalten und ergänzen mittels VBA in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Leute, ich hoffe, dass einer von euch mir helfen kann. Ich habe zwei Dateien (Dispo und Silo) und die einzige Zeile die hier für mich wichtig... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Maximilian123, 4. September 2014.

  1. Maximilian123 Erfahrener User

    Vergleich von zwei Spalten und ergänzen mittels VBA


    Hallo Leute,
    ich hoffe, dass einer von euch mir helfen kann.
    Ich habe zwei Dateien (Dispo und Silo) und die einzige Zeile die hier für mich wichtig ist wäre die Lieferschein-Nr. in Spalte A. Jetzt möchte ich es gerne schaffen, dass die Lieferschein-Nr. aus Dispo mit der aus Silo verglichen wird und fehlende Einträge ergänzt werden.

    Bsp.

    Datei Dispo
    Lieferschein-Nr.
    1111
    2222
    3333
    4444

    Datei Silo
    Lieferschein-Nr.
    1111
    2222
    2223
    3333
    3334
    4444

    Datei Dispo nach Makro durchlauf
    1111
    2222
    2223
    3333
    3334
    4444

    Hab mich gefühlt schon durch alle Foren gesucht aber bekomme es einfach nicht hin. Vielleicht hat einer von euch eine gute Idee wie ich das schaffen kann?
    Danke
     
    Maximilian123, 4. September 2014
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi Maximilian,

    Code:
    Sub Vergleichen()
       Dim lngZeile As Long
       Dim lngZiel As Long
       With Workbooks("Silo").Worksheets("Tabelle1")
          For lngZeile = 1 To 7
             If IsError(Application.Match(.Cells(lngZeile, 1), _
                Workbooks("Dispo").Worksheets("Tabelle1").Columns(1), 0)) Then
                lngZiel = Application.Match(.Cells(lngZeile, 1), _
                   Workbooks("Dispo").Worksheets("Tabelle1").Columns(1), 1)
                Workbooks("Dispo").Worksheets("Tabelle1").Rows(lngZiel + 1).Insert
                Workbooks("Dispo").Worksheets("Tabelle1").Cells(lngZeile, 1) = .Cells(lngZeile, 1)
             End If
          Next lngZeile
       End With
    End Sub
    
    Namen der Tabellenblätter musst du entsprechend anpassen.

    Falls es tatsächlich unterschiedliche Arbeitsmappen sind, dann musst du vor Worksheets("Dispo") noch den Namen der Arbeitsmappe ergänzen.

    Bis später,
    Karin
     
    Zuletzt bearbeitet: 4. September 2014
  3. Maximilian123 Erfahrener User
    Super Vielen Dank schonmal!

    Bekomme jetzt leider eine Fehlermeldung 13. Ich glaube das muss an unterschiedlichen Datentypen liegen. Sehe ich das richtig und hast du eine Idee was ich noch Falsch habe ?


    Dim lngZeile As Long
    Dim lngZiel As Long

    Workbooks.Open Filename:="Users:test:Desktop:TestDispo.xlsm"
    With Workbooks("TestSilo.xlsm").Worksheets("Blatt1")
    For lngZeile = 1 To 7
    If IsError(Application.Match(.Cells(lngZeile, 1), _
    Workbooks("TestDispo.xlsm").Worksheets("Blatt1").Columns(1), 0)) Then
    lngZiel = Application.Match(.Cells(lngZeile, 1), _
    Workbooks("TestDispo.xlsm").Worksheets("Blatt1").Columns(1), 1)

    Workbooks("TestDispo.xlsm").Worksheets("Blatt1").Rows(lngZiel + 1).Insert
    Workbooks("TestDispo.xlsm").Worksheets("Blatt1").Cells(lngZeile, 1) = .Cells(lngZeile, 1)
    End If
    Next lngZeile
    End With
     
    Maximilian123, 4. September 2014
    #3
  4. Beverly
    Beverly Erfahrener User

    Vergleich von zwei Spalten und ergänzen mittels VBA

    Und was sagt der Debugger genau?
    Ich erhalte keine Fehlermeldung in meiner Beispielmappe.

    Bis später,
    Karin
     
  5. Maximilian123 Erfahrener User
    Laufzeitfehler 13

    Typenkonflikt

    ist die genaue Fehlermeldung
     
    Maximilian123, 4. September 2014
    #5
  6. Beverly
    Beverly Erfahrener User
    Wie schon geschrieben - in meiner Beispielmappe erhalte ich keinen Fehler. Da kann ich dir leider nicht weiterhelfen, da ich deine Mappen nicht kenne.
    Übrigens: es gibt hier im Forum die Möglichkeit Mappen hochzuladen.

    Bis später,
    Karin
     
  7. Maximilian123 Erfahrener User
    Den Anhang Abgleich.xlsm betrachten

    Hab jetzt eine Beispiel Datei gemacht und auch hier tritt der Fehler leider wieder auf. Vielleicht macht es das leichter ihn zu verstehen.

    Vielen Dank für die Hilfe
     
    Maximilian123, 4. September 2014
    #7
  8. Beverly
    Beverly Erfahrener User

    Vergleich von zwei Spalten und ergänzen mittels VBA

    Du hast Leerzeilen im Tabellenblatt "Silo", im Gegensatz zu dem Beipsiel aus deinem Eröffnungsbeitrag - das muss berücksichtigt werden. Außerdem ist unklar, ob in "Dispo" tatsächlich schon Leerzeilen an den entsprechenden Stellen vorhanden sind oder nicht - das unterscheidet sich in deiner Mappe auch von deinem Eröffnungsbeitrag.

    Du müsstest schon mal genau erklären, wie die tatsächliche Ausgangssituation ist, den davon hängt ja ab, wie der Code aussehen muss.

    Bis später,
    Karin
     
  9. Maximilian123 Erfahrener User
    Nein das hab ich Falsch in der Excel eingetragen. Es gibt keine Leerzeilen. Über eine Userform schreibe ich immer in die letzte freie Zeile eine neue Lieferschein-Nr.
     
    Maximilian123, 5. September 2014
    #9
  10. Beverly
    Beverly Erfahrener User
    So läuft der Code in deiner Mappe korrekt - unter der Bedingung, dass es in keiner der beiden Tabellen Leerzellen in Spalte A gibt:

    Code:
    Private Sub CommandButton1_Click()
       Dim lngZeile As Long
       Dim lngZiel As Long
       Dim lngLetzteQuelle As Long
       Dim lngLetzteZiel As Long
       With Worksheets("Silo")
          lngLetzteQuelle = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
             .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
          For lngZeile = 2 To lngLetzteQuelle
             lngLetzteZiel = IIf(IsEmpty(Cells(Rows.Count, 1)), _
                Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
             If IsError(Application.Match(.Cells(lngZeile, 1), _
                Worksheets("Dispo").Columns(1), 0)) Then
                If IsError(Application.Match(.Cells(lngZeile, 1), _
                   Worksheets("Dispo").Columns(1), 1)) Then
                   lngZiel = 2
                ElseIf Application.Match(.Cells(lngZeile, 1), _
                   Worksheets("Dispo").Columns(1), 1) = lngLetzteZiel Then
                   lngZiel = lngLetzteZiel + 1
                Else
                   lngZiel = Application.Match(.Cells(lngZeile, 1), _
                      Worksheets("Dispo").Columns(1), 1) + 1
                End If
                Worksheets("Dispo").Rows(lngZiel).Insert
                Worksheets("Dispo").Cells(lngZiel, 1) = .Cells(lngZeile, 1)
             End If
          Next lngZeile
       End With
    End Sub
    
    Bis später,
    Karin
     
  11. Maximilian123 Erfahrener User
    Super klasse funktioniert!
    Kannst du mir vielleicht noch die einzelnen Schritte erklären so dass ich verstehe was die einzelnen Befehle bedeuten?
     
    Maximilian123, 5. September 2014
    #11
  12. Beverly
    Beverly Erfahrener User
    Der Code baut auf der Tabellen-Formel VERGLEICH() auf - zur Verwendung der Vergleichstypen 0 und 1 schaue in der Excel-Hilfe.

    Code:
    Private Sub CommandButton1_Click()
       Dim lngZeile As Long
       Dim lngZiel As Long
       Dim lngLetzteQuelle As Long
       Dim lngLetzteZiel As Long
       ' bezogen auf Tabelle "Silo"
       With Worksheets("Silo")
          ' letzte belegte Zeile in Spalte A
          lngLetzteQuelle = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
             .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
          ' Schleife von 2 bis zur letzten belegten Zeile
          For lngZeile = 2 To lngLetzteQuelle
             ' letzte belegte Zeile in Tabelle "Dispo" ermitteln
             ' ist notwendig, falls neue Werte unterhalb der vorhandenen hinzugefügt werden müssen
             lngLetzteZiel = IIf(IsEmpty(Cells(Rows.Count, 1)), _
                Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
             ' VERGLEICH() mit Vergleichstyp 0 der laufenden Zelle Tabelle "Silo" mit Spalte A Tabelle "Dispo"
             ' das löst einen Fehler aus wenn nicht gefunden
             If IsError(Application.Match(.Cells(lngZeile, 1), _
                Worksheets("Dispo").Columns(1), 0)) Then
                ' VERGLEICH() mit Vergleichstyp 1 löst Fehler aus, wenn kein Wert < als Suchwert vorhanden
                If IsError(Application.Match(.Cells(lngZeile, 1), _
                   Worksheets("Dispo").Columns(1), 1)) Then
                   ' Einfügezeile = 2
                   lngZiel = 2
                ' VERGLEICH() mit Vergleichstyp 1 liefert als Ergebniszeile = letzte Zeile in Tabelle "Dispo"
                ' das bedeutet, der Suchwert > als der größte Wert
                ElseIf Application.Match(.Cells(lngZeile, 1), _
                   Worksheets("Dispo").Columns(1), 1) = lngLetzteZiel Then
                   ' Einfügezeile = letzte Zeile + 1
                   lngZiel = lngLetzteZiel + 1
                ' VERGLEICH() gibt die Zeile des Wertes aus, der als nächst kleiner Wert zum Suchwert steht
                Else
                   ' Einfügezeile ist die nächste zur gefundenen Zeile
                   lngZiel = Application.Match(.Cells(lngZeile, 1), _
                      Worksheets("Dispo").Columns(1), 1) + 1
                End If
                ' in Zielzeile Leerzeile einfügen
                Worksheets("Dispo").Rows(lngZiel).Insert
                ' in Zielzeile den laufenden Inhalt eintragen
                Worksheets("Dispo").Cells(lngZiel, 1) = .Cells(lngZeile, 1)
             End If
          Next lngZeile
       End With
    End Sub
    
    Falls noch Fragen sind - einfach nochmal nachfragen.

    Bis später,
    Karin
     
  13. Maximilian123 Erfahrener User

    Vergleich von zwei Spalten und ergänzen mittels VBA

    Ich glaube ich hab es im groben verstanden. Eine Frage habe ich dann doch noch! Und zwar Vorher weiß VBA, dass bei der For Anweisung nicht mehr in Tabelle Silo sondern Dispo nach der letzten Zeile suchen soll ?

    Und Vielen Dank für die Hilfe Karin! Super Forum hier!
     
    Maximilian123, 5. September 2014
    #13
  14. Beverly
    Beverly Erfahrener User
    Wenn du die Code-Zeile für die letzte belegte Zeile lngLetzteQuelle in Tabelle "Silo" genau anschaust siehst du, dass vor Cells und Range immer ein Punkt steht - damit weiß Excel, dass es sich auf das Tabellenblatt beziehen soll, welches mit der With-Anweisung angesprochen wurde, also auf "Silo". In der Code-Zeile für die letzte belegte Zeile lngLetzteZiel fehlen diese Punkte und Excel weiß deshalb, dass es sich auf die aktive Tabelle beziehen soll, was durch die Benutzung des UserForms im Tabellenblatt "Dispo" ja gegeben ist.

    Bis später,
    Karin
     
  15. Maximilian123 Erfahrener User
    Klasse danke.
    Hast du noch eine Idee von ich zu den Lieferschein-Nr. noch Werte aus anderen Spalten kopieren will und in unterschiedliche Spalten wieder einfügen möchte. Wie stelle ich das bei dem Code am besten an ?

    Danke
     
    Maximilian123, 5. September 2014
    #15
Thema:

Vergleich von zwei Spalten und ergänzen mittels VBA

Die Seite wird geladen...
  1. Vergleich von zwei Spalten und ergänzen mittels VBA - Similar Threads - Vergleich Spalten mittels

  2. Excel VBA Spalten mit Ordnerinhalt vergleichen

    in Microsoft Excel Hilfe
    Excel VBA Spalten mit Ordnerinhalt vergleichen: Hallo, Bin ehr Excel VBA Neuling, Würde aber gerne in einer bestehender Tabelle die Auflistung der Ordner mit dem eigentlichen Stand in den besagten Ordner kontrollieren. Also in der Spalte Q10...
  3. Werte in Spalten vergleichen und farbig markieren

    in Microsoft Excel Hilfe
    Werte in Spalten vergleichen und farbig markieren: Moin zusammen, ich habe eine Pivottabelle erstellt. Hier habe ich jetzt verschiedene Parameter nach meine Wünsche angepasst und habe eine Übersicht über Kunden und Umsätze 2022 und 2023 In Spalte...
  4. vergleichen von 4spalten * 6 mit 4 spalten

    in Microsoft Excel Hilfe
    vergleichen von 4spalten * 6 mit 4 spalten: Schönen guten Tag, ich muss leider wieder einmal um eure Hilfe Bitten. ich habe 6* 4 spalten zu je 800 Zeilen Beginnt bei A1:D800 leere Spalte F1:I800 unsw, in diesen Spalten kommt es vor das...
  5. Zellen pro Zeile vergleichen in zwei Spalten

    in Microsoft Excel Hilfe
    Zellen pro Zeile vergleichen in zwei Spalten: Hallo, das ist bestimmt ein ziemliches Anfängerproblem aber ich fange auch grade erst an mir Excel selber beizubringen und finde nichts was mein Problem löst. Ich hätte gerne das meine Tabelle...
  6. Spalten vergleichen und Wert (ok/nok) ausgeben

    in Microsoft Excel Hilfe
    Spalten vergleichen und Wert (ok/nok) ausgeben: Hallo liebes Forum! Zu diesem Thema gibt es schon zahlreiche Threads, aber leider habe ich nichts passendes finden können, das zu meinem Anliegen passt. Ich habe mehrere Tabellen in einem Sheet...
  7. Zeilen verschiedene Tabellen miteinander vergleichen

    in Microsoft Excel Hilfe
    Zeilen verschiedene Tabellen miteinander vergleichen: Guten Tag, ich benötige bitte eure Hilfe. Ich habe eine Excel Datei mit zwei Arbeitsblätter. Arbeitsblatt 1 mit Spalte a=Lieferant und Spalte b=IBAN Nummer. Arbeitsblatt 2 beinhaltet die...
  8. Vergleich von zwei Spalten und fehlende ergänzen mittels VBA

    in Microsoft Excel Hilfe
    Vergleich von zwei Spalten und fehlende ergänzen mittels VBA: Hallo, In meiner Tabelle (siehe Anhang) möchte ich die Bezeichnungen aus dem Sheet "Data" Spalte B mit der Liste auf dem Sheet "Source" ab A:25 vergleichen und fehlende Einträge automatisch...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden