ich eine grundlegende UDF haben, die mehrere Übereinstimmungen für eine vlookup verkettet im Grundebeschleunigen Excel UDF
Function MYVLOOKUP(lookupval, lookuprange As Range, indexcol1 As Long, indexcol2 As Long, indexcol3 As Long)
'disable slow apps
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
'main code
Dim r As Range
Dim result As String
'set string to null instead of nothing
result = vbNullString
For Each r In lookuprange
If r = lookupval Then
result = result & " " & r.Offset(0, indexcol1 - 1) & " " & r.Offset(0, indexcol2 - 1) & " " & r.Offset(0, indexcol3 - 1) & "|"
End If
Next r
'output results
MYVLOOKUP = result
'enable apps
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
'end function
End Function
Gibt es eine Möglichkeit, dies zu beschleunigen, mein Chef will keine neuen Daten oder Spalten hinzufügen zu die Tabelle so muss es diese Funktion sein. Aber das dauert über 320000 Zellen dauert eine lange Zeit.
Alle Hilfe ist willkommen.
UPDATE: hinzugefügt einige Code zu beschleunigen, aber immer noch langsam
Die Daten werden auf diese Weise
Sheet 1
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Sheet 2
1 |1a |b |c
1 |1ab |bb |cc
1 |1abc |bbb |cccc
1 |abcd |bbbb |cccc
2 |a |b |c
2 |ab |bb |cc
2 |abc |bbb |cccc
2 |abcd |bbbb |cccc
3 |a |b |c
3 |ab |bb |cc
4 |a |b |c
5 |a |b |c
6 |a |b |c
7 |wer |werr |rewsfd
i need it to look like this
1 |1a b c| 1ab bb cc| 1abc bbb cccc| abcd bbbb cccc|
es 20 Spalten zu handhaben muss in der Lage sein
Statt eine 'function' zu haben, die eine Zelle nimmt und einen Wert zurückgibt, versuchen Sie es so anzupassen, dass es ein' sub', die 32000-Zellen in einem Rutsch nimmt und gibt einen Array von 32.000 Zellen, sobald es – CallumDA
getan Ich bin nicht positiv, aber die Aktualisierung des Bildschirms kann dazu führen, dass es schneller läuft. Versuchen Sie, 'Application.ScreenUpdating = False' am Anfang und' Application.ScreenUpdating = True' am Ende zu platzieren. – tjb1
Verwenden Sie Find() oder WorksheetFunction.Match() anstelle einer for-Schleife, um die Zeile zu finden, in der der Suchwert gefunden wird, und verwenden Sie diese Spalte mit den Spalten, um die gewünschten Werte zurückzugeben. –