Определить именованный диапазон Base как
A:Z
Определить диапазон с именем Horizontal как
6:36
Определить диапазон с именем Vertical как
C:I
Затемпересечение вертикального и горизонтального диапазонов определяется следующим образом:
index(Base,row(Horizontal),COLUMN(Vertical)):index(Base,row(Horizontal)+rows(Horizontal)-1,COLUMN(Vertical)+columns(Vertical)-1)
Это можно проверить, используя его в функции, например:
=countblank(index(Base,row(Horizontal),COLUMN(Vertical)):index(Base,row(Horizontal)+rows(Horizontal)-1,COLUMN(Vertical)+columns(Vertical)-1))
дает результат 7 * 31 = 217 в моемлист, потому что я не заполнил ни одну из ячеек.
Смещенная версия этого будет:
=countblank(offset(A1,row(Horizontal)-1,COLUMN(Vertical)-1):offset(A1,row(Horizontal)+rows(Horizontal)-2,COLUMN(Vertical)+columns(Vertical)-2))
или более просто:
=countblank(offset(A1,row(Horizontal)-1,COLUMN(Vertical)-1,rows(Horizontal),COLUMNS(Vertical)))
Такэто хорошо работает в случае OP, когда у вас есть два полностью перекрывающихся диапазона, таких как:
Частичное перекрытие
Предположим, у вас есть два частично перекрывающихся диапазона, таких как:
Вы можете использовать вариант стандартной формулы перекрытия ( Это является одной из ранних ссылок на него при использовании с диапазоном дат)
max(start1,start2) to min(end1,end2)
Таким образом, предыдущая формула становится
=countblank(index(Base,max(row(index(Partial1,1,1)),row(index(Partial2,1,1))),max(COLUMN(index(Partial1,1,1)),column(index(Partial2,1,1)))):
index(Base,min(row(index(Partial1,1,1))+rows(Partial1)-1,row(index(Partial2,1,1))+rows(Partial2)-1),min(COLUMN(index(Partial1,1,1))+columns(Partial1)-1,column(index(Partial2,1,1))+columns(Partial2)-1)))
и версия смещения
=countblank(offset(A1,max(row(offset(Partial1,0,0)),row(offset(Partial2,0,0)))-1,max(COLUMN(offset(Partial1,0,0)),column(offset(Partial2,0,0)))-1):
offset(A1,min(row(offset(Partial1,0,0))+rows(Partial1)-2,row(offset(Partial2,0,0))+rows(Partial2)-2),min(COLUMN(offset(Partial1,0,0))+columns(Partial1)-2,column(offset(Partial2,0,0))+columns(Partial2)-2)))
Я проверил это на диапазонах C2: F10 и D3: G11, что дает ожидаемый результат 24.
Однако, если нет перекрытия, это все равно может дать ненулевой результат, поэтому подходящий тест должен добавить к формуле:
=if(and(max(row(index(Partial1,1,1)),row(index(Partial2,1,1)))<=min(row(index(Partial1,1,1))+rows(Partial1)-1,row(index(Partial2,1,1))+rows(Partial2)-1),
max(column(index(Partial1,1,1)),column(index(Partial2,1,1)))<=min(column(index(Partial1,1,1))+columns(Partial1)-1,column(index(Partial2,1,1))+columns(Partial2)-1)),"Overlap","No overlap")
Возможно, лучший подход в Google Sheets это пойтивернуться к полной версии вызова Offset OFFSET (cell_reference, offset_rows, offset_columns, [height], [width]).Хотя это довольно долго, оно вернет # Значение!ошибка, если нет перекрытия:
=Countblank(offset(A1,
max(row(offset(Partial1,0,0)),row(offset(Partial2,0,0)))-1,
max(COLUMN(offset(Partial1,0,0)),column(offset(Partial2,0,0)))-1,
min(row(offset(Partial1,0,0))+rows(Partial1),row(offset(Partial2,0,0))+rows(Partial2))-max(row(offset(Partial1,0,0)),row(offset(Partial2,0,0))),
min(COLUMN(offset(Partial1,0,0))+columns(Partial1),column(offset(Partial2,0,0))+columns(Partial2))-max(COLUMN(offset(Partial1,0,0)),column(offset(Partial2,0,0)))
))
Примечания
Почему мне пришлось ввести еще несколько индексов (индексов?) во второй формуле, чтобы она работала?Потому что, если вы используете функцию строки с диапазоном в контексте массива, вы получите массив номеров строк, что не то, что я хочу.Как это бывает, в первой формуле вы не используете ее в контексте массива, так что вы просто получаете первую строку и столбец заданного диапазона, что нормально.Во второй формуле Max и Min пытаются вычислить все строки в массиве, что дает неправильный ответ, поэтому я использовал Index (range, 1,1), чтобы заставить его смотреть только в верхний левый угол каждогоспектр.Другое дело, что и индекс, и смещение возвращают ссылку, поэтому допустимо использовать конструкцию Index (...): Index (...) или Offset (...): Offset (...) для определенияновый диапазон.
Я также протестировал вышеупомянутое в Excel (где, как уже упоминалось, версия индекса будет предпочтительнее).В этом случае База будет установлена на 1 доллар: 1048576.