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