【问题标题】:If a cell contains mulitple instances of specific text, then extract top 3 of the specified text found in the cell如果单元格包含特定文本的多个实例,则提取单元格中找到的指定文本的前 3 个
【发布时间】:2018-08-31 22:42:30
【问题描述】:

我在 A1 中有一个看起来像这样的单元格

cartoon,high volume,safe,funny

等...这些单元格可以包含多少值并没有真正的限制

在 D 列的另一个中,我有最重要的特定字符串,例如

history
science
funny
cartoon

等...此列表也可能很长,但目前最大为约 50 个值。

我想检查 A1 中的字符串是否具有 D 列中的任何值,如果是,则返回 D 列中存在的与单元格 A1 中的任何值匹配的前 3 个值作为 csv。

所以上面例子的输出应该如下

funny, cartoon

我尝试过的一切似乎都没有给我我正在寻找的输出,但只会提供它找到的第一个值,而不是前 3 个匹配项。

有什么想法吗?我也愿意为此运行脚本,这似乎是最好的方法,但我不确定从哪里开始。

谢谢!

【问题讨论】:

  • “前 3 名匹配”是什么意思?你试过什么?您想要 Excel 还是表格的解决方案?
  • Excel 或 GoogleSheets?解决方案必须适用于两者还是只有一个必须适用?
  • 以 CSV 格式返回 - 这需要脚本 AFAIK。

标签: excel google-apps-script google-sheets excel-formula


【解决方案1】:

解决方案:

'for a CSV of all matches
=arrayformula(TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(E2:E8, A2)), E2:E8, "")))
'for a CSV of the first three matches
=replace(arrayformula(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, ""))), find("|", substitute(arrayformula(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, ""))), ",", "|", 3)&"|||"), len(A3), "")

解决方案:

'for a CSV of all matches input as array formula with ctrl+shift+enter
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(E2:E8, A2)), E2:E8, ""))
'for a CSV of the first three matches input as array formula with ctrl+shift+enter
=replace(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, "")), find("|", substitute(TEXTJOIN(", ", TRUE, IF(isnumber(search(E3:E9, A3)), E3:E9, "")), ",", "|", 3)&"|||"), len(A3), "")

【讨论】:

  • 这就像一个魅力,非常感谢! QQ,在谷歌表格公式中,你为什么要搜索“|”?
  • 它与 SUBSTITUTE 一起使用以截断前 3 个。
  • 哦,明白了。说得通。非常感谢您的帮助!
【解决方案2】:

这是帮助您入门的部分答案。您必须自己弄清楚第二部分(“返回 D 列中存在的前 3 个值”)。

另一方面,您所描述的内容非常晦涩,我不禁认为这是XY Problem,如果您的问题包含有关的更多信息,则可以提供更好的解决方案这些数据来自哪里以及您尝试使用它的最终结果

首先,数据不应该像您正在做的那样分组到单元格中,而您的问题正是原因:如果数据正确存储在逻辑和有条理的时尚...在 Excel 中,每个单元格的数据不超过一个“片段”


对于问题的前半部分,一种将值列表与单个单元格进行比较的方法,如果单元格中存在任何值,则返回 True/False,您可以使用 **array公式* 与 FINDIFERRORSUM

如果单元格A1 包含cartoon,high volume,safe,funny 并且单元格D1:D4 包含history,science,funny,cartoon,那么您可以使用这个数组公式,例如B1

=SUM(IFERROR(FIND($D$1:$D$4,A1),0))>0

要将此函数设为数组公式,您需要按Ctrl+Shift+Enter 输入公式(而不是直接按 Enter。)

这将返回TRUE,因为该值存在。您可以在A1 下方的单元格中包含更多字符串集,然后复制或“填写”B1 中的公式以根据需要返回TRUEFALSE

第二部分,仅返回存在于另一组单元格中的前 3 个值将有点棘手,除非您编写自定义 VBA 函数,或者更好的是,将数据分成单独的单元格 微软众神打算。


更多信息:

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2013-01-06
    • 2023-01-27
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多