检查单元格中的多个值以在另一个单元格中输出多个文本

时间:2012-10-20 18:14:28

标签: excel excel-vba vba

单元格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个值。

1 个答案:

答案 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)