我试图查找一个单元格是否包含来自查找表中两列的字符串,并返回一个类别(查找表的第三列)。
单元格示例:
abc 2021 Gross Profit abcd
ab 2022 Gross Profit ADJ abcde
ab ADJ 2021 Gross Profit abcde
cd 2023 Payroll asdf
dage Sales 2021 bce
2020 Payroll Revision abcdef
输出应为;分别为:
| 细胞柱|输出列|
| --------------|--------------|
| abc 2021年毛利润abcd|实际|
| ab 2022年毛利润调整后abcde|调整|
| ab 2021年调整后毛利润abcde|调整|
| cd 2023工资单asdf|工资单|
| dage销售2021 bce|销售|
| 2020年工资修订abcdef|薪资修订|
查阅表示例[名称:lookup_table]:
- 编辑:实际查找表有数百行,这是一个示例子集-查找表应保持Excel表,以便在将新记录添加到lookup_table时自动调整参考范围 *
查看1 | 查看2 | 分类1 |
---|---|---|
毛利润 | 实际 | |
毛利润 | 调整的 | 调整 |
销售 | 销售 | |
齿轮 | 销货成本 | |
工资单 | 工资单 | |
工资单 | 修订 | 薪资调整 |
我尝试使用以下公式返回类别,但它返回的是一个两值数组,并且无法检索正确的类别:
=IFERROR(FILTER(IFERROR(
LET(cell,M3,
lookup1_range,lookup_table[Lookup1],
lookup2_range,lookup_table[Lookup2],
category_range,lookup_table[Category1],
contains_both,IF(AND(ISNUMBER(FIND(lookup1_range,cell)), ISNUMBER(FIND(lookup2_range,cell))), 1, 0),
contains_lookup1,IF(ISNUMBER(FIND(lookup1_range,cell)),1,0),
matches_lookup1,IF(contains_lookup1,MATCH(lookup1_range,lookup1_range,0),""),
matches_both,IF(contains_both,IF(ISNUMBER(FIND(lookup2_range,INDEX(lookup1_range,matches_lookup1))),matches_lookup1,""),""),
matches,IF(matches_both<>"",matches_both,matches_lookup1),
lookup_value,IF(matches_both<>"", INDEX(category_range, matches_both, 1), IF(matches_lookup1<>"", INDEX(category_range, matches_lookup1, 1), "")),
IF(lookup_value<>"",
lookup_value,
IF(matches_lookup1<>"",
IF(ISNUMBER(FIND(lookup2_range,cell)),
INDEX(category_range, matches_lookup1, 1),
INDEX(category_range, matches_lookup1, 1)),
"")
)
),
""
),IFERROR(
LET(cell,M3,
lookup1_range,lookup_table[Lookup1],
lookup2_range,lookup_table[Lookup2],
category_range,lookup_table[Category1],
contains_both,IF(AND(ISNUMBER(FIND(lookup1_range,cell)), ISNUMBER(FIND(lookup2_range,cell))), 1, 0),
contains_lookup1,IF(ISNUMBER(FIND(lookup1_range,cell)),1,0),
matches_lookup1,IF(contains_lookup1,MATCH(lookup1_range,lookup1_range,0),""),
matches_both,IF(contains_both,IF(ISNUMBER(FIND(lookup2_range,INDEX(lookup1_range,matches_lookup1))),matches_lookup1,""),""),
matches,IF(matches_both<>"",matches_both,matches_lookup1),
lookup_value,IF(matches_both<>"", INDEX(category_range, matches_both, 1), IF(matches_lookup1<>"", INDEX(category_range, matches_lookup1, 1), "")),
IF(lookup_value<>"",
lookup_value,
IF(matches_lookup1<>"",
IF(ISNUMBER(FIND(lookup2_range,cell)),
INDEX(category_range, matches_lookup1, 1),
INDEX(category_range, matches_lookup1, 1)),
"")
)
),
""
)<>""),"")
1条答案
按热度按时间uujelgoq1#
您可以将COUNTIF与通配符结合使用来计算文本匹配项:
**UPDATE:**OP想要关联查找表和数据,所以这里有另一种使用数组公式的方法:
因为公式是数组,所以必须按CTRL+ENTER+SHIFT引入它,否则它将不起作用!
无论如何,我已经上传了一个示例到Gdrive,以防你想检查:
https://docs.google.com/spreadsheets/d/1eJjNzKBw6nLsOkcMhfAK5NyObSgYrUc8/edit?usp=share_link&ouid=114417674018837700466&rtpof=true&sd=true
注意这里有一个
-1
,因为公式la返回绝对行号。因为lookuptable上的数据从第2行开始,那么你必须加上-1。如果数据从第5行开始,而不是-1,你需要-4,依此类推...