计算两个列表之间的共享数字
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>
节点本身。此外,我们确保检查前面兄弟姐妹中的重复项。
我在两个单元格中有两个列表。列表包含数字,数字之间用逗号隔开。
例如
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::*=.)]"))
基于
XPATH
将 return 一个 <s>
节点的数组,其中它是父节点的文本 包含 逗号和 <s>
节点本身。此外,我们确保检查前面兄弟姐妹中的重复项。