Microsoft Excel

Herbers Excel/VBA-Archiv

Differenzzeilen in großen Tabellen

Betrifft: Differenzzeilen in großen Tabellen von: stormlamp
Geschrieben am: 03.11.2014 14:13:30

Hallo Zusammen,

ich möchte 2 Tabellen vergleichen, die jeweils über 120.000 Zeilen haben.
Tabelle 2 ist immer größe als Tabelle 1 und alle Zeilen von Tabelle 1 sind auch in Tabelle 2 enthalten.

In Spalte 3 beider Tabellen steht jeweils der Index, an dem festgestellt werden kann, ob diese Zeile von Tabelle 2 schon in Tabelle 1 enthalten ist. Wenn dieser Wert nicht in Spalte 3 von Tabelle 1 gefunden wird, soll die gesamte Zeile aus Tabelle 2 in Tabelle 3 kopiert werden, beginnend mit Zeile 2 und dann immer unten anfügen.

Ich habe versucht, dies über eine Makroaufzeichnung hin zu bekommen, aber wenn ich dann versuche, alle Zeilen, die ein "#NV" haben zu filten und zu kopieren, macht mein Excel nicht mehr mit.

Könnte mir jemand mit so einer programmierten Schleife helfen.

Gruß
Hans

  

Betrifft: Dann filter mal nach #N/A von: {Boris}
Geschrieben am: 03.11.2014 14:19:30

Hi Hans,

...denn VBA spricht englisch - und #N/A ist das Pendent zu #NV.
Guckst Du auch hier: http://www.online-excel.de/excel/singsel_vba.php?f=121

VG, Boris


  

Betrifft: AW: Dann filter mal nach #N/A von: stormlamp
Geschrieben am: 03.11.2014 14:52:16

Hi Boris,

danke für die Info, das Sprachen-Babylon habe ich übersehen :-)

Gruß
Hans


  

Betrifft: AW: Differenzzeilen in großen Tabellen von: Daniel
Geschrieben am: 03.11.2014 14:34:21

Hi

Bei der Datenmenge macht man das besser ohne Schleife.
Ausserdem gehe ich davon aus, dass ich die Tabellen beliebig umsortieren darf.
Durch die passende Sortierung lässt sich die Aufgabe schneller und einfacher lösen:

Sub test()

With Sheets("Tabelle1").UsedRange
    .Sort key1:=.Cells(1, 3), order1:=xlAscending, Header:=xlYes
End With

With Sheets("Tabelle2").UsedRange
    With .Columns(.Columns.Count).Resize(.Rows.Count - 1, 1).Offset(1, 1)
        .FormulaR1C1 = "=IFERROR(If(VLookUp(RC3,Tabelle1!C3,1,true)=RC3,false,1),1)"
        .Formula = .Value
        If WorksheetFunction.Sum(.Cells) > 0 Then
            .EntireRow.Sort key1:=.Cells(.Column, 1), order1:=xlAscending, Header:=xlYes
            .SpecialCells(xlCellTypeConstants, 1).EntireRow.Copy
            Sheets("Tabelle3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial  _
xlPasteAll
            Sheets("Tabelle3").Columns(.Column).ClearContents
        End If
        .ClearContents
    End With
End With
End Sub
Gruß Daniel


  

Betrifft: AW: Differenzzeilen in großen Tabellen von: stormlamp
Geschrieben am: 03.11.2014 14:46:28

Hallo Daniel,

vielen Dank, funktioniert prima und sehr schnell.

Freundliche Grüße
Hans


 

Beiträge aus den Excel-Beispielen zum Thema "Differenzzeilen in großen Tabellen"