如何将多个VLOOKUP从另一个工作表传递到ARRAYFORMULA中的同一单元格?

时间:2019-05-16 11:02:00

标签: google-sheets array-formulas google-sheets-formula google-sheets-query gs-vlookup

只是警告我,我是Google Sheet(和Excel)编程的新手,但除此之外却经验丰富(30多年的编程经验,这是我在网上遇到的第一个问题)。

我使用Google表格在学生储物柜上保持标签,并且有一个带有储物柜的表,我们的学生可以在这样的列表中借用(更多列,但此处未使用): “ LockerID”“位置”“ LockerInformation”“用户ID”

然后我想查看一个包含学生列表的班级,看看他们像这样借了什么: “ 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借用的内容。

编辑:要澄清一下,它大约有2000个储物柜和1500名学生,因此过于复杂的解决方案将导致更新时间过长并使它无法使用。

1 个答案:

答案 0 :(得分:0)

单元格А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

demo spreadsheet