Формула Google Sheets с переменным количеством непересекающихся столбцов - PullRequest
0 голосов
/ 11 апреля 2019

В таблице у меня есть несколько непересекающихся столбцов со схожим значением: «эта строка интересна?»

Я хочу создать формулу массива, чтобы получить все интересные строки.Как мне подойти к этому?

Пример таблицы:

Obj id | Case 1 data | Case 1 interesting? | Case 2 data | Case 2 interesting?
     1 |       …     |        YES          |     …       |       NO
     2 |       …     |         NO          |     …       |       NO
     3 |       …     |         NO          |     …       |      YES
     4 |       …     |         NO          |     …       |       NO
     5 |       …     |        YES          |     …       |      YES
     6 |       …     |         NO          |     …       |       NO

Фактическая таблица разбита на несколько листов с разными поднаборами идентификаторов на каждом листе.

Мой текущий подходзастревает с INDIRECT функцией, не принимающей массив или диапазоны.Сначала я ищу свои столбцы: FILTER(COLUMN(A1:1), REGEXMATCH(A1:1, "interesting")), затем преобразую адреса столбцов в диапазоны, но когда я передаю результат в INDIRECT, он возвращает только первый столбец.

Желаемая формула выведет массивуникальных идентификаторов объектов, где каждая строка интересна как минимум для одного случая.

ОБНОВЛЕНИЕ: вот тестовая таблица для этой проблемы.Есть 3 листа: данные студента с идентификаторами и 2 программы.Каждая программа имеет несколько экзаменов (заранее неизвестно. По желаемой формуле будет выведен массив уникальных идентификаторов учеников, по крайней мере, с 1 сданным экзаменом (в тестовом листе: 1, 3, 4, 6)

1 Ответ

1 голос
/ 12 апреля 2019
={"Passing"; ARRAYFORMULA(UNIQUE(QUERY({
 IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
 TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
 IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
 TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
 "where Col1 is not null order by Col1", 0)))}

0


если хотите VLOOKUP это:

=ARRAYFORMULA(IF(LEN(A2:A), IF(IFERROR(VLOOKUP(A2:A, UNIQUE(QUERY({
 IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
 TRANSPOSE('Program 1'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 1'!A1:A, );
 IF(IFERROR(REGEXEXTRACT(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(
 TRANSPOSE('Program 2'!A1:Z), , 999^99))), "Pass", "♠"), "♠"))="♠", 'Program 2'!A1:A, )},
 "where Col1 is not null", 0)), 1, 0))<>"", "PASS", "FAIL"), ))

0

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