2.3k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

es gibt im Forum zwar einige Beiträge zu Thema "Dateien vergleichen" aber ich hab nichts gefunden, was mein Problem löst.
In Datei A habe ich Datensätze aus denen ich eine Variable dfiniere:

buchung = Cells(j, 3) & Cells(j, 5) & Cells(j, 7) & Cells(j, 9)

Jetzt möchte ich Datei B zeilenweise durchsuchen, ob dieser string aus A wieder als Kombination einzelner Datenfelder aus B existiert. Allerdings hat B eine andere Struktur, so dass sich der string aus den B-Spalten 5-8 zusammensetzt.
Hat jemand eine Idee???
Danke und Gruß Andreas

8 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

natürlich könntest du zum Vergleich immer eine entsprechende Variable aus den Datenfeldern der Tabelle B bilden.

Ich würde aber die entsprechenden Datenfelder aus den beiden Tabellen mit Hilfe einer UND-Abfrage vergleichen.

Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.

dake erst mal für den TiPP. Nur müsste ich jeden Datensatz aus A mit jedem Datensatz aus B vergleichen. Wie soll das mit einer UND-Abfrage funktionieren. Hast du dafür einen Code? Gruß Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

nur so eine Idee

zwei zellen werden gefordert

der Suchbegriff ist jeder einzelne Buchstabe

bei fund von allen Zeichen = true
als rueckgabewert

vielleicht zur ergaenzung anderer Ideen ^^

gruss nighty

Function ExistZeichen(Bereich1 As Range, Bereich2 As Range) As Boolean
Dim Zeichen As Integer
Dim Zaehler As Integer
For Zeichen = 1 To Len(Bereich2)
If Mid(Bereich2, Zeichen, 1) Like "[" & Bereich1 & "]" = True Then
Zaehler = Zaehler + 1
End If
Next Zeichen
If Len(Bereich1) = Zaehler Then ExistZeichen = True
End Function
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

ich glaube, ich habe deine Frage falsch interpretiert.
Ist die Reihenfolge des Vorkommens der einzelnen Inhalte in der Tabelle egal? (Ich war davon ausgegangen, dass die Reihenfolge gleich soll.)

Dann könnte man die Spalten 5-8 zeilenweise mit Application.WorksheetFunction.CountIf danach durchsuchen, ob die Inhalte aus den den Cells(j,3) etc. vorhanden sind.

Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.,

die Datenreihenfolge in den Zellen der Datei B ist in den Spalten 5-8 eine andere als in Tabelle A, so dass man hier wie auch in A die entsprechenden Zellen für einen Vergleich verknüpfen müsste. Das macht die Angelegenheit so schwierig...! Danke und Gruß
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.
noch eine Frage zu deinem Tipp oben.

Die Suchabfragebezieht sich ja auf die Verknüpfung
buchung = Cells(j, 3) & Cells(j, 5) & Cells(j, 7) & Cells(j, 9)

Falls durch Umstellung der Tabelle B die Spalten 5-8 die gleiche Reihenfolge haben, kann ich dann den countIf-Befehl in der Form

If Application.CountIf(Range("E2:H2000"), buchung) <> 1 Then

verwenden? Ich denke das funktioniert nicht...
Gruß
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Andreas,

hier mal ein Ansatz:

Sub vergleichen()

Dim la As Long
Dim lb As Long
Dim j As Long
Dim k As Long
Dim gleich As Boolean
Dim wbA As Workbook
Dim wbB As Workbook

Set wbA = ThisWorkbook
Set wbB = Workbooks("Mappe B.xlsx")

la = wbA.Worksheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row 'letzte Zeile in Datei A, Spalte C
lb = wbB.Worksheets("Tabelle1").Cells(Rows.Count, 5).End(xlUp).Row 'letzte Zeile in Datei B, Spalte E

For j = 2 To la
For k = 2 To lb
gleich = True

With wbB.Worksheets("Tabelle1")
If Application.WorksheetFunction.CountIf(.Range(.Cells(k, 5), .Cells(k, 8)), wbA.Worksheets("Tabelle1").Cells(j, 3)) <> 1 Then gleich = False
If Application.WorksheetFunction.CountIf(.Range(.Cells(k, 5), .Cells(k, 8)), wbA.Worksheets("Tabelle1").Cells(j, 5)) <> 1 Then gleich = False
If Application.WorksheetFunction.CountIf(.Range(.Cells(k, 5), .Cells(k, 8)), wbA.Worksheets("Tabelle1").Cells(j, 7)) <> 1 Then gleich = False
If Application.WorksheetFunction.CountIf(.Range(.Cells(k, 5), .Cells(k, 8)), wbA.Worksheets("Tabelle1").Cells(j, 9)) <> 1 Then gleich = False
End With

If gleich = True Then MsgBox "Match gefunden in Zeile " & k

Next k

Next j


End Sub



Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo M.O.
der "Ansatz" ist wirklich gut. Der Test hat funktioniert, jetzt passe ich ihn mal meinem konkreten Problem an - und das müsste auch funktionieren. Vilen Dank!
Gruß Andreas
...