Подсчет ячеек, критерии которых соответствуют одной ячейке в диапазоне - PullRequest
0 голосов
/ 12 июня 2019

У меня есть две колонки почтовых индексов.Я хотел бы посчитать, сколько почтовых индексов в столбце A также указано в столбце B.

До сих пор я использовал выражение =COUNTIF и вводил все почтовые индексы из столбца B, но это занялонавсегда положить их все вручную, и я хотел бы написать это в VBA.

Мое текущее выражение:

=SUM(COUNTIFS(A2:A2000,{"45390","45401","45402","45403","45404","45405","45406","45409","45410","45412",etc etc })

Я не совсем уверен, с чего начать.Я мог бы использовать счетчик VBA, но из того, что я могу сказать, мне пришлось бы снова вводить все почтовые индексы вручную, и я хотел бы просто сравнить его со всеми кодами в диапазоне.

Sum(COUNTIF(A:A,{""45390"",""45401"", etc etc}))

1 Ответ

0 голосов
/ 13 июня 2019

У вас есть несколько хороших ответов в комментариях. Вот пользовательская функция, которая, я думаю, должна работать довольно быстро. Я мог бы проверить это против ответа Скотта, но я думаю, что он работает довольно быстро.

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 был раздавлен комментарием Скотта Крамера. На каждые 100 тыс. Ячеек у меня уходит около 6 секунд, у него его 1. Думаю, это то, что происходит, когда вы гоняете парня с 50-кратным или более высоким рейтингом, чем у вас ... В любом случае, если кто-то хочет, чтобы макро-файл выполнял их собственное время, это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...