我有两列邮政编码。我想计算一下A列中还列出了多少个邮政编码。
到目前为止,我一直使用=COUNTIF
表达式,并输入了B列中的所有邮政编码,但是将它们全部手动放入需要花费很多时间,我想用VBA编写它。
我当前的表情:
=SUM(COUNTIFS(A2:A2000,{"45390","45401","45402","45403","45404","45405","45406","45409","45410","45412",etc etc })
我不太确定从哪里开始。我可以使用VBA countif,但是据我所知,我将不得不再次手动输入所有邮政编码,并且我想将其与该范围内的所有代码进行比较。
Sum(COUNTIF(A:A,{""45390"",""45401"", etc etc}))
答案 0 :(得分:0)
您在评论中有几个不错的答案。这是一个用户定义的函数,我认为它应该执行得非常快。我可能会根据Scott的答案进行测试,但我认为它的执行速度非常快。
Function CountFaster(rng1 As Range, rng2 As Range) As Long
Dim qRng() As Variant
Set rng1 = Intersect(rng1, rng1.Worksheet.UsedRange)
Set rng2 = Intersect(rng2, rng1.Worksheet.UsedRange)
qRng = rng1
Dim e As Variant
'Fast way to loop through a range by setting to variant
For Each e In qRng
If Not IsError(Application.Match(e, rng2, 0)) Then
CountFaster = CountFaster + 1
End If
Next
End Function
更新,这并不会让所有人感到惊讶,我的UDF被Scott Cramer的评论所粉碎。对于我的每10万个单元,我的状态大约用了6秒,即他的1。我猜想这就是当您与一个比您高50倍或评级的男人比赛时发生的事情。总之,如果有人希望宏文件执行自己的计时, it's here