【问题标题】:Assign Category Values according to wildcards in assignment table根据分配表中的通配符分配类别值
【发布时间】:2021-06-13 10:29:08
【问题描述】:

我无法根据另一个表中的通配符在一个表中分配类别值。 calc 中似乎没有任何函数可以帮助我解决这个问题。

例子:

数据表(类别列中的粗体值由函数插入)

Sentence Category
This is an BMW model Car
This Phillips is for the kitchen Kitchen applience
This is Synology device NA

作业表

Search Term Category
BMW model Car
Phillips Kitchen applience
* NA

所以我想要实现的类似于 VLOOKUP 但搜索词(查找值)和文本必须在相反的表中。

这是否可以仅使用 calc 函数来实现,还是我需要一个宏来实现?

非常感谢现有解决方案的任何帮助、提示或链接!

更新:这些表格位于单独的表格中。

【问题讨论】:

    标签: vlookup openoffice-calc


    【解决方案1】:

    假设“这是一辆 BMW 车型”在单元格 A2 中,而“BMW 车型”在单元格 C2 中。在单元格B2中输入以下公式并向下拖动。

    =IFERROR(INDIRECT("R"&SUMPRODUCT(COUNTIF(A2:A2;"*"&C$2:C$3&"*")*ROW(D$2:D$3))&"C"&COLUMN(D1);0);"NA")
    

    结果:

    Car
    Kitchen applience
    NA
    

    细分:

    • IFERROR(...;"NA") - 如果未找到匹配项,则该行将为 0,导致 INDIRECT 给出错误。
    • INDIRECT("R"&...)&"C"&COLUMN(D1);0) - 使用 R1C1 表示法,获取类别列中单元格的值。
    • SUMPRODUCT(...) - 获取数组计算的结果并将它们组合成一个值。
    • COUNTIF(A2:A2;"*"&C$2:C$3&"*")*ROW(D$2:D$3) - 这是我们公式的核心。如果A2 匹配诸如"*" & C2 & "*" 之类的正则表达式,则将其乘以包含行号的数组。因此,匹配项将 1 乘以搜索词的行号,而其他行号将乘以 0,因此在来自 SUMPRODUCT 的最终总和中被忽略。

    如果一个句子中有多个匹配项是可能的,那么需要修改公式来处理它。

    【讨论】:

    • 嗨,Jim,令人惊叹的公式,我更改了公式,以便 */NA 位于顶部,以便以后可以添加其他类别。我需要将这些表放在单独的工作表上,以便数据与查找表分开,这可能吗?我尝试使用以下版本但不起作用:=IFERROR(INDIRECT("Sheet2.R"&SUMPRODUCT(COUNTIF(A2:A2,"*"&$Sheet2.B$3:B$6&"*")*ROW($Sheet2.C$3:C$6))&"C"&COLUMN($Sheet2.C2),0),"NA")
    • 这适用于另一张纸:=IFERROR(INDIRECT("Sheet2!R"&SUMPRODUCT(COUNTIF(A2:A2;"*"&$Sheet2.B$3:B$6&"*")*ROW($Sheet2.C$3:C$6))&"C"&COLUMN($Sheet2.C4);0);"NA")。我没有仔细检查,但看起来你的不起作用的原因是INDIRECT 需要!。还要删除*/NA 行,因为它不是必需的,而且“***”将匹配所有内容,导致多个匹配,这将失败。确保所有四行(Sheet2 上的 3 到 6)都已填满,否则将失败。
    • 效果很好,感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2018-04-14
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多