Как я могу получить несколько VLOOKUP с другого листа в одну и ту же ячейку внутри ARRAYFORMULA? - PullRequest
0 голосов
/ 16 мая 2019

Просто чтобы предупредить, что я новичок в программировании Google Sheet (и Excel), но испытал другое (30+ лет включаю и выключаю, и это мой первый вопрос онлайн).

Я использую Google Sheetвести учет на шкафчиках учеников и иметь лист со шкафчиками, которые наши ученики могут позаимствовать в таком списке (много других столбцов, но здесь они не используются): "LockerID" "Location" "LockerInformation" "UserID"

А потом я хотел просмотреть класс со списком учеников и посмотреть, что они позаимствовали, вот так: «UserID» «UserName» «LockerID (LockerLocation)» *

Поскольку они могут занимать несколько шкафчиков, яя не могу использовать простой VLOOKUP, и я хотел бы получить такой результат: "ghdsy45" "Johan Andersson" "45 (House-1), 78 (House-4)"

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

Любая помощь отопытОпытный программист был бы очень признателен.

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

={"Borrowed";ARRAYFORMULA(IF(LEN(A4:A),Join(", ",IFERROR(QUERY('ItemList'!A:M,"select A where M='"&A4:A&"'",1)),""),""))}

Ожидается, что M=A4:A будет проверять каждую строку, но все строки будут проверяться по A4.Таким образом, все строки просто показывают, что заимствовал первый UserID.

edit: Хочу уточнить, что в нем около 2000 шкафчиков и 1500 учеников, поэтому слишком сложное решение приведет к слишком длинному времени обновления и сделает его непригодным для использования.

1 Ответ

0 голосов
/ 18 мая 2019

ячейка А1 :

={"UserID", "Name"; FILTER({Users!A2:A, Users!C2:C}, Users!B2:B="B2")}

ячейка C1 :

={"Lockers"; ARRAYFORMULA(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IFERROR(REGEXEXTRACT(TO_TEXT(IF(ISNUMBER(SPLIT(D2:D, " ")), 
 SPLIT(D2:D, " "), )), "\d+"))), , 999^99))), " ", " - "))}

ячейка D1 :

={"Lockers per Houses"; ARRAYFORMULA(IFERROR(VLOOKUP(A2:A, 
 {ARRAY_CONSTRAIN((QUERY({LockerList!A2:A&"♦"&LockerList!B2:B, LockerList!B2:D}, 
 "select Col4,count(Col4) where Col3 is not null group by Col4 pivot Col1")), 999^99, 1), 
 SUBSTITUTE(SUBSTITUTE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(
 IF(ISNUMBER(QUERY({LockerList!A2:A&"♦"&LockerList!B2:B, LockerList!B2:D}, 
 "select Col4,count(Col4) where Col3 is not null group by Col4 pivot Col1")), 
 ARRAY_CONSTRAIN(QUERY({LockerList!A2:A&"♦"&LockerList!B2:B, LockerList!B2:D}, 
 "select Col4,count(Col4) where Col3 is not null group by Col4 pivot Col1"), 1, 999^99), ))
 , , 999^99))), " ", ", "), "♦", " ")}, 2, 0)))}

0

демонстрационная таблица

...