Как сместить importrange () в массиве formula () - PullRequest
1 голос
/ 13 марта 2020

У меня есть два Google Sheets (отдельные документы), которые содержат информацию, назовем их Master & Source. В пределах Source у меня есть неопределенный диапазон ячеек в отсортированном порядке по дате, который мне нужно отобразить в Master. Master предназначен для ссылки на все различные листы Source, при нормальной работе у меня их будет несколько, поэтому я могу просмотреть всю быструю информацию обо всех листах Source, удобно отображаемых в Master. Master содержит диапазон дат, который начинается до и заканчивается после диапазона дат в пределах Source (для размещения других диапазонов дат из других Source листов).

Моя цель - создать формулу из одной ячейки которые можно скопировать и вставить для каждого Source, который мне нужно просмотреть в моем Master, который заполнит ячейки в столбцах до и после диапазона дат от Source строкой «Нет класса» и всех ячеек, которые совпадение диапазона дат с Source будет просто копией / ссылкой на соответствующую ячейку с Source. Вот формула, которую я придумал:

=ARRAYFORMULA(if({A1:Z1;A1:Z1;A1:Z1;A1:Z1;A1:Z1}<importrange(Link!B4,"Source!A1"),"No Class",if({A1:Z1;A1:Z1;A1:Z1;A1:Z1;A1:Z1}>Link!N4,"No Class",importrange(Link!B4,"Source!A1:Z99"))))
Link!N4 = Start Date
Link!B4 = hyperlink to the google sheet `Source`

Удивительно, но она работает довольно хорошо, за исключением одного существенного недостатка: массив значений из importrange относится к ячейке формулы находится в - иначе, диапазон от Source начинается с Master!A1, а не начинается с первого столбца, который совпадает с датой Source!A1.

Это снимок экрана из результат моей формулы в Master. * РЕДАКТИРОВАТЬ: No Class имеет условное форматирование, чтобы цвет шрифта соответствовал заливке, поэтому вы не можете видеть его на этом скриншоте, но это темно-серые ячейки.

И еще один скриншот , на этот раз Source я пытаюсь просмотреть.

Я понимаю, что этот подход может быть не единственным (или может не работать вообще), но каждый раз, когда я пытаюсь что-то еще, всегда сводится к той же проблеме: как динамически запустить importrange в первом столбце, который совпадает с датой из Source, используя формулу в первой ячейке?

1 Ответ

1 голос
/ 13 марта 2020

Я нашел приемлемый обходной путь. Это ни в коем случае не решение проблемы смещения данных в массиве, но позволяет мне получить то, что мне нужно было сделать. Этот код необходимо заполнить с помощью маркера заполнения (синий квадрат в правом нижнем углу выбранной ячейки). Я добавляю это здесь в случае, если кто-то попадает в подобную ситуацию и нуждается в альтернативном способе взглянуть на проблему.

=iferror(if(importrange(Link!$B4,"Source!A1")>A2,{"No Class";"No Class";"No Class";"No Class";"No Class"},if(importrange(Link!$B4,address(1,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE,"Source"))=A2,importrange(Link!$B4,address(2,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE,"Source")&":"&address(5,COLUMN(A3)-match(importrange(Link!$B4,"Source!A1"),$A2:$Z2,0),4,TRUE)),"No Class")),{"No Class";"No Class";"No Class";"No Class";"No Class"})
A2 is the date of the coloumn in master I'm trying to import into, it changes as your drag the fill handel.
A3 is the cell that the formula is currently in
  1. Это работает, сначала проверяя iferror (но я вернемся к этому).
  2. Затем, если дата в том же столбце, что и формула, меньше даты начала, «Нет класса» заполняет столбец (скрывает даты до даты начала)
  3. ELSE Если дата в том же столбце, что и формула, - это ЖЕ, что и дата в столбце Source (смещено на число столбцов от даты начала), затем заполните столбец соответствующим столбцом из Source (иначе он заполняет один столбец за раз, а не импортирует весь диапазон сразу).
  4. (Назад к iferror) Ошибка возвращается для всех столбцов, следующих после даты окончания, поэтому iferror заполняет эти столбцы "No Class"
...