#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)))
Комментарии:
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))
Комментарии:
1. Я не думаю, что это получение правильных данных. У сотрудника 3149 Eastland 1 было: 2 пропущенных элемента, 2 ошибки ввода, 0 двойных звуковых сигналов, 0 пропущенных полок, 0 пропущенных отсеков и всего 5. Я не уверен, откуда у вас цифры 23, 4.5, 9, 10 и т. Д.?
2. числа — это суммы целых столбцов, например. все сотрудники
3. Мне нужны цифры только для этого сотрудника (ссылка на ячейку B5), а не для всех сотрудников. Поскольку это отдельные списки.