VBA - VLOOKUP beschleunigen?
22.07.2024 17:56:55
Markus
durch fleißiges Lesen im Forum konnte ich Neuling doch schon ein paar Ansätze in VBA erfolgreich umsetzen. Nun weiß ich grad nicht weiter und würde eure Hilfe benötigen:
in einem VBA Projekt habe ich einen Code, welcher nacheinander mehrere Tabelleblätter erstellt und diese auch umbenennt. Hier wird als Vorlage ein weiteres Tabellenblatt verwendet welches kopiert und umbenannt wird. Das klappt, vor allem dank euch, gut.
Nach jeder Erstellung eines Tabellenblattes läuft mit dem aktiven Tabellenblatt folgender Code durch um eine Art "Zwischenspeicher" aus einem anderen Blatt (MA_ZS) wieder in das aktive Tabellenblatt zu schreiben. Ich habe das mit VLOOKUP versucht, jedoch macht dieser Code so den ganzen Ablauf ziemlich träge.
Welche Möglichkeiten habe ich diesen Teil zu beschleunigen?
Mit Vlookup sollen nur Werte kopiert werden, wenn diese in der "MA_ZS"_Tabelle auch existieren. Leere Zellen in "MA_ZS" sollen übersprungen werden.
Ob das so Sinn macht hinterfrage ich gerade und ob VLOOKUP die Lösung ist auch. Ich weiß auch nicht nach was ich hier im Forum suchen könnte. Bin über Tipps sehr dankbar.
Dim zp2 As Long
Dim lzp2 As Long
With ActiveSheet
lzp2 = ActiveSheet.Range("A50").End(xlUp).Row
On Error Resume Next
For zp2 = 7 To lzp2
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 2, False)) > 0 Then Cells(zp2, "U").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 2, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 3, False)) > 0 Then Cells(zp2, "V").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 3, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 4, False)) > 0 Then Cells(zp2, "W").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 4, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 5, False)) > 0 Then Cells(zp2, "X").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 5, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 6, False)) > 0 Then Cells(zp2, "Y").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 6, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 7, False)) > 0 Then Cells(zp2, "Z").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 7, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 8, False)) > 0 Then Cells(zp2, "DS").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 8, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 9, False)) > 0 Then Cells(zp2, "DT").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 9, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 10, False)) > 0 Then Cells(zp2, "DU").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 10, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 11, False)) > 0 Then Cells(zp2, "DV").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 11, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 12, False)) > 0 Then Cells(zp2, "DW").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 12, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 13, False)) > 0 Then Cells(zp2, "DX").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 13, False)
If Len(WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 14, False)) > 0 Then Cells(zp2, "DY").Value = WorksheetFunction.VLookup(Cells(zp2, "B").Value, Sheets("MA_ZS").Range("A1:S500"), 14, False)
Next zp2
End With
Am Anfang und am Ende des gesamten Codes sind die Werte
Application.screenupdating = False
bzw. "True" eingebaut.
Anzeige