如果一个单元格包含特定文本的多个实例,则提取在该单元格中找到的指定文本的前3个

时间:2018-08-31 22:42:31

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

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

cartoon,high volume,safe,funny

ect ...这些单元格可以包含多少个值没有实际限制

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

history
science
funny
cartoon

ect ...此列表也可能很长,但目前已达到〜50个值。

我想检查A1中的字符串是否具有D列中的任何值,如果是,请以CSV格式返回D列中与单元格A1中的任何值匹配的前3个值。

因此上述示例的输出应为以下

funny, cartoon

我尝试过的所有内容似乎都无法提供我想要的输出,而只会提供找到的第一个值,而不是前3个匹配项。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

首先,不应将数据分组,就像您正在做的那样,而您的问题恰恰是这样的原因:如果将数据正确地存储在逻辑存储区中,数据将更易于使用,搜索,操作等。 有组织的时尚 ...在Excel中,每个单元格最多只能包含个“数据”


对于问题的前半部分,一种将值列表与单个单元格进行比较的方法,如果单元格内存在任何值,则返回True / False,您可以使用具有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

img

第二部分,仅返回存在于另一组单元格中的前3个值将比较棘手,除非您编写自定义VBA函数,否则最好将数据分离到单独的单元格中微软之神的意图。


更多信息:

答案 1 :(得分:0)

解决方案:

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

enter image description here

解决方案:

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