我试图设置一个宏,它将比较多个列表,创建一个具有唯一值的交叉表,并显示每个列表中存在的值的次数。
我做得很好,只有一个例外。使用Countif(s)
公式=COUNTIFS(Source!$A$2:$A$5;[@Values])
时,它会内部转换"文字编号" (例如001,00000002)成数字(例如1,2)。我想避免这种行为,并在没有转换的情况下搜索完全相同的值。
示例数据:
List1 List2
1 0001
0001
2
00000002
我现在正在做什么(错误):
我的问题:
我怎样才能完全统计列表中的值,而无需进行内部转换"文本数字"数字?
答案 0 :(得分:1)
此数组公式可能适合您:
=MIN(SUMPRODUCT(IF(LEN($A$2:$A$5)=LEN(Table1[@Values]),1,0)),SUMPRODUCT(IF($A$2:$A$5=Table1[@Values],1,0)))
Put和 CTRL + SHIFT + ENTER 。在Table1[@Values]
中,Table1
是您的表名。
答案 1 :(得分:0)
我用简单的UDF解决了这个问题。
Function countifsExact(criteria_range As Range, criteria As String) As Long
Dim cell As Range
For Each cell In criteria_range
If cell = criteria Then
countifsExact = countifsExact + 1
End If
Next cell
End Function
<强> EDIT1 强>:
我使用Writing efficient VBA UDFs (Part 1) by Charles Williams和Writing efficient VBA UDFs (Part 2) by Charles Williams中给出的一些建议制作了另一个版本的UDF
主要是:
<强> EDIT2 强>:
然而,一个更好的解决方案是使用SUMPRODUCT公式:
=SUMPRODUCT(--(EXACT(Source!$A$2:$A$5;[@Values])))