Как Vlookup вернуть несколько значений в одной ячейке в Excel? - PullRequest
0 голосов
/ 22 января 2019

Итак, у меня есть код, который вставляет несколько значений в одну ячейку, но я надеялся, что смогу поставить точку с запятой между значениями ячейки.

Этот код позволяет vlookup найти несколько значений в ячейке и вывести их в одну ячейку.

Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
'Update 20150310
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

Когда я делаю это, он ставит точку с запятой между значениями, как я хочу, но также имеет миллиард точек с запятой.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Если метод Матье Гиндона не работает, попробуйте добавить следующее в ваш код после следующей строки:

xResult = xResult & ";" & rng.Offset(0, pIndex - 1)

    Do While (InStr(xResult, ";;") > 0)
        xResult = Replace(xResult, ";;", ";")
    Loop
0 голосов
/ 23 января 2019

Я бы поработал с массивом для этого.Начните с определения размера, чтобы он соответствовал всему источнику:

Dim results As Variant
ReDim results(1 To pWorkRng.Count)

Затем сохраните счетчик для индекса последнего элемента в этом массиве и напишите в этом индексе:

Dim currentIndex As Long

For Each rng In pWorkRng
    If Not IsError(rng.Value) Then
        If rng.Value = pValue Then
            currentIndex = currentIndex + 1
            results(currentIndex) = rng.Offset(0, pIndex - 1)
        End If
    End If
Next

Когдацикл завершится, вы получите все результаты до currentIndex, а затем набор Empty значений;обрезать массив с ReDim Preserve:

ReDim Preserve results(1 To currentIndex)

И теперь вы можете вернуть строку со всеми результатами, используя String.Join:

MYVLOOKUP = String.Join(results, ";")
...