Я постараюсь сделать это максимально простым и неконкретным. У меня есть три столбца, a, b, c. Col C имеет сто случайных чисел в ячейках C1-C100. Col A имеет пять случайных чисел в ячейках C1: C5.
Для каждой ячейки B1:B5 я хочу ввести, сколько раз число в столбце a появляется в столбце c. Если бы вы записывали формулу непосредственно в ячейку B1, это было бы так:
=СЧЁТЕСЛИ($C:$C, $A1)
Затем вы должны перетащить вниз, чтобы заполнить ячейки B2: B5
Я хочу сделать это с помощью функции VBA Application.WorksheetFunction.CountIf (мой фактический проект намного сложнее этого, и ячейки должны быть заполнены автоматически).
Dim colb As Range
Set colb = Range("$B1:$B5")
Dim colc As Range
Set colc = Range("$C:$C")
Dim cola As Range
Set cola = Range("$A:$A")
For Each bcell In colb
bcell.Formula = Application.WorksheetFunction.CountIf(colc, bcell.Offset(0, -1))
Next bcell
Это работает правильно. Но мне интересно, можно ли это сделать без цикла For-Each и без указания, сколько ячеек в B должно быть заполнено (распознавая, когда A достигает своего последнего значения, и перестает заполнять B соответственно, а-ля
Dim colb As Range
Set colb = Range("$B:$B")
На мой взгляд, ключевой строкой было бы что-то вроде:
colb.Formula = Application.WorksheetFunction.CountIf(colc, cola)
Но это не работает. Все, о чем я прошу, возможно? Я предполагаю, что позволить Excel сразу заполнить весь диапазон будет быстрее, чем зацикливание.