没有VBA UDF,哪个Excel的公式可以做到这一点?

时间:2016-09-26 08:03:18

标签: excel vba excel-vba excel-formula

我用英语描述的想法很糟糕我找不到这个任务的解决方案,然后我为excel写了一个自定义的UDF

Public Function ArrCompare(Rng1 As Range, Rng2 As Range) As Variant
Dim vR1, strC As String
Dim i As Long, Ui As Long
vR1 = Rng1.Value2
strC = Rng2.Cells(1, 1).Value2
Ui = UBound(vR1)
For i = 1 To Ui
    If InStr(1, strC, vR1(i, 1), vbBinaryCompare) > 0 Then vR1(i, 1) = True Else vR1(i, 1) = False
Next
ArrCompare = vR1
End Function

但我真的想知道原生组合功能可以做什么,或者哪个公式可以做到这一点?

实施例: 我有5个单元格(A1:A5),其值如下:

111
112
113
114
115

我在B1中有一个字符串内容“111,113,117,110”。 我写的那个UDF在这样的Sumproduct中使用

=Sumproduct(--Arrcompare(A1:A5, B1)) in cell C1.

它会返回符合我条件的总细胞。

如果没有vba,有谁知道什么公式可以做到这一点?

4 个答案:

答案 0 :(得分:2)

与UDF相同的公式是:

=SUMPRODUCT(--ISNUMBER(SEARCH(A1:A5,B1)))

但我会排除范围内的空单元格,以便范围可以更大,以便为其他值做好准备:

=SUMPRODUCT(ISNUMBER(SEARCH($A$1:$A$100,B1))*($A$1:$A$100<>""))

答案 1 :(得分:2)

你实际上可以使用COUNTIF:

=SUMPRODUCT(COUNTIF(B1,"*"&A1:A5&"*"))

答案 2 :(得分:1)

如果数字不总是3位数,那么这个数组公式应该更加可靠,因为它会在,111,中搜索,111,113,117,110,

{=SUM(1-ISERR(FIND(","&A1:A5&",",","&B1&",")))}

或只是

=SUMPRODUCT(1-ISERR(FIND(","&A1:A5&",",","&B1&",")))

答案 3 :(得分:0)

@Rory变种类似,但略有不同:

{=SUM(COUNTIF(B1,"*"&A1:A5&"*"))}

enter image description here

@Axel Richter类似,但也有一些区别:

{=COUNT(SEARCH(A1:A5,B1,1))}

enter image description here

将公式插入,然后 Ctrl + Shift + 输入以获取公式数组{}

相关问题