计算两个列表之间的共享数字

Counting the shared numbers between two lists

我在两个单元格中有两个列表。列表包含数字,数字之间用逗号隔开。

例如

A1:  1,2,3,4,10,12
A2:  1,2,3,5

我需要计算两个单元格之间的共享数字。 结果将在 B1 : 3 中(因为 1,2,3 仅共享 unique 数字)

另一个例子:

A3: 10,12,14,14
A4: 14,14,16

在这种情况下结果是1。(因为14,只有一个共享唯一号码)

有人可以告诉我一个公式吗?请。宏观解决方案也可以。 谢谢。

*只是一个解决方案,请不要将数字分成不同的列。

请尝试下一个功能:

Function ListCompare(L1 As String, L2 As String) As Long
 Dim arr1 As Variant, arr2 As Variant, arrFin As Variant, k As Long
 Dim El1 As Variant, El2 As Variant, ElF As Variant, boolFound
 
    If L1 = "" Or L2 = "" Then ListCompare = 0: Exit Function
    arr1 = Split(L1, ","): arr2 = Split(L2, ",")
    ReDim arrFin(UBound(arr1) + UBound(arr2))
    For Each El1 In arr1
        For Each El2 In arr2
            If El1 = El2 Then
                For Each ElF In arrFin
                  If ElF = El1 Then boolFound = True: Exit For
                Next
                If Not boolFound Then arrFin(k) = El1: k = k + 1
                boolFound = False
            End If
        Next
    Next
    If k > 0 Then
        ReDim Preserve arrFin(k - 1)
        ListCompare = UBound(arrFin) + 1
    Else
        ListCompare = 0
    End If
End Function

可以call/tested以下方式:

Sub testListCompare()
  Dim L1 As String, L2 As String
  L1 = "1,2,3,4,10,12": L2 = "1,2,3,5"
  L1 = "10,12,14,14": L2 = "14,14,16"
  Debug.Print ListCompare(L1, L2)
End Sub

本身不需要 VBA。在 Excel 2016 年您可以使用:

=COUNT(FILTERXML("<t>,"&A1&",<s>"&SUBSTITUTE(A2,",","</s><s>")&"</s></t>","//s[contains(../text(), concat(',',. ,','))][not(preceding::*=.)]"))

基于 post。查看样品的结果:


XPATH 将 return 一个 <s> 节点的数组,其中它是父节点的文本 包含 逗号和 <s> 节点本身。此外,我们确保检查前面兄弟姐妹中的重复项。