Ссылочная конкретная строка в именованном диапазоне в другом именованном диапазоне - PullRequest
0 голосов
/ 05 октября 2018

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

По сути, каждая строка определяет конкретную дату, а каждая комнатаохватывает несколько столбцов (причина в том, что они не только хотят отслеживать, забронирована ли комната, но и записывают имена клиентов и другие замечания), среди которых ежедневный расчетный доход (некоторые факторы влияют на дневную ставку для каждой комнаты)будет генерироваться).

Example

Так что все в порядке, и я создал именованные диапазоны для каждого месяца года и для каждогоroom.

Например, строки 6:36 будут представлять январь, а столбцы C: I - комнату 1. Room 2 будет охватывать J: P и т. д.

ТеперьНа другом листе я хотел создать панель инструментов, в которой перечислены заработки для каждой комнаты в месяц.Это очень простая таблица с 12 строками (по одной на каждый месяц) и 10 столбцами (по 1 на каждую комнату), где я планировал подвести итоги всех доходов.

Dashboard

Поэтому моя проблема в том, что я не могу найти способ извлечь определенный столбец именованного диапазона для комнаты («вертикальный именованный диапазон»).'), который также ограничен в именованном диапазоне в течение месяца («горизонтальный именованный диапазон»).Я читал об использовании ARRAYFORMULA(INDEX(named_range, ,wished_column)), но это работает только для одного именованного диапазона.Мои знания об этих двух функциях не существовали, мне не удалось расширить его до версии с 2 именами ...

(я имею в виду, что я попробовал что-то вроде ARRAYFORMULA(INDEX(January, , INDEX(Room1, , 3)))но это не сработало)

Так как не существует взаимно-однозначного отношения между ячейками панели мониторинга и ячейками комнат, мое единственное текущее решение - вручную ссылаться на все, что вы пойметенеэффективно и отнимает много времени ...

Мой вопрос, в штрафе , таков: Как я могу получить диапазон, который в результате пересечения 2 (или более) названдиапазоны? Получив этот результирующий диапазон, я знаю, что будет очень легко использовать INDEX ().

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Определить именованный диапазон 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, когда у вас есть два полностью перекрывающихся диапазона, таких как:

enter image description here


Частичное перекрытие

Предположим, у вас есть два частично перекрывающихся диапазона, таких как:

enter image description here

Вы можете использовать вариант стандартной формулы перекрытия ( Это является одной из ранних ссылок на него при использовании с диапазоном дат)

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.

0 голосов
/ 06 октября 2018

"Я создал именованные диапазоны для каждого месяца года и для каждой комнаты. Например, строки 6:36 будут представлять месяц январь, а столбцы C: я буду представлять комнату 1. Комната.2 будет охватывать J: P и т. Д. "

Что я предлагаю, так это то, что если для столбцов C определено значение" январь "(последний столбец последней комнаты), то это все, что вам нужнонужно.

Вы не показали нам макет панели.Но давайте предположим, что по крайней мере вас интересует доход, генерируемый каждой комнатой.

=query({January},"select sum(Col3)   label sum(Col3)'' ")

На этом изображении диапазон, называемый "январь", выделен .Обратите внимание, что НЕ включает заголовок .Также обратите внимание, что он может быть много столбцов в ширину;в этом примере я только что составил несколько столбцов, но ваш диапазон должен охватывать все столбцы для номеров от 1 до n.

screenshot

Синтаксис: QUERY (данные, запрос, [заголовки])
Данные : Эта формула запрашивает диапазон под названием «Январь».Этот диапазон может быть на том же листе, на другом листе (например, на панели инструментов).Напоминание: на этом скриншоте выделена моя версия «Январь».
Запрос на подсчет количества людей : "выберите сумму (Col3) метка sum (Col3) ''"
Запрос для суммирования полученного дохода : "выберите количество (Col2) количество меток (Col2) ''"
Col2 & Col4 = Количество людей в комнате № 1 и комнате № 2 соответственно.
Col3 & Col5 = Доход для комнаты № 1 и комнаты № 2 соответственно. [заголовки] : Вы можете игнорировать их.

Эта формула предоставляет только значение запроса;даже если он содержит «этикетку», этикетка не будет напечатана.

Измените и адаптируйте эти формулы для создания другой информации, необходимой для вашей панели инструментов.

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