Функция запросов к Google Sheets с несколькими и пустыми (игнорируемыми) критериями - PullRequest
1 голос
/ 16 октября 2019

У меня есть лист («Обучение») со списком информации для всех сотрудников (более 4000 строк), и у меня есть функция запроса на другом листе («Поиск»), которая позволяет мне выполнять фильтрацию на основе критериев, выбранных моей командой. Выбор и соответствующие ячейки:

Company - A3 : First Name - B3 : Last Name - C3 : Email - D3 : PO # - E3 : Class - F3

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

Query () будет работать с использованием одного критерия или нескольких критериев (с использованием «или» и «и»), но имеющаяся у нас информация не всегда будет согласованной (может иметь фамилию, но не имя, адрес электронной почты, но не компанию и т. Д.). .) поэтому я хочу, чтобы он фильтровал, используя ТОЛЬКО данные, которые были введены моей командой, и игнорировал критерии, если ячейка (A3: F3) оставлена ​​пустой.

Способ написания кода теперьвключает в себя строки, которые соответствуют ЛЮБОМУ из критериев (я написал так, чтобы у меня были правильные ссылки, тогда я расширял критерии). Мне нужно включить строки, которые соответствуют только точным введенным критериям.

=Query({Training!A2:AS},"select Col1, Col2, Col3, Col4, Col5, Col6, Col7, Col8, Col9, Col10, Col11, Col12, Col13, Col14, Col15, Col16, Col17, Col19, Col21, Col23, Col25, Col27, Col29, Col31, Col32, Col34, Col37, Col38, Col40, Col42, Col43, Col44, Col45 where Col2 = '"& A3 &"' or Col30= '"& E3 &"' ",0)

Чтобы привести пример того, что я хочу. Если моя команда введет следующий критерий в лист «Поиск»:

(A3) Компания - Метро: (B3) Имя - оставлено пустым : (C3) Фамилия - оставлено пустым : (D3) Электронная почта - оставлено пустым : (E3) PO # - 123456: (F3) Класс - оставлено пустым

Мой текущий кодпокажет любую строку, содержащую Metro в Col2 или 123456 в Col30. Я хочу, чтобы он отображал строки, содержащие только ОБА Метро и Джона, игнорируя строки, которые соответствуют только одному критерию, и полностью игнорируя другие критерии, поскольку они оставлены пустыми.

В Интернете я нашел несколько вещей, которыеЯ думал, что это сработает, но либо они оказались не тем, что мне нужно, либо я недостаточно разбираюсь в этой функции, чтобы заставить их работать. Любая помощь с объяснением в учебных целях была бы отличной.

1 Ответ

0 голосов
/ 16 октября 2019

вы можете сделать это так:

=IFERROR(QUERY({Training!A2:AS},
 "select Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10,Col11,Col12,Col13,Col14,Col15,Col16,Col17,Col19,Col21,Col23,Col25,Col27,Col29,Col31,Col32,Col34,Col37,Col38,Col40,Col42,Col43,Col44,Col45 
  where "&TEXTJOIN(" and ", 1, 
 IF(A3<>"", "Col2 = '"&A3&"'", ), 
 IF(B3<>"", "Col3 = '"&B3&"'", ),  
 IF(C3<>"", "Col4 = '"&C3&"'", ), 
 IF(D3<>"", "Col6 = '"&D3&"'", ),  
 IF(E3<>"", "Col30= '"&E3&"'", ),  
 IF(F3<>"", "Col18= '"&F3&"'", )), 0), "no match")

0

...