-3

单元格A1=10,21,34,23,45,67

需要在单元格A2中执行以下操作的公式:

检查是否A1包含 10,如果是,则 "Coca Cola"
还要检查是否A1包含 21,如果是,则附加"Pepsi"
还要检查是否A1包含 34,如果是,则附加"7Up"
还要检查是否A1包含 23,如果是,然后追加“Sprite”
还要检查是否A1包含45,如果是,则追加“Fanta”
还要检查是否A1包含67,如果是,则追加“Gatorade”
还要检查是否A1包含99,如果是,则追加“Red Bull”
..
等等 。

因此,A2上面示例值的单元格输出将类似于:

Coca Cola , Pepsi , 7Up , Sprite , Fanta , Gatorade

请注意,输出值由" , "(ie <space> comma <space>)分隔,
这可能作为 1 个单元格中的公式吗?大约有 20 个值需要检查。

4

1 回答 1

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)
于 2012-10-21T02:46:07.473 回答