Countif没有将TEXT转换为NUMBER
我试图设置一个macros,它将比较多个列表,创build一个具有唯一值的交叉表,并显示每个列表中显示值的次数。
我做得很好,只有一个例外。 当使用Countif(s)
公式=COUNTIFS(Source!$A$2:$A$5;[@Values])
,它内在地将“文本号”(例如001,00000002)转换为数字(例如1,2)。 我想避免这种行为,并search完全相同的价值,而无需转换。
示例数据:
List1 List2 1 0001 0001 2 00000002
我现在得到的(错误):
我想要什么(预期):
我的问题:
我如何计算清单中的值,没有内部转换“文本号码”数字?
这个数组公式可能适合你:
=MIN(SUMPRODUCT(IF(LEN($A$2:$A$5)=LEN(Table1[@Values]),1,0)),SUMPRODUCT(IF($A$2:$A$5=Table1[@Values],1,0)))
把和CTRL + SHIFT + ENTER 。 在Table1[@Values]
, Table1
是您的表名称。
我用简单的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
编辑1 :
我使用Charles Williams编写高效的VBA UDF(第1部分)和Charles Williams 编写高效的VBA UDF(第2 部分)给出的一些build议,制作了另一个UDF版本。
主要是:
- 每次将VBA程序将数据从Excel单元传输到VBAvariables时,将criteria_range存储在Variantvariables中,避免了大量开销
- 使用Range.Value2属性,而不是Range.Value
- 使用excel MATCH函数在sorting的范围内获取起始点,并在值改变时退出。
编辑2 :
然而,更好的解决scheme是使用SUMPRODUCT公式:
=SUMPRODUCT(--(EXACT(Source!$A$2:$A$5;[@Values])))