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

SVerweis für Berechnungszeit optimieren

SVerweis für Berechnungszeit optimieren
22.11.2019 11:39:51
Michael
Hallo zusammen,
ich habe folgenden VBA code für den SVerweis geschrieben:
Option Explicit

Sub SVerweis()
Application.ScreenUpdating = False 'Bildschirmbewegungen des VBA-Codes werden ausgeblendet
Dim ws1Row As Long, ws2Row As Long, ws1Col As Long, ws2Col As Long
Dim maxrow As Long, maxcol As Long
Dim colval1 As String, colval2 As String
Dim Row As Long, Col As Long
Dim diffcnt As Long, report As Workbook, hdr As String
Dim MapColumn() As Long, b As Boolean
Dim reportWS As Worksheet
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim VergleichsTool2 As Workbook
Dim ColNew As Long
Dim ColTitel As String
Dim Zähler1 As Long
Dim VlookUp As String
Dim Counter As Long
Dim Counter2 As Long
Dim ColumnLetter As String
Dim ColumnLetter1 As String
Dim Col1 As Long
'Definition der Variablen ist abgeschlossen
Set VergleichsTool2 = ActiveWorkbook
Set ws1 = VergleichsTool2.Worksheets("Datei1")
Set ws2 = VergleichsTool2.Worksheets("Datei2")
'Die Berechnung der verwendeten Zeile und Spalten der Worksheets ist abgeschlossen
'Die Berechnung der maximalen Zeile und Spalte ist abgeschlossen
maxrow = WorksheetFunction.Max(ws1Row, ws2Row)
maxcol = WorksheetFunction.Max(ws1Col, ws2Col)
ws1Row = 1
ws2Row = 1
ws1Col = 1
ws2Col = 1
'VlookUp Datei1
Do While Not IsEmpty(ws1.Cells(1, ws1Col)) ' Loop zur Bestimmung der maximalen Spaltennutzung
ws1Col = ws1Col + 1
Loop
Do While Not IsEmpty(ws1.Cells(ws1Row, 1))
For Counter = 1 To ws1Col
Col1 = ws1Col + Counter
ColumnLetter = Col_Letter(Counter)
ColumnLetter1 = Col_Letter(1)
VlookUp = "=Vlookup(" & ColumnLetter1 & ws1Row & ", Datei2!A:CV, " & Counter & ", 0)"
ws1.Cells(ws1Row, Col1).Formula = VlookUp
Next
ws1Row = ws1Row + 1
Loop
'VlookUp Datei2
Do While Not IsEmpty(ws2.Cells(1, ws2Col)) ' Loop zur Bestimmung der maximalen Spaltennutzung
ws2Col = ws2Col + 1
Loop
Do While Not IsEmpty(ws2.Cells(ws2Row, 1))
For Counter2 = 1 To ws2Col
Col1 = ws2Col + Counter2
ColumnLetter = Col_Letter(Counter)
ColumnLetter1 = Col_Letter(1)
VlookUp = "=Vlookup(" & ColumnLetter1 & ws2Row & ", Datei1!A:CV, " & Counter2 & ", 0)"
ws2.Cells(ws2Row, Col1).Formula = VlookUp
Next
ws2Row = ws2Row + 1
Loop
Application.ScreenUpdating = True 'Die Ausblendung der Bildschirmbewegungen des VBA-Codes wird   _
_
_
wieder aktiviert
End Sub
Jetzt habe ich aber leides das Problem, dass der Durchlauf des VBA-Codes bei 80.000 Zeilen und 15 Spalten über 1,5 Stunden dauert und würde gerne wissen, ob ihr Ideen/Ansätze habt, um die Performance zu optimieren.
LG
Darius

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SVerweis für Berechnungszeit optimieren
22.11.2019 12:08:55
peterk
Hallo
Was willst Du machen? Du schreibst (MaxRow x MaxSpalten=1,2Mio) Sverweise in Deine Tabelle !
AW: SVerweis für Berechnungszeit optimieren
22.11.2019 13:22:11
Michael
Hallo Peter,
ich dachte, dass ich wegen der Schleifeneingabe mit "Do While Not IsEmpty(ws2.Cells(ws2Row, 1))" den SVerweis nur bis zur ersten Zelle ohne Wert fortführe oder liege ich hierbei verkehrt?
LG
Darius
AW: SVerweis für Berechnungszeit optimieren
22.11.2019 13:32:38
peterk
Hallo
Du liegst richtig, ich kenne aber Deine Datei nicht (Du schriebst von 80.0000 Zeilen und 15 Spalten)

Do While Not IsEmpty(ws1.Cells(ws1Row, 1))
For Counter = 1 To ws1Col
Dieser Code-Teil schreibt in WS1 ZeilenxRows Sverweise
Ein ähnlicher Code-Teil macht das Selbe für WS2. Du kannst Dir also leicht ausrechnen wieviele SVerweise am Schluß geschrieben werden.
Anmerkung am Rande: Schalte die Neuberechnung aus, sonst wird mit jedem Eintrag das Blatt neu berechnet!
Am Anfang Deines Codes:
Application.Calculation = xlCalculationManual
und am Ende wieder einschalten:
Application.Calculation = xlCalculationAutomatic
Anzeige
AW: SVerweis für Berechnungszeit optimieren
22.11.2019 13:41:46
Michael
Hallo Peter,
ja, genau, weil das so ca. die Größe ist. Bei kleineren Dateien hatte es keine Probleme gemacht, aber bei dem Belastungstest schon (was nicht gut ist - brauche das auch dafür).
Vielen Dank für den Kniff - kannte den noch gar nicht. Ich probiere den gleich mal aus & meld' mich dann.
LG
Darius

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige