Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

2 Tabellen abgleichen

Forumthread: 2 Tabellen abgleichen

2 Tabellen abgleichen
18.09.2025 12:47:35
StefanK
Hallo zusammen, ich habe folgendes Problem und würde mich über eure Hilfe / Denkansätze freuen:

Ich habe 2 exportierte Tabellen, (eine intelligente .xlsx) und eine .csv-Datei. Die Spalten sind teilweise gleich, aber nicht an der gleichen Position. Tabelle2 enthält ca. 600.000 Zeilen, Tabelle1 deutlich weniger. Ich muss nun vergleichen, ob die Zeilen aus Tabelle1 auch in Tabelle2 vorkommen und umgekehrt bzw. welche nicht vorkommen (Vergleichsparameter sind die Spalten Aktenzeichen und Summe). Mann könnte ja beide Tabellen in eine neue überführen, als Rückgabe in einer zusätzlichen Spalte wäre z.B. gut "Kommt nur in Tabelle1 vor", "Kommt nur in Tabelle2" vor, "Kommt in beiden Tabellen vor". Oder über bedingte Formatierung in beiden Tabellen. Ich habe das schon mit Zählenwenn und sogar mit PowerQuery versucht, aber das ist zu hoch für mich. VBA wäre auch noch eine Option, aber dann vermutlich zeilenweise und somit langsam, oder...?

Wie würdet Ihr das machen ? Habt Ihr einen Ansatz für mich... ?

Besten Dank und viele Grüße
Stefan
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Tabellen abgleichen
18.09.2025 13:44:35
SF
Hola,
ich würde das mit Zählenwenns() machen und alles was >0 ist kommt in der anderen Tabelle vor.
Gruß,
steve1da
AW: 2 Tabellen abgleichen
18.09.2025 14:22:30
UweD
Hallo


Arbeitsblatt mit dem Namen 'Tabelle1'
 AB
1Artnum 
2100in Tab2 vorhanden
3110in Tab2 vorhanden
4220in Tab2 vorhanden
5400 
6  

ZelleFormel
B2=WENN(ZÄHLENWENN(Tabelle2!A:A;A2)>0;"in Tab2 vorhanden";"")


Arbeitsblatt mit dem Namen 'Tabelle2'
 AB
1Artnum 
2110in Tab1 vorhanden
3500 
4100in Tab1 vorhanden
5220in Tab1 vorhanden
6  

ZelleFormel
B2=WENN(ZÄHLENWENN(Tabelle1!A:A;A2)>0;"in Tab1 vorhanden";"")


LG UweD
Anzeige
AW: 2 Tabellen abgleichen
18.09.2025 14:36:16
daniel
Hi
bei der Datenmenge dürfte das ZählenWenns an seine Grenze stoßen bzw für lange Rechenzeiten sorgen.

bei solchen Datenmengen solltest du so vorgehen:

1. wenn du mehrere Vergleichsparameter benötigst, fasse diese in einer Hilfsspalte zu einem Wert zusammen, so dass du nur einen Vergleichsparameter hast.
2. Sortiere die Listen nach dieser Spalte aufsteigend.
3. jetzt kannst du mit dem SVerweis oder mit mit dem XVerweis überprüfen, ob der jeweiligen Wert in der anderen Spalte vorhanden ist.
da die Listen sortiert sind, kannst du die entsprechende Variante des jeweiligen Verweises für sortierte Listen verwenden, welche um Welten schneller ist, als die Suche in unsortierten Listen.

Gruß Daniel
Anzeige
Bei dieser Anzahl...
18.09.2025 18:18:30
Case
Moin Stefan, :-)

... an Zeilen (> 600.000) würde ich zu Power Query tendieren. Genau für solche (und viele andere) Szenarien wurde das Tool erstellt. ;-)

Mit Formeln könnte das etwas zäh werden. ;-)

Schematischer Weg: ;-)

  • Lade die Tabelle und die CSV in PQ. ;-)

  • Schlüsselspalte erstellen (Aktenzeichen und Summe). ;-)

  • Mit einem "vollständig äußerer Join" zusammenführen. ;-)

  • Spalten erweitern. ;-)

  • Statusspalte erzeugen (nur in Tabelle1, nur in Tabelle2, in beiden Tabellen). ;-)

  • Ausgabe als Tabelle, oder Pivot-Bericht. ;-)


  • Dateinamen (der XLSX und der CSV) kann man auch variabel halten, um es mit anderen Dateien zu wiederholen. ;-)

    Servus
    Case
    Anzeige
    AW: 2 Tabellen abgleichen
    18.09.2025 15:07:49
    StefanK
    Hallo zusammen,

    vielen herzlichen Dank zunächst für Eure Beteiligungen 👍

    Genau, mein Problem ist ja, dass 2 Parameter übereinstimmen müssen. Z.B. prüfe, ob in Tabelle 1 das Aktenzeichen aus Spalte 1, sowie die Summe aus Spalte 9 mit dem Aktenzeichen in Spalte 14, sowie der Summe in Spalte 9 in Tabelle 2 übereinstimmen. Erst dann ist der Status "Übereinstimmend" erreicht. Und eben umgekehrt.

    Daniel, wie meinst Du das mit "in Hilfsspalte zusammenfassen" ? Summeprodukt ?

    Morgen habe ich dann glaube ich ein wenig Zeit, mich damit zu beschäftigen...

    Besten Dank, Gruß Stefan
    Anzeige
    AW: 2 Tabellen abgleichen
    18.09.2025 15:16:14
    daniel
    Hi
    nein, einfach zu einem Text verketten:
    Tabelle1: =A2&I1 und in Tabelle2: =N2&

    oder für die bessere Übersichtlichkeit mit Trennzeichen:
    Tabelle1: =A2&"|"&I2 und in Tabelle2: =N2&"|"&I2

    bei Zahlen kann es für die Sortierung manchmal sinnvoll sein, für eine einheitliche Stellenzahl zu sorgen, damit auch in der Textform entsprechend dem Zahlenwert sortiert wird
    Tabelle1: =A2&"|"&Text(I2;"00000,00") Tabelle2: =N2&Text(I2;"00000,00")

    für die Suche arbeitest du dann mit diesem zusammengesetzten Wert, damit du nur einen einzigen Vergleichswert hast, denn dann kannst du X- oder SVerweis verwenden und nur diese beiden Funktionen beherrschen die schnelle Suche in sortierten Listen.

    Gruß Daniel
    Anzeige
    AW: 2 Tabellen abgleichen
    18.09.2025 15:40:31
    UweD
    Hallo nochmal


    Zur Schnelligkeit kann ich nichts sagen:

    Arbeitsblatt mit dem Namen 'Tabelle1'
     ABCDEFGHI
    1Aktenzeichen       Summe
    2100       20
    3300       12
    4200       11
    5100       90
    6400       10
    7         
    8         
    9         

    Arbeitsblatt mit dem Namen 'Tabelle2'
     ABCDEFGHIJKLMNO
    1        Summe    Aktenzeichen 
    2        10    100 
    3        20    100 
    4        11    200 
    5        11    300 
    6        90    500 
    7               
    8               
    9               



    Arbeitsblatt mit dem Namen 'Tabelle3'
     ABCD
    1AktenzeichenSummeTabelle1Tabelle2
    21002011
    33001210
    42001111
    51009010
    64001010
    71001000
    83001100
    95009000
    10    
    11    

    ZelleFormel
    A1=EINDEUTIG(VSTAPELN(FILTER(SPALTENWAHL(Tabelle1!A:I;1;9);Tabelle1!A:A>"");FILTER(SPALTENWAHL(Tabelle2!I:N;6;1);Tabelle2!N:N>"")))
    C2=WENN(A2>"";ZÄHLENWENNS(Tabelle1!A:A;A2;Tabelle1!I:I;B2);"")
    D2=WENN(A2>"";ZÄHLENWENNS(Tabelle2!N:N;A2;Tabelle2!I:I;B2);"")


    Formel A1 erweitert sich selbst
    C2 und D2 nach unten kopieren

    LG UweD
    Anzeige
    AW: 2 Tabellen abgleichen
    18.09.2025 16:42:49
    StefanK
    Hi Uwe, vielen herzlichen Dank, jetzt habe ich so viele Ansätze... 😉

    Ich teste mich da morgen mal durch.

    VG Stefan
    AW: 2 Tabellen abgleichen
    18.09.2025 15:20:51
    StefanK
    Okidoki, danke Dir 👍 Ich gehe die Sache morgen an...

    Viele Grüße
    Stefan
    AW: 2 Tabellen abgleichen
    18.09.2025 15:29:23
    emkaes
    Hi,

    mit VBA ginge das so. Code ist von Paul Kelly ( youtube: excelmacromastery )

    ist natürlich nicht auf deine Daten angepasst, da du keine Beispieldatei hochgeladen hast.

    Du müsstest deine csv-Daten noch in eine excel-Datei importieren und die Such- und Vergleichsdaten anpassen. z.B. so, wie Daniel es vorgeschlagen hat

    Ebenfalls müsstest du dir noch Gedanken machen, welche Ergebnisdaten du wohin haben willst

    Option Explicit
    

    Public Enum eResultType
    list1only = 1
    both = 2
    list2only = 3
    End Enum

    Sub Listenvergleich()

    Dim resultType As eResultType
    resultType = eResultType.list2only

    Dim rgBase As Range, rgCompare As Range, rgResult As Range
    Set rgBase = shData.Range("A2:A9")
    Set rgCompare = shData.Range("B2:B9")
    Set rgResult = shData.Range("D1")

    Dim dictBase As New Dictionary
    Set dictBase = readlist(rgBase.Value)

    Dim dictResult As Dictionary
    Set dictResult = compareList(dictBase, rgCompare.Value, resultType)

    writeResult rgResult, dictResult, resultType

    End Sub

    Public Sub writeResult(rg As Range, dict As Dictionary, resultType As eResultType)

    rg.CurrentRegion.ClearContents
    rg.Value = "Result"
    rg.Offset(, 1).Value = resultType
    rg.Offset(1).Resize(dict.Count) = WorksheetFunction.Transpose(dict.Keys)

    End Sub

    Public Function compareList(dict As Dictionary, arr As Variant, rtype As eResultType) As Dictionary

    Dim dictResult As New Dictionary, dict2Only As New Dictionary

    Dim i As Long, item As Variant

    For i = LBound(arr, 1) To UBound(arr, 1)
    item = arr(i, 1)
    If dict.Exists(item) = True Then
    dictResult(item) = 0
    dict.Remove item
    Else
    dict2Only(item) = 0
    End If
    Next i

    Select Case rtype
    Case both
    Set compareList = dictResult
    Case list1only
    Set compareList = dict
    Case list2only
    Set compareList = dict2Only
    End Select
    End Function
    Public Function readlist(arr As Variant) As Dictionary
    Dim dict As New Dictionary
    Dim i As Long
    For i = LBound(arr, 1) To UBound(arr, 1)
    dict(arr(i, 1)) = 0
    Next i
    Set readlist = dict
    End Function
    Anzeige
    oder so...
    18.09.2025 14:30:56
    UweD
    Arbeitsblatt mit dem Namen 'Tabelle3'
     ABC
    1ArtnumTab1Tab2
    2100XX
    3110XX
    4220XX
    5400X 
    6500 X
    7   
    8   
    9   
    10   
    11   
    12   

    ZelleFormel
    A1=EINDEUTIG(VSTAPELN(FILTER(Tabelle1!A:A;Tabelle1!A:A>"");FILTER(Tabelle2!A:A;Tabelle2!A:A>"")))
    B2=WENN(ZÄHLENWENN(Tabelle1!A:A;A2)>0;"X";"")
    C2=WENN(ZÄHLENWENN(Tabelle2!A:A;A2)>0;"X";"")



    LG UweD
    Anzeige

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige