我在列中有文本单元格,我有一个单词列表,我需要使用不带vba的公式在单词列表中获取文本单元格的第一个和第二个匹配。
答案 0 :(得分:1)
如果您的文本单元格在A2中开头,则:
First Match B2: =IFERROR(MID($A2,AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A)),FIND(" ",$A2&" ",AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A)))-AGGREGATE(15,6,SEARCH(LIST,$A2),COLUMNS($A:A))),"")
并填写一个单元格以获得第二场比赛。然后根据需要填写。
编辑: OP增加了一项额外的要求,即排除单词中的单词,例如,如果单词为also
,则不要找Calso
;并且也不要返回标点符号。
虽然公式很麻烦,但这可以通过处理
- 用space
替换所有标点符号
- 在句子的开头和结尾添加空格
- 在LIST
中的每个单词的开头和结尾添加空格
- 调整公式以不返回额外空间。
通过修改定义的名称LIST
以及使用公式的定义名称来执行标点符号替换以及空格前缀和后缀,可以最简单地完成上述操作。
鉴于上述示例,我们重新定义LIST
LIST refers to: =" " & Sheet1!$F$2:$F$6 & " "
并且,如果选择第2行中的某个单元格,我们会定义theSentence
theSentence refers to: =" " & TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!$A10,","," "),"'"," "),"."," "),"!"," "))& " "
该特定定义将删除逗号,撇号,句号和感叹号。如果您需要删除其他标点符号,则可以嵌套更多SUBSTITUTE
'
我们在B2中的公式中进行了一些更改:
B2: =IFERROR(MID(theSentence,1+AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A)),FIND(" ",theSentence,1+AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A)))-AGGREGATE(15,6,SEARCH(LIST,theSentence),COLUMNS($A:A))-1),"")
答案 1 :(得分:1)