Лучший способ поиска и возврата данных для условий на основе 2 столбцов и 1 строки

#performance #google-sheets #formula #vlookup #google-sheets-formula

#Производительность #google-таблицы #формула #vlookup #google-таблицы-формула

Вопрос:

У меня есть 2 листа в Google Sheets. Один лист представляет собой отдельный реестр для сотрудника, а другой лист содержит все ошибки, допущенные всеми 99 сотрудниками для каждого отдельного магазина. Каждый день мы добавляем 2 новых хранилища данных.

На странице реестра я хочу иметь возможность искать ошибки сотрудников на основе названия магазина (названия магазинов указаны в ссылках на ячейки: D, E, F: 15 в списке сотрудников) и, очевидно, есть имя (ссылка на ячейку: B5) и возвращать 6 типов ошибокони были сделаны за день (пропущенный товар, двойной звуковой сигнал, пропущенная полка, пропущенный отсек, ошибка ввода, итог из таблицы ошибок)

Чтобы лучше понять, вот мой Google sheet: https://docs.google.com/spreadsheets/d/1awWIode75nPFbc9-d5YRUJZd0OyMWCCI8C7OKloeKjE/edit?usp=sharing

Какой код / формула мне понадобятся? Любая помощь приветствуется.

Комментарии:

1. и что вы хотите вернуть? количество ошибок или список имен сотрудников?

2. @Falcon Поскольку каждый день появляется 2 новых хранилища, почему у вас есть ссылки на 3 ячейки на странице реестра?

3. @player0 — количество ошибок, поэтому, например, у Employee1 могло быть 2 пропущенных элемента, 0 двойных звуковых сигналов, 1 пропущенная полка, 0 пропущенных отсеков, 3 ошибки ввода, всего 20 в магазине 3321)

4. @ZEuS, потому что он покажет последние 3 хранилища, которые они сделали. (У меня есть еще один раздел над ним под названием Scan Rate, который уже находит последние 3 хранилища, которые они сделали) Я просто не показал это, чтобы не вызывать путаницы.

Ответ №1:

вставьте в ячейку D16 и перетащите вправо:

 =ARRAYFORMULA(IFERROR(VLOOKUP(
 {"Missed Item"; "Keying Error"; "Double Beep"; "Missed Shelf"; "Missed Bay"; "Total"}, 
 {TRANSPOSE(Errors!$B$3:$G$3), IF(
 TRANSPOSE(INDIRECT("Errors!"amp;ADDRESS(MAX(IF(Errors!$A:$A=$B$5,ROW($A:$A), )), 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0), 4)amp;
 ":"amp;ADDRESS(MAX(IF(Errors!$A:$A=$B$5,ROW($A:$A), )), 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0) 5, 4)))="", 0, 
 TRANSPOSE(INDIRECT("Errors!"amp;ADDRESS(MAX(IF(Errors!$A:$A=$B$5,ROW($A:$A), )), 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0), 4)amp;
 ":"amp;ADDRESS(MAX(IF(Errors!$A:$A=$B$5,ROW($A:$A), )), 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0) 5, 4))))}, 2, 0)))
 

0

Комментарии:

1. У меня все еще возникают проблемы с большим количеством хранилищ, и я не могу найти какие-либо данные. Даже после Trim многие хранилища не отображают данные… Есть идеи, почему?

2. Мне нужно было бы это проверить. можете ли вы привести мне пример? (кстати, я не могу редактировать лист)

Ответ №2:

вставьте в ячейку D16 и перетащите вправо:

 =ARRAYFORMULA(MMULT(IF(TRANSPOSE(INDIRECT("Errors!"amp;ADDRESS(4, 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0), 4)amp;
 ":"amp;SUBSTITUTE(ADDRESS(3, 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0) 5, 4), 3, 105)))="", 0, 
 TRANSPOSE(INDIRECT("Errors!"amp;ADDRESS(4, 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0), 4)amp;
 ":"amp;SUBSTITUTE(ADDRESS(3, 
 MATCH(FILTER(Errors!2:2, SEARCH(D15, Errors!2:2)), Errors!2:2, 0) 5, 4), 3, 105)))), 
 ROW($A4:$A105)^0))
 

0

Комментарии:

1. Я не думаю, что это получение правильных данных. У сотрудника 3149 Eastland 1 было: 2 пропущенных элемента, 2 ошибки ввода, 0 двойных звуковых сигналов, 0 пропущенных полок, 0 пропущенных отсеков и всего 5. Я не уверен, откуда у вас цифры 23, 4.5, 9, 10 и т. Д.?

2. числа — это суммы целых столбцов, например. все сотрудники

3. Мне нужны цифры только для этого сотрудника (ссылка на ячейку B5), а не для всех сотрудников. Поскольку это отдельные списки.