Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
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

VBA: Vegleich zweier Spalten mittels Sverweis

VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 17:31:46
Max
Hallo,
ich habe folgendes relativ simpel klingendes Problem.
Ich habe zwei Tabellenblätter mit jeweils einer Schlüsselspalte, einer Datenspalte und einer Indikatorspalte mit 0 oder 1.
Nun brauche ich ein Makro, dass beide Tabellenblätter nach identischen Schlüsseln absucht, und sofern der Indikator bei beiden Schlüsseln 1 ist, die Datenspalte der beiden Tabellen zum Auswerten in ein weiteres drittes Tabellenblatt kopiert.
Mein Makro:
Sub Auswerten()
Dim i, k As Long
Dim StrSchlüssel As String
Dim test1, test2 As Integer
k = 0
For i = 8 To 9595
StrSchlüssel = Sheets("Tabelle1").Cells(i, 15)
test1 = Application.VLookup(StrSchlüssel, ActiveWorkbook.Sheets("Tabelle1").Range("O8:P10000"),  _
2)
If IsError(test1) Then GoTo Weiter
test2 = Application.VLookup(StrSchlüssel, ActiveWorkbook.Sheets("Tabelle2").Range("M7:N10000"),  _
2)
If IsError(test2) Then GoTo Weiter
If test1 = 1 And test2 = 1 Then
Sheets("Tabelle3").Cells(k + 2, 1) = StrSchlüssel
Sheets("Tabelle3").Cells(k + 2, 2) = Application.VLookup(StrSchlüssel, Sheets("Tabelle1").Range( _
"O8:Q10000"), 3)
Sheets("Tabelle3").Cells(k + 2, 3) = Application.VLookup(StrSchlüssel, Sheets("Tabelle2").Range( _
"M7:O10000"), 3)
k = k + 1
End If
Weiter:
Next i
End Sub
Immerhin läuft das Makro endlich ohne Fehler durch, allerdings ist das Resultat keinesfalls hilfreich. Die rauskopierten Werte und Schlüssel sind mehrfach (bis zu 70 Mal) vorhanden, obwohl das in den Rohdaten nicht der Fall ist.
Kann mir jemand sagen, wo der Fehler liegt?
Vielen Dank für eure Hilfe!
Max

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 17:49:29
Daniel
Hi
du verwendest den SVerweis (Application.VLookUp) ohne den 4. Parameter anzugeben!
wenn der 4. Parameter beim SVerweis fehlt, nimm Excel hier den Wert WAHR an und das hat folgende konsequenzen:
1) die SuchMatrix (2. Parameter) muss nach der ersten Spalte aufsteigend sortiert sein, sonst ist das Ergebnis Unsinn.
2) ist der Suchbegriff nicht vorhanden, so wird kein Fehler als Ergebnis ausgegeben, sondern es wird der nächstkleinere Wert als Ergebnis verwendet (eine sortierte Liste wird voraussgesetzt)
du müsstest also in deinen SVerweisen noch den 4. Parameter mit FALSE ergänzen.
Gruß Daniel

Anzeige
AW: VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 17:59:17
Max
Vielen Dank für die Antwort!
Wenn ich ein "False" hinter jeden SVerweis schreibe, kommt beim 8. Durchlauf der Fehler "Typen Unverträglich" und der Debugger markiert die Zeile, in der test2 ein Wert zugewiesen wird, obwohl test2= 0 (und test1 = 1) ist.

AW: VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 18:02:03
Max
Sorry!
Ich fange ja bereits bei der 8. Zeile an, also kommt gleich beim ersten Durchlauf der Fehler!

AW: VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 18:26:26
Daniel
Hi
wenn der Suchbegriff nicht gefunden werden kann, erzeugt Application.VLookUp einen Fehlerwert.
Fehlerwerte könnnen nur von Variant-Variablen aufgenommen werden, dh. du musst die Variablen, in die das VLookUp-Ergebnis geschrieben wird, auch als Variant deklarieren:
Dim Test1 as Variant, Test2 as Variant

(auch wenn man mehrere Variablen in einer Zeile deklariert, muss hinter jeder Variablen der Datentyp angegeben werden, einer für alle gilt hier nicht, Variablen ohne eigene Typangabe werden Variant)
die Prüfung, ob der Wert vorhanden ist oder nicht erfolgt dann mit:
IF VarType(Test1) = vbError Then
hier der Code falls nicht gefunden
Else
hier der Code falls vorhanden.
End If

ich würde das ganze auch etwas umstrukurieren und versuchen ohne das goto auszukommen:
Sub Auswerten()
Dim i as long, k As Long
Dim StrSchlüssel As String
Dim Test1 As Variant, Test2 as Variant
k = 0
For i = 8 To 9595
StrSchlüssel = Sheets("Tabelle1").Cells(i, 15)
test1 = Application.VLookup(...)
if VarType(Test1)  vbError then
if Test1 = 1 Then
test 2 = VLookUp(...)
if Vartype(Test2)  vbError Then
if Test2 = 1 Then
Sheets("Tabelle3").Cells(k + 2, 1) = StrSchlüssel
Sheets("Tabelle3").Cells(k + 2, 2) = Application.VLookup(...)
Sheets("Tabelle3").Cells(k + 2, 3) = Application.VLookup(...)
k = k + 1
end if
end if
end If
End If
Next i
End Sub
ist denn die Schlüsselliste in Tabelle1 eindeutig oder muss dass auch noch geprüft werden?
Gruß Daniel

Anzeige
AW: VBA: Vegleich zweier Spalten mittels Sverweis
26.01.2015 18:54:29
Max
Perfekt!
Da so läuft der Hase =)
Vielen Dank für die Hilfe!

334 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige