Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1336to1340
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abgleich 2er Spalten in 2 Tabs

Abgleich 2er Spalten in 2 Tabs
11.11.2013 14:26:29
Thomas
Moin,
und mal wieder eine Abgleichs-Frage.
Ich habe ein Arbeitsblatt TEST und Arbeitsblatt DATEN.
In TEST gibt es die Spalte A, dort steht eine 'Bezeichnung'. (Mars, VW, Klopapier, Keks...)
Nun würde ich die Spalte A (TEST) mit der Spalte E (DATEN) abgleichen.
- Und zwar brauche ich für den Abgleich entweder die Info ob irgendeine Zelle in DATEN:E mit TEST:A komplett übereinstimmt, und dann die Zeilennummer (dann ist der Abgleich erledigt)
- Wenn keine komplette Übereinstimmung existiert, dann ob eine Zelle von DATEN:E komplett in TEST:A vorkommt.
Ich habe also eine Schleife programmiert, die

Dim v0 As String,
Dim h As Integer, ya As Integer, yb As Long
Sheets("TEST").Activate
ya = 1
Do while cells(ya, 1)""
v0 = LCase(Cells(ya, 1))
yb = 1
Do while Sheets("DATEN").Cells(yb, 5)""
If v0 = LCase(Sheets("DATEN").Cells(yb, 5)) Then
Cells(ya, 2) = "Treffer mit Zeile " & yb & " in DATEN"
Exit Do
End If
yb = yb + 1
Loop
ya = ya + 1
Loop
Das klappt schon recht gut, allerdings dauert es sehr lange, da es um viele Zeilen in Blatt B geht. Kann man die innere Schleife (massiv) beschleunigen?
Und danach käme ja noch der Abgleich (mit instr() hatte ich mir gedacht) - aber wenn der erste Teil schon sehr lange dauert, taugt das irgendwie nicht.
Tommi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abgleich 2er Spalten in 2 Tabs
11.11.2013 14:50:54
Rudi
Hallo,
warum nicht einfach per Fkt. Vergleich()?
Tab1!B2: =vergleich(a2;tab2!E:E;0)
Gruß
Rudi

AW: Abgleich 2er Spalten in 2 Tabs
11.11.2013 15:08:58
Thomas
Hm,
das verstehe ich nicht so ganz, ist das nicht eine Funktion, die in Excel direkt (nicht in VBA) eingesetzt wird?
Ich brauche es ja schon in VBA, weil ich mit den gefundenen Treffern/Zeilen dann einiges anfangen muss (also mit den restlichen Spalten der Zeile, wo der Vergleich 'trifft')
Tommi

AW: Abgleich 2er Spalten in 2 Tabs
11.11.2013 15:26:46
Rudi
Hallo,
ist das nicht eine Funktion, die in Excel direkt (nicht in VBA) eingesetzt wird?
Richtig. Kannst du aber auch als Worksheetfunction.Match() oder Application.Match() in VBA anwenden.
weil ich mit den gefundenen Treffern/Zeilen dann einiges anfangen muss
Je nachdem, was du willst, kannst du das auch mit Formeln machen.
Gruß
Rudi

Anzeige
AW: Abgleich 2er Spalten in 2 Tabs
11.11.2013 15:36:41
Thomas
Hallo Rudi,
hm, irgendwie läuft das glaube ich grade verkehrtherum ;) - ich will schauen ob irgendein Wert von Blatt DATEN (da aus der Spalte E) mit dem Wert in TEST:A1 übereinstimmt.
Ist der Abgleich mit deiner Formel nicht eher umgekehrt? - und zusätzlich noch etwas, ich bekomme öfter mal den Eintrag #WERT - ist da der Text in TEST:A1 zu lang? (das tritt zumindest immer bei langen Texten ein)
Und wenn der Abgleich NICHT zutrifft (also NICHT 1:1) dann muss ich schauen, ob es etwas in DATEN:E gibt, was (komplett) ein TEIL von TEST:A1 ist.
Und in beiden Fällen brauche ich die Zeile, die in DATEN 'getroffen' wurde - wenn es einen Treffer gab.
Tommi

Anzeige
AW: Abgleich 2er Spalten in 2 Tabs
12.11.2013 09:05:07
Thomas
Puh, nach 14 Stunden Laufzeit sind nun rund 40% bearbeitet - da muss ich wohl wirklich noch etwas optimieren :(
Tommi

AW: Abgleich 2er Spalten in 2 Tabs
12.11.2013 10:21:20
Rudi
Hallo,
das ist ein bisschen lang.
knapp 10 Sek für 20 Mio. Durchläufe:
Sub aaaa()
Dim v0 As String
Dim lngTest As Integer, lngDaten As Long
Dim arrTest, arrDaten
With Sheets("TEST")
arrTest = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
ReDim Preserve arrTest(1 To UBound(arrTest), 1 To 2)
With Sheets("Daten")
arrDaten = .Range(.Cells(1, 5), .Cells(.Rows.Count, 5).End(xlUp))
End With
For lngTest = 1 To UBound(arrTest)
v0 = LCase(arrTest(lngTest, 1))
lngDaten = 1
For lngDaten = 1 To UBound(arrDaten)
If v0 = LCase(arrDaten(lngDaten, 1)) Then
arrTest(lngTest, 2) = "Treffer mit Zeile " & lngDaten & " in DATEN"
Exit For
End If
Next
Next
Sheets("Test").Cells(1, 1).Resize(UBound(arrTest), 2) = arrTest
End Sub

Gruß
Rudi

Anzeige
AW: Abgleich 2er Spalten in 2 Tabs
12.11.2013 10:28:09
Thomas
Hallo Rudi,
danke - das schaue ich mir nachher mal an - aber es sind auch rund 3Mrd vergleiche, damit wäre es auch schon 100x soviel wie bei dir ;) - aber auch die daraus resultierende Viertelstunde (wenn ich das hochrechne) wäre noch sehr brauchbar...
Ich schaue mal ob ich da durchsteige und melde mich dann wieder.
Nur auf den ersten Blick - du überträgst Daten in ein Array, weil das deutlich schneller zu nutzen ist, als wenn man die Daten im Sheet nutzt?
Tommi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige