我在A1中有一个像这样的单元格
cartoon,high volume,safe,funny
ect ...这些单元格可以包含多少个值没有实际限制
在D列的另一列中,我有最重要的特定字符串,例如
history
science
funny
cartoon
ect ...此列表也可能很长,但目前已达到〜50个值。
我想检查A1中的字符串是否具有D列中的任何值,如果是,请以CSV格式返回D列中与单元格A1中的任何值匹配的前3个值。
因此上述示例的输出应为以下
funny, cartoon
我尝试过的所有内容似乎都无法提供我想要的输出,而只会提供找到的第一个值,而不是前3个匹配项。
有什么想法吗?我也愿意对此运行脚本,这似乎是最好的方法,但是我不确定从哪里开始。
谢谢!
答案 0 :(得分:0)
这是部分入门,可以帮助您入门。您必须自己弄清楚第二部分(“返回列D中存在的前3个值”)。
另一方面,您所描述的内容非常晦涩,我不禁认为这是XY Problem,如果您的问题包含有关<的更多信息,则可以提供更好的解决方案em>这些数据来自哪里以及您尝试使用它的最终结果。
首先,不应将数据分组,就像您正在做的那样,而您的问题恰恰是这样的原因:如果将数据正确地存储在逻辑存储区中,数据将更易于使用,搜索,操作等。 有组织的时尚 ...在Excel中,每个单元格最多只能包含个“数据” 。
对于问题的前半部分,一种将值列表与单个单元格进行比较的方法,如果单元格内存在任何值,则返回True
/ False
,您可以使用具有FIND
,IFERROR
和SUM
的**数组公式。
如果单元格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
中的公式以适当地返回TRUE
或FALSE
。
第二部分,仅返回存在于另一组单元格中的前3个值将比较棘手,除非您编写自定义VBA函数,否则最好将数据分离到单独的单元格中微软之神的意图。
答案 1 :(得分:0)
google-spreadsheet解决方案:
'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), "")
excel-2016 textjoin解决方案:
'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), "")