【问题标题】:LOOKUP a key range in another key range to get ALL corresponding values, instead of just the first在另一个键范围中查找一个键范围以获取所有对应的值,而不仅仅是第一个
【发布时间】:2021-12-05 04:36:23
【问题描述】:
我想获取 Range1 中与 Range2 中的键相对应的所有数据。
(如下图)
但我的公式无法正确显示数据:
=ARRAYFORMULA(TRANSPOSE(QUERY(Range1,"select Col2 where Col1 contains '"&A1:A&"'",0)))
谁能帮我告诉我公式中的问题?
范围1
| Type |
Desc |
| beverage |
coke |
| food |
cookies |
| food |
bread |
| beverage |
beer |
| beverage |
coffee |
| food |
chips |
范围2(理想结果)
| ColA(pre-set) |
ColB(arrayformula in B1) |
ColC |
ColD |
| food |
cookies |
bread |
chips |
| beverage |
coke |
beer |
coffee |
| food |
cookies |
bread |
chips |
| food |
cookies |
bread |
chips |
| beverage |
coke |
beer |
coffee |
| beverage |
coke |
beer |
coffee |
我的存在结果
| ColA(pre-set) |
ColB(arrayformula in B1) |
ColC |
ColD |
| food |
cookies |
bread |
chips |
| beverage |
(cannot generate the output) |
|
|
| food |
|
|
|
| food |
|
|
|
| beverage |
|
|
|
| beverage |
|
|
|
【问题讨论】:
标签:
google-sheets
google-sheets-formula
one-to-many
lookup
array-formulas
【解决方案1】:
假设您的源数据在 A 列和 B 列中,并且预期结果的最大列宽为 4,请尝试:
=arrayformula(if(len(A2:A), vlookup(A2:A, regexreplace({unique(A2:A), split(trim(transpose(query(if((transpose(unique(A2:A))=A2:A)*len(A2:A),B2:B&",",),,50000))), ",")}, ",$", ), {1, 2, 3, 4}, 0),))
看看有没有帮助?
【解决方案2】:
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(QUERY(IF(TRANSPOSE(A12:A17)=A2:A7,B2:B7&"?",),,2^9)),"?")))
大小:95 个字符
说明:
| Range 1 v Range2 -> |
food |
beverage |
food |
food |
beverage |
beverage |
| beverage |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
| food |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
| food |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
| beverage |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
| beverage |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
| food |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
-
将 TRUE 更改为 Range1 描述 (B2:B7) 和分隔符 ?:
=ARRAYFORMULA(IF(TRANSPOSE(A12:A17)=A2:A7,B2:B7&"?",))
| Range 1 v Range2 -> |
food |
beverage |
food |
food |
beverage |
beverage |
| beverage |
|
coke? |
|
|
coke? |
coke? |
| food |
cookies? |
|
cookies? |
cookies? |
|
|
| food |
bread? |
|
bread? |
bread? |
|
|
| beverage |
|
beer? |
|
|
beer? |
beer? |
| beverage |
|
coffee? |
|
|
coffee? |
coffee? |
| food |
chips? |
|
chips? |
chips? |
|
|
-
如果您在每一列中垂直查看,您将获得每个所需标题的所有所需值。此时,我们使用经典查询进行垂直连接:
=ARRAYFORMULA(QUERY(IF(TRANSPOSE(A12:A17)=A2:A7,B2:B7&"?",),,2^9))
| Range 1 v Range2 -> |
food |
beverage |
food |
food |
beverage |
beverage |
| beverage |
cookies? bread? chips? |
coke? beer? coffee? |
cookies? bread? chips? |
cookies? bread? chips? |
coke? beer? coffee? |
coke? beer? coffee? |
| food |
|
|
|
|
|
|
| food |
|
|
|
|
|
|
| beverage |
|
|
|
|
|
|
| beverage |
|
|
|
|
|
|
| food |
|
|
|
|
|
|
-
现在,我们只需按分隔符进行 TRANSPOSE 和 SPLIT:
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(QUERY(IF(TRANSPOSE(A12:A17)=A2:A7,B2:B7&"?",),,2^9)),"?")))
| Range 2 v |
- |
- |
- |
- |
- |
- |
| food |
cookies |
bread |
chips |
|
|
|
| beverage |
coke |
beer |
coffee |
|
|
|
| food |
cookies |
bread |
chips |
|
|
|
| food |
cookies |
bread |
chips |
|
|
|
| beverage |
coke |
beer |
coffee |
|
|
|
| beverage |
coke |
beer |
coffee |
|
|
|