Формула Динамический диапазон между данными - PullRequest
0 голосов
/ 05 июня 2019

Мне нужна формула, которая может расширить диапазон между другими данными.
В столбце B для каждого месяца можно указывать Foo или Bar в качестве значений.
Мне нужно посчитать числоFoos и баров в каждом месяце.Но также можно расширить диапазон от B6: B11 до, например, B6: 15, и функция счета должна работать.

enter image description here

=COUNTIF(B6:B11,"Foo")

Но это не динамично.
Я знаю, что вы можете создавать динамические диапазоны с OFFSET и COUNTA, но это не работает, потому что данные не структурированы так, как этого требует формула.

OFFSET($A$1,0,0,COUNTA($A:$A),1)

Я сделал UDF VBA, который эмулирует сочетание клавиш CTRL + DOWN, чтобы найти следующую заполненную ячейку, но поскольку счетчик Foos или Bars позднее связан с другой главной рабочей книгой aUDF не будет работать, UDF не могут работать со связанными значениями.(насколько я знаю)

=COUNTIF(INDIRECT("B"&nextC(A5)&":B"&last(A5)),"Foo")

где nextC и last:

Function last(rng)
    last = Sheets("Sheet1").Cells(rng.Row, "A").End(xlDown).Row - 1 ' finds the last cell row in the current month
    ' with A5 as input it returns 11
End Function

Function nextC(rng)
    nextC = rng.Offset(1, 0).Row ' returns 6 if input is A5 
    ' there may be a better way to do this, I just couldn't think of it at the moment and just wanted to see if it worked
End Function

Существует ли какая-либо формула, которая может повторять значение UDF, давая COUNTIF динамический диапазон, который находится междуданные, как показано на рисунке.
Если нужны вспомогательные столбцы, то это не проблема.

1 Ответ

2 голосов
/ 05 июня 2019

Это должно сработать:

enter image description here

Формула в D2:

=COUNTIF(INDEX($B:$B,MATCH($C$1,$A$1:$A$1000,0)+1):INDEX($B:$B,MATCH(FALSE,INDEX($A:$A,MATCH($C$1,$A$1:$A$1000,0)+2):$A$1000="",0)+MATCH($C$1,$A$1:$A$1000,0)),D1)

Введите через Ctrl Shift Введите

и перетащите на E2 ....

Результат при добавлении новых строк:

enter image description here

Измените диапазон A1000 на все, что вам нужно в вашем случае. Это просто для того, чтобы убедиться, что вы превосходите последний ряд, где я поместил строку «Конец», чтобы отметить последний ряд.

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