使用MS Excel公式(不是VBA),我想找到在字符串中找到的特定单词的实际位置/位置。如果可能的话,我想使用“搜索和/或替换”与“查找或替换”功能,因为文本字符串不是绝对的大写字母。
单元格A1(文本字符串):“狗跑到房子后面,然后跳下篱笆。”
单元格B1 :(目标关键字):Ran
单元格C1(单词的位置):3
提前感谢你的帮助。
以下内容将为您提供包含子字符串的第一个单词的单词索引:
=SEARCH(B1,A1)-LEN(SUBSTITUTE(LEFT(A1,SEARCH(B1,A1))," ",""))+1
如果可以访问,则FILTERXML
可以通过抛出一些内容来检索它MATCH
,这将返回完全匹配的单词索引:
=MATCH(B1,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"),0)
注意:第二个公式需要通过CtrlShiftEnter
按照@BigBen,如果您的字符串包含特殊字符(如逗号等),则可能会遇到麻烦。在这种情况下,您可能需要添加更多的嵌套SUBSTITUTE
公式来解决该情况。
如果需要多个匹配项,并且希望将其串联到单个单元格中,则需要访问该TEXTJOIN
函数。要获取包含子字符串的单词的所有单词索引:
=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH(B1,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"))),ROW(A1:INDEX(A:A,LEN(A1)-LEN(SUBSTITUTE(A1," ","")))),""))
要获取所有保留查找值的完全匹配项:
=TEXTJOIN(", ",TRUE,IF(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")=B1,ROW(A1:INDEX(A:A,LEN(A1)-LEN(SUBSTITUTE(A1," ","")))),""))
注意:两个公式都需要通过输入CtrlShiftEnter
是的 这个问题很重要。
@BigBen,不太完全=)
好吧,如果那句话是
"The dog ran, then sped, behind the house and then jumped the fence."
?哈哈touché!@BigBen,这将需要
SUBSTITUTES
再抛出=)^^^确实是^^^。这就是为什么当OP尝试将其应用于手头的实际数据时,一个简单的示例会爆炸的原因。您可以想象后续问题:-)