2017-05-19 6 views
0

Ich versuche Vlookup mehrere Werte zurückzugeben. Allerdings dauert das Laden der Funktion sehr lange. Gibt es eine Möglichkeit, es schneller zu machen? Ich habe die Funktion von online: https://www.extendoffice.com/documents/excel/2706-excel-vlookup-return-multiple-values-in-one-cell.htmlVlookup gibt mehrere Werte zurück

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long) 
    Dim rng As Range 
    Dim xResult As String 
    xResult = "" 
    For Each rng In pWorkRng 
    If rng = pValue Then 
    xResult = xResult & " " & rng.Offset(0, pIndex - 1) 
    End If 
Next 
MYVLOOKUP = xResult 
End Function 

Dies ist der Code in der Sub

Sub sort() 
Dim x As Integer 
Dim result As Variant 
Dim name As String 
Application.ScreenUpdating = False 
    x = 10 
Do Until IsEmpty(Sheet9.Cells(x, 1).Value) 
name = Sheet9.Cells(x, 1).Value 
result = MYVLOOKUP(name, Sheet9.Range("K:M"), 3) 
Sheet9.Cells(x, 4).Value = result 
x = x + 1 
Loop 
End Sub 
+0

Wenn Sie '* die Funktion von online *' erhalten, wird es als gute Manieren angesehen, den ursprünglichen Autor zu akkreditieren. – Jeeped

Antwort

2

Wenn Sie Sheet9.Range("K:M") in die UDF als pWorkRng Parameter übergeben verwenden, ist es in der For Each rng In pWorkRng verwendet wird Schleife. Das bedeutet, dass Sie drei ganze Spalten oder 3.145.728 Zellen untersuchen werden; die meisten davon sind vollständig leer und zwei Spalten sind in keinem Fall für einen SVERWEIS erforderlich. Kein Wunder, warum die Dinge langsam laufen.

Schneiden Sie entweder die Bereiche bis zum aktiven Bereich der Daten ab oder verwenden Sie die Schnittmenge, um die vollständigen Spaltenreferenzen bis auf den .UsedRange zu reduzieren.

Ich habe eine Option hinzugefügt, nur in der ersten Spalte zu suchen. Bei Ihrem Vergleich wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden. Vielleicht möchten Sie das tatsächlich, aber SVERWEIS ist normalerweise nicht Groß-und Kleinschreibung.

+0

Sie können dies auch mit [tag: textjoin] tun. Siehe [Verketten mehrerer Ergebnisse aus einer Indexübereinstimmung] (http://stackoverflow.com/questions/43352819/concatenate-multiple-results-from-an-index-match). – Jeeped

+0

Wie füge ich Komma nach den Ergebnissen hinzu. Ich füge es in dieser Zeile hinzu: xResult = xResult & "," & rng.Offset (0, pIndex - 1). Aber es zeigt sich als ", a, b, c" –

+0

Es klingt wie in einem Komma enden möchten. Wenn das der Fall ist, dann kehren Sie die String-Verkettungsreihenfolge mit 'xResult = xResult & rng.Offset (0, pIndex-1) &", "' – Jeeped

Verwandte Themen