excel 查找如果单元格包含查找列中的文本则返回第三个

jaql4c8m  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(166)

我试图查找一个单元格是否包含来自查找表中两列的字符串,并返回一个类别(查找表的第三列)。
单元格示例:

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)),
                "")
        )
    ),
    ""
)<>""),"")
uujelgoq

uujelgoq1#

您可以将COUNTIF与通配符结合使用来计算文本匹配项:

=IF(COUNTIF(A1;"*Gross Profit*")=0;"None";IF(COUNTIF(A1;"*ADJ*")=0;"Actual";"Adjustment"))

**UPDATE:**OP想要关联查找表和数据,所以这里有另一种使用数组公式的方法:

因为公式是数组,所以必须按CTRL+ENTER+SHIFT引入它,否则它将不起作用!

=IFERROR(INDEX(LOOKUPTABLE[Category1],SUMPRODUCT(MAX(COUNTIF(A1,"*" & LOOKUPTABLE[Lookup1] & "*")* COUNTIF(A1,"*" &LOOKUPTABLE[Lookup2]&"*")*ROW(LOOKUPTABLE[Category1])))-1),"None")

无论如何,我已经上传了一个示例到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,依此类推...

相关问题