PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2 tabelleninhalte vergleichen


DerGloeckner
29.07.2002, 16:04
hi leute,

ich hab eine aufgabe gestellt bekommen und weiss net wie ich die lösen kann :(

ich muss 2 tabellen miteinander vergleichen und deren unterschiede ausgeben, also ob es einen korrespondierenden datensatz gibt und wenn ja , ob es unterschiede gibt und falls nein in welcher der beiden tabellen der datensatz vorkommt.

es handelt sich um eine exceltabelle und eine tabelle einer ms sql datenbank.

ich wollt erstmal klein anfangen und das feld inventarnummer der beiden tabellen miteinander vergleichen und in der exceltabelle das feld bemerkungen anhängen,in welchem steht, ob es einen korrespondierenden datensatz in der anderen tabelle gibt.

ich habs geschafft beide tabellen zu öffnen und schreibe das inventarnummerfeld dcer sql tabelle ebenfalls in eine neue exceltabelle.

nun vergleiche ich ein feld der einen exceltabelle mit allen feldern der anderen exceltabelle und lass dann in der ersten tabelle anzeigen ob ein passender datensatz(feld) gefunden wurde oder nicht.

leider dauert das MEGA lange. es handelt sich um 7000 datensätze, die verglichen werden müsssen.

vieleicht gibt s ja andere ansätze. um dieses problem zu lösen?

ich freu mich über alle tipps oder ideen von euch :)


gruss
gloeckner


tweakyou
31.07.2002, 12:12
hi,

probiers mal mit Datenfeldern!

Bsp.

Option Explicit

Public Sub compareTables(wksSrc1 As Worksheet, _
wksSrc2 As Worksheet, _
wksProt As Worksheet)

Dim y As Long
Dim x As Long
Dim lLR As Long
Dim lLC As Long
Dim rngSrc1 As Range
Dim rngSrc2 As Range
Dim vSrc1 As Variant
Dim vSrc2 As Variant

With wksSrc1
lLR = .Cells(.Rows.Count, 1).End(xlUp).Row
lLC = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set rngSrc1 = .Range(.Cells(1, 1), .Cells(lLR, lLC))
End With

With wksSrc2
lLR = .Cells(.Rows.Count, 1).End(xlUp).Row
lLC = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set rngSrc2 = .Range(.Cells(1, 1), .Cells(lLR, lLC))
End With

vSrc1 = rngSrc1
vSrc2 = rngSrc2

For y = 1 To UBound(vSrc1)
For x = 1 To UBound(vSrc1, 2)
If vSrc1(y, x) <> vSrc2(y, x) Then
With wksProt
lLR = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
rngSrc1.Rows(y).Copy wksProt.Cells(lLR + 1, 1)
rngSrc2.Rows(y).Copy wksProt.Cells(lLR + 2, 1)
End If
Next x
Next y

End Sub

Public Sub test()
Call compareTables(Tabelle1, Tabelle2, Tabelle3)
End Sub

Ich habs mal so testweise mit 10000 Datensätzen a 5 Spalten
laufen lassen, ds ging super schnell ( ca. 1 Sekunde )