Microsoft Excel

Herbers Excel/VBA-Archiv

SVerweis vs Vlookup


Betrifft: SVerweis vs Vlookup von: Jan
Geschrieben am: 02.07.2017 15:33:49

Hallo zusammen,

ich habe 2 Tabellen mit jeweils ca. 20000 Zeilen. Ich möchte gerne Daten in der ersten Tabelle aus der zweiten ergänzen.
Ich habe es mittels VBA so gelöst:

table1 = Worksheets(1).Range("AF2:AF20069")
table2 = Worksheets(2).Range("A2:G29835")
Index_Target = 2
For Each cl In table1
Worksheets(1).Cells(Index_Target, 6) = Application.WorksheetFunction.VLookup(cl,table2, 7, False)
Index_Target = Index_Target + 1
Next cl


Das Ganze macht auch was es soll, nur sehr langsam. Es dauert etliche Minuten.
Wenn ich jetzt das Selbe mit einem SVerweis mache, dauert das nur wenige Sekunden.
Kann mir jemand sagen, warum das so ist, bzw. was ich falsch mache?
Vom Gefühl her würde ich ja sagen, müsste das beides ähnlich lange dauern.

Danke schonmal für eure Mühe

Jan

  

Betrifft: AW: SVerweis vs Vlookup von: Hajo_Zi
Geschrieben am: 02.07.2017 15:38:36

Hallo Jan,

ich glaube das sind 2 unterschiedliche Sachen.
Mit Code trägst Du den Wert ein und bei jedem Wert muss in die Tabelle geschaut werden.
Beim anderen trägst Du nur die Formel ein.
Machst Du das auch in VBA ohne For Next geht es auch schneller. Nur mal meine Vermutung.

GrußformelHomepage

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.


  

Betrifft: AW: SVerweis vs Vlookup von: Werner
Geschrieben am: 02.07.2017 20:30:56

Hallo Jan,

versuch es mal so. Dabei wird die SVERWEIS-Formel in einem Rutsch in den kompletten Bereich eingetragen und dann die Formel durch ihre Werte ersetzt.

Public Sub SVerweis()
Dim loLetzteBlatt1 As Long
Dim loLetzteBlatt2 As Long
Dim table1 As Range
Dim table2 As String

With Worksheets(1)
    '## letzte belegte Zeile Blatt 1, Spalte AF (32)
    loLetzteBlatt1 = .Cells(.Rows.Count, 32).End(xlUp).Row
    '## Bereich definieren von F2 bis F letzte belegte Zeile
    Set table1 = .Range(.Cells(2, 6), .Cells(loLetzteBlatt1, 6))
End With

With Worksheets(2)
    '## letzte belegte Zeile Blatt 2, Spalte A (1)
    loLetzteBlatt2 = .Cells(.Rows.Count, 1).End(xlUp).Row
    '## Bereich A2 bis G letzte belegte Zeile in Variable schreiben
    table2 = .Range(.Cells(2, 1), .Cells(loLetzteBlatt2, 7)).Address
End With

'## SVERWEIS-Formel in den Bereich table1 schreiben
table1.FormulaLocal = "=SVERWEIS(AF2;Tabelle2!" & table2 & ";7;FALSCH)"
'## Formel durch Werte ersetzen
table1.Value = table1.Value

End Sub
Gruß Werner


  

Betrifft: Feedback ist wohl ein Fremdwort. o.w.T. von: Werner
Geschrieben am: 08.07.2017 01:42:30




  

Betrifft: AW: Feedback ist wohl ein Fremdwort. o.w.T. von: Jan
Geschrieben am: 08.07.2017 09:56:30

Hallo,

Erstmal Danke für die Vorschläge.
Leider hatte ich noch keine Zeit sie auszuprobieren.
Ich hoffe das ich es in den nächsten Tagen testen kann und werde dann auf jeden Fall ein Feedback dazu geben.

Danke

Jan


Beiträge aus den Excel-Beispielen zum Thema "SVerweis vs Vlookup"