单元格A1
= 10,21,34,23,45,67
在单元格A2
中需要执行以下操作的公式:
检查A1
是否包含10,如果是,则“可口可乐”
同时检查A1
是否包含21,如果是,则追加“百事可乐”
同时检查A1
是否包含34,如果是,则追加“7Up”
同时检查A1
是否包含23,如果是,则追加“精灵”
同时检查A1
是否包含45,如果是,则追加“Fanta”
同时检查A1
是否包含67,如果是,则追加“Gatorade”
同时检查A1
是否包含99,如果是,则追加“红牛”
...
等等。
因此上面示例值的单元格A2
的输出类似于:
Coca Cola , Pepsi , 7Up , Sprite , Fanta , Gatorade
请注意,输出值以" , "
(即<space> comma <space>
)分隔
这可能作为1个细胞中的公式吗?大约需要检查20个值。
答案 0 :(得分:1)
我认为唯一可行的方法是使用用户定义函数(UDF
)
要设置它,请将值列表,字符串对放在工作簿中的某个位置(对于此示例,我将使用G1:H7
),第一列中的值,第二列中的字符串。
将此代码放入模块
Function ListRange(rValues As Range, rLookup As Range) As String
Dim ListOfValues() As String
Dim OutputList() As String
Dim i As Long, j As Long
Dim v As Variant
ListOfValues = Split(rValues.Value, ",")
ReDim OutputList(LBound(ListOfValues) To UBound(ListOfValues))
j = LBound(ListOfValues)
For i = LBound(ListOfValues) To UBound(ListOfValues)
v = Application.VLookup(Val(ListOfValues(i)), rLookup, 2, 0)
If Not IsError(v) Then
OutputList(j) = v
j = j + 1
End If
Next
If j = 0 Then
ListRange = ""
Else
ReDim Preserve OutputList(LBound(OutputList) To j - 1)
ListRange = Join(OutputList, " , ")
End If
End Function
像这样称呼
=ListRange(A1,$G$1:$H$7)