Excel 返回以逗号分隔的单元格中与数组匹配的条目数

Excel 返回以逗号分隔的单元格中与数组匹配的条目数,excel,excel-formula,vba,Excel,Excel Formula,Vba,我有一个单元格的内容,每个单元格用逗号分隔,每个单元格包含可变数量的条目。单元格内容不是唯一的 例如 第1单元 item@domain1, item@domain2, item@domain3, item@domain1, item@domain1, item@domain2, item@domain20 第2单元 item@domain15, item@domain2, item@domain1, item@domain3, item@domain4, item@domain4 我想将每个单元

我有一个单元格的内容,每个单元格用逗号分隔,每个单元格包含可变数量的条目。单元格内容不是唯一的

例如

第1单元 item@domain1, item@domain2, item@domain3, item@domain1, item@domain1, item@domain2, item@domain20

第2单元 item@domain15, item@domain2, item@domain1, item@domain3, item@domain4, item@domain4

我想将每个单元格的内容与一系列值进行比较,并确定匹配的次数

如果要比较的范围为

域1 域2 域3

那么单元格1和单元格2的结果分别为6和3

祈祷这在数组公式格式中是可能的


提前感谢所有花时间阅读本文的人,希望他们能想出一个好的解决方案:0)

下面是一个VBA解决方案,用于计算两个列表之间的匹配数,并输出一个带有结果的消息框

我的数据如下所示:

代码:

结果:


功能解决方案:

您可以将其更改为单元格函数,在该函数中,您可以按如下方式传入两个列表:

在单元格
C1
中输入以下公式:
=compareMyList(A2,$G$2)

代码:

结果:


我认为您需要vba来完成此操作。(使用vba.Split函数等)。考虑标记VBA?谢谢输入,我在你的建议中添加了Excel VBA标签。就像拔示巴在VBA中所说的那样,使用S拆封函数返回一个范围很容易,然后你可以使用CurTif来计算发生的次数。非VBA解决方案是将列表提取到多个列。数据->文本到列->分隔符等。我认为文本到列方法的问题是每个单元格中逗号分隔的条目数量可变。您提到VBA解决方案很简单。只有你知道怎么做,我不知道:0)解决方案建议非常受欢迎…一些单元格中的匹配列表也是吗?谢谢,让我朝着正确的方向前进。我是一个彻头彻尾的VBA noob,所以如果我要求太多,请原谅我。。。如何扩展VBA以读取一列中的多个单元格条目,并在下一列中输出每个单元格内容的命中数?我需要大约15000个列条目来与静态值列表进行比较。(我希望这是有意义的…)我添加了一个函数选项,现在您可以使用单元格内的公式并传入要比较的两个列表。一旦你的格式设置正确,你可以把公式拖下来,但这取决于你的实现。这看起来是花钱的。让我把它敲入Excel(任务本身),如果它成功了,我会将它标记为已接受。谢谢!我在excel中得到了它,但从未得到正确的值。我想你也发现了同样的错误。。。快速提问,我要比较的列表不是逗号分隔的,而是一个范围。你能适应这个吗?我修改了代码,我做了一个粗略的假设,不得不重新编写。复制新代码(最新版本)。这应该解释不同的可能错误。
Sub compareListA()
    Dim listA As String
    Dim compareList As Variant
    Dim compareSplit As Variant
    Dim count As Integer

    listA = [A1]
    compareList = Split(listA, ",")

    compareSplit = Split([A5], ",")

    count = 0
    For idx = LBound(compareSplit) To UBound(compareSplit)
        If InStr(listA, Trim(compareSplit(idx))) Then
            For j = LBound(compareList) To UBound(compareList)
                If Trim(compareList(j)) = Trim(compareSplit(idx)) Then
                    count = count + 1
                End If
            Next j
        End If
    Next idx

    MsgBox (count & " Matches Found Between List")
End Sub
Function compareMyList(rngA As Range, rngCompare As Range)
    Dim listA As String
    Dim compareList As Variant
    Dim compareSplit As Variant
    Dim count As Integer

    listA = [rngA]
    compareList = Split([rngA], ",")

    compareSplit = Split([rngCompare], ",")

    count = 0
    For idx = LBound(compareSplit) To UBound(compareSplit)
        If InStr(listA, Trim(compareSplit(idx))) Then
            For j = LBound(compareList) To UBound(compareList)
                If Trim(compareList(j)) = Trim(compareSplit(idx)) Then
                    count = count + 1
                End If
            Next j
        End If
    Next idx

    compareMyList = count
End Function