如何在Excel中的一个单元格中返回多个值?

如何在Excel中的一个单元格中返回多个值?,excel,vba,vlookup,Excel,Vba,Vlookup,我有一段代码,可以将多个值粘贴到一个单元格中,但我希望能够在单元格的值之间加一个分号 该代码允许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 r

我有一段代码,可以将多个值粘贴到一个单元格中,但我希望能够在单元格的值之间加一个分号

该代码允许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

当我这样做时,它会像我想要的那样在值之间放一个分号,但后面还有十亿个分号

我会为此使用数组。首先调整其大小以适合整个源:

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
,然后是一堆
空值;使用
ReDim Preserve
截断数组:

ReDim Preserve results(1 To currentIndex)
现在,您可以使用
string.Join
,返回包含所有结果的字符串:

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

如果Mathieu Guindons方法不起作用,请尝试在代码的以下行后添加以下内容:

xResult=xResult&“;”和rng.Offset(0,pIndex-1)


你能把
Debug.Print rng.Offset(0,pIndex-1)
放在
xResult=xResult&“;”&rng.Offset(0,pIndex-1)
之前,看看它返回了什么吗?如果你有Office 365:
=TEXTJOIN(;”,TRUE,If(A1:A1000=“MyValue”,D1:D1000)”
作为带有Ctrl-Shift的数组公式-Enter@dwirony它仍然有一堆;after@scottcraner我在哪里添加它?这是一个公式,您可以添加到工作表上,将范围更改为所需的输入和输出,它不是vba
    Do While (InStr(xResult, ";;") > 0)
        xResult = Replace(xResult, ";;", ";")
    Loop