PDA

Vollständige Version anzeigen : Probleme mit Datenabgleich von zwei Tabellen (Daten nicht in gleicher Reihenfolge)


Luxikatz
21.08.2017, 09:09
Hallo,

ich möchte bei dem Fall "pending" und im Fall "yes" in der Spalte 6, dass der jeweilige Datensatz in der Tabelle"zieltab1" die jeweiligen Status "pending" und "yes" übernimmt. Problematisch ist nur, dass die Kundennummer in Spalte 3 in beiden Tabellen zwar vorhanden ist aber nicht in der gleichen Reihenfolge, deshalb funktioniert die Idee mit Tabelle1.Cells(I,3) = Tabelle2.Cells(I,3) nicht. Da zum Beispiel die Kundennummer 123 in der Tabelle 1 in der Zeile 2 steht und in der Tabelle 2 in Zeile 100. Ich bin leider hier etwas mit den VBA Kenntnissen überfordert.

Vielleicht kennt jemand hier eine lösung, wie man es im Code richtig abbilden kann.

Hinweis:
Quelltab (Ursprüngliche Tabelle, also alle alten Historiedaten, Daten aus dem Vormonat)
Zieltab (Daten aus dem aktuellen Monat)

For i = 3 To lastrow

If quelltab.Cells(i, 6) = "new" Then

For j = 1 To 7

zieltab1.Cells(ende + 1, j) = quelltab.Cells(i, j)

Next
ende = ende + 1

ElseIf zieltab1.Cells(i, 3) Like quelltab.Cells(i, 3) And quelltab.Cells(i, 6) = "pending" Then
zieltab1.Cells(i, 6) = pending
ElseIf quelltab.Cells(i, 3) = zieltab1.Cells(i, 3) And quelltab.Cells(i, 6) = "yes" Then
zieltab1.Cells(i, 6) = "yes"
End If




Next i

Beverly
21.08.2017, 09:38
Hi,

ich weiß nicht, ob ich dich richtig verstanden habe, aber vielleicht nach diesem Prinzip:

Dim lastrow As Long
Dim rngSuche As Range
Dim lngZeile As Long
For lngZeile = 3 To lastrow
Set rngSuche = zieltab1.Columns(3).Find(quelltab.Cells(lngZeile, 3), lookat:=xlWhole)
If Not rngSuche Is Nothing Then
If quelltab.Cells(lngZeile, 6) = "pending" Then
zieltab1.Cells(rngSuche.Row, 6) = "pending"
ElseIf quelltab.Cells(lngZeile, 6) = "yes" Then
zieltab1.Cells(rngSuche.Row, 6) = "yes"
End If
End If
Next lngZeile


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

aloys78
21.08.2017, 10:04
Hallo,

mein Vorschlag (ungetestet):
Dim LRowQ As Long ' letzte Zeile Quell-Tabelle
Dim LRowZ As Long ' aktuell letzte Zeile Ziel-Tabelle
Dim erg As Variant ' Ergebnis Match

With quelltab
For i = 3 To LRowQ
If .Cells(i, 6) = "new" Then
LRowZ = LRowZ + 1
.Range(.Cells(i, 1), .Cells(i, 7)).Copy zieltab1.Cells(LRowZ, 1)
ElseIf .Cells(i, 6) = "pending" Or .Cells(i, 6) = "yes" Then
erg = Application.Match(.Cells(i, 3), zieltab1.Range("C3:C" & LRowZ), 0)
If IsNumeric(erg) Then zieltab1.Cells(erg + 2, 6) = .Cells(i, 6)
End If
Next i
End With

Gruß
Aloys

Luxikatz
21.08.2017, 11:57
Herzlichen Dank euch Beiden.

Es hat soweit alles funktioniert.
Lieber Aloys, genau das war die Lösung! :)

Luxikatz
21.08.2017, 15:00
liebe(r) Aloys,

wie kann ich in dieser Code Zeile es so anpassen, dass es auch noch die 4. Spalte berücksichtigt?



erg = Application.Match(.Cells(i, 3), zieltab1.Range("C3:C" & LRowZ), 0)


Ich habe es mal so probiert, aber leider funktioniert es nicht.

erg = Application.Match(.Cells(i, 3), .Cells(I,4), zieltab1.Range("C3:E" & LRowZ), 0)





Hallo,

mein Vorschlag (ungetestet):
Dim LRowQ As Long ' letzte Zeile Quell-Tabelle
Dim LRowZ As Long ' aktuell letzte Zeile Ziel-Tabelle
Dim erg As Variant ' Ergebnis Match

With quelltab
For i = 3 To LRowQ
If .Cells(i, 6) = "new" Then
LRowZ = LRowZ + 1
.Range(.Cells(i, 1), .Cells(i, 7)).Copy zieltab1.Cells(LRowZ, 1)
ElseIf .Cells(i, 6) = "pending" Or .Cells(i, 6) = "yes" Then
erg = Application.Match(.Cells(i, 3), zieltab1.Range("C3:C" & LRowZ), 0)
If IsNumeric(erg) Then zieltab1.Cells(erg + 2, 6) = .Cells(i, 6)
End If
Next i
End With

Gruß
Aloys