【问题标题】:Excel: Partial matching Range 1 against each cell string individually in Range 2, then returning value in columnExcel:部分匹配范围 1 与范围 2 中的每个单元格字符串,然后在列中返回值
【发布时间】:2021-10-05 14:30:41
【问题描述】:

如果你能帮助我,我爱你。

假设我有一堆 URL:

| Range 1                |
|------------------------|
| www.orange.com         |
| www.orange.example.com |
| www.example.red.com    |
| www.example.com/blue   |

我也有这样一张桌子:

| Range 2 | Range 3 |
|---------|---------|
| orange  |       1 |
| red     |       2 |
| blue    |       3 |
| green   |       4 |
| pink    |       5 |

我如何编写一个公式来下拉 URL 列表,使其看起来像:

| Range 1                | Results |
|------------------------|---------|
| www.orange.com         |       1 |
| www.orange.example.com |       1 |
| www.example.red.com    |       2 |
| www.example.com/blue   |       3 |

基本上每次都进行部分匹配,然后将结果返回到右侧。

让我发疯,你是我唯一的希望!

【问题讨论】:

  • 嗯,首先很高兴知道您正在使用哪个软件。谷歌表格 Excel。
  • 分享您的工作表副本
  • @K.Dᴀᴠɪs 道歉,谷歌表格。

标签: excel google-sheets excel-formula google-sheets-formula spreadsheet


【解决方案1】:

谷歌表格。

=ArrayFormula(LOOKUP(1,0/COUNTIF(A1,"*"&C$1:C$5&"*"),D$1:D$5))

微软办公室

=LOOKUP(1,0/FIND(C$1:C$5,A1),D$1:D$5)

【讨论】:

  • 不错!出于好奇,为什么查找值是 1?我本来以为 0
  • @Euler 丢脸的继子最后一个小于等于1的值
【解决方案2】:

这仅在字符串不包含列表中的多个部分字符串时才有效,但您可以使用部分匹配的行号 INDEX 查找数组。

例如:

=IFERROR(
INDEX($B$1:$B$5, CONCAT(IFERROR(
FIND($A$1:$A$5,D5)+ROW($A$1:$A$5)-FIND($A$1:$A$5,D5),
""))),"")

在这里,我们首先使用FIND 生成一个向量来测试查找数组中所有值的位置与字符串。这个向量中除了一个元素之外的所有元素都是#VALUE!。剩下的元素是正在测试的字符串中与查找数组中的值相同的第一个字符的位置。

接下来,我们通过添加另一个相同大小的连续行号向量,然后减去原始数量,将此值转换为查找数组中的行号。请注意,#VALUE! 返回的算术仍然会产生#VALUE!。另请注意,上述答案中生成的行号向量(...ROW($A$1:$A$5))必须从第一行开始;例如,如果您的查找数组从第 3 行开始,您需要执行类似 ...ROW($A$3:$A$7)-2 的操作才能获得所需的结果。

最后,我们用空字符串替换任何#VALUE! 返回并连接整个向量。结果是查找数组的行号,其中包含完整字符串中的部分字符串。此行号用于INDEX 以实现所需的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2022-10-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多