【问题标题】:Assigning a list of strings to specific values based on their substrings根据子字符串将字符串列表分配给特定值
【发布时间】:2016-05-14 23:41:37
【问题描述】:

我有一个需要分配价格值的退回(因此是独一无二的)产品列表。问题是,虽然有许多相同的产品,但它们都有不同的参考编号。我计划有 4 列:特定产品、特定价格、列表名称、列表价格。

查看这个 3 步示例,了解我是如何完成此操作的: 如您所见,第一列的条目有点乱,但它们包含与列表名称中的产品完全相同的字母。具体价格列是我想输入公式的地方;公式的输出将是匹配产品价格的副本。

第一栏中的所有商品将随机填写,但必须按照第三和第四栏中的指示分配正确的价格。由于每天需要报告数百种产品,因此不能选择手写价格。

我想先在第 1 列和第 3 列之间找到匹配项,然后根据第 3 列匹配项为其分配第 4 列中指示的价格来填写第二列。在 Java 中,这将是一件轻而易举的事,但这不是 Java。使用 excel,您可以通过让系统使用此组合返回布尔值来找到匹配项:

=IF(ISNUMBER(SEARCH(phrase, text)), TRUE, FALSE)

我已经能够将这些短语串在一起,成功地为我提供了这 7 种产品所需的内容,但这是特定于单元格的,我需要编写近千种产品。 =LOOKUP 与我需要的几乎匹配,唯一的问题是我的实际产品名称不是逐字列出的产品名称。有什么建议吗?

这不是它的工作方式,事实上,我希望有人能给我一个新的认识。

【问题讨论】:

标签: excel google-sheets


【解决方案1】:

在 Google 电子表格中,您可以在 C2 中输入以下内容,然后向下复制该列:

=array_constrain(filter(E$2:E, regexmatch(A2, D$2:D)), 1, 1)

这对于 D 列中的每个字符串检查 A2 是否包含该字符串,并从 E 返回相应的条目。包装器array_constrain 表示只应返回第一个匹配项。

希望您没有与 D 列中的多个名称匹配的产品,否则问题会变得模棱两可。

这里有一个更详细的公式,它不会试图用 array_constrain 扫除多个匹配的问题:在这种情况下它会抛出 #REF 错误。

=arrayformula(filter(filter(E$2:E, len(D$2:D)), regexmatch(A2, filter(D$2:D, len(D$2:D)))))

原理是一样的,只是数组不再受约束,D列中的空单元格被过滤掉——这在没有约束的情况下变得必要,因为空字符串包含在任何其他字符串中。

【讨论】:

    【解决方案2】:

    这是在 Excel 中执行此操作的一种方法。使用数组输入公式(通过按住 ctrl+shift 并点击 enter 输入公式:

    =INDEX(LIST_PRICE,MATCH(TRUE,ISNUMBER(SEARCH(PRODUCT_NAMES,A2)),0))
    

    PRODUCT_NAMESLIST_PRICE 是命名范围,指的是图片中 D 列和 E 列中的数据范围。

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多