计算符合条件的一个单元格在一个范围内的单元格

时间:2019-06-12 20:17:49

标签: excel vba

我有两列邮政编码。我想计算一下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}))

1 个答案:

答案 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