我在工作表中有一个文字,如:
女孩非常漂亮
我想要一个公式从右到左执行搜索单词“very”,如果找到则将其提取到工作表的其他区域。
注意:进行反向搜索的目的是因为我想在我的工作簿中实现它,这需要反向搜索。
至少,请告诉我如何恢复这样的文字:
美丽非常是女孩
然后我可以进行正常搜索。我不知道VBA所以请给出一些公式。
答案 0 :(得分:0)
Public Function StrReverse(strIn As String, Optional Delimiter As String = " ") As String
'Reverse the words in 'StrIn', split on a "Space" unless 'Delimiter' is specified
Do While InStrRev(strIn, Delimiter) <> 0
StrReverse = StrReverse & Delimiter & Right(strIn, Len(strIn) - InStrRev(strIn, Delimiter))
strIn = Trim(Left(strIn, InStrRev(strIn, Delimiter) - 1))
Loop
StrReverse = Trim(StrReverse & Delimiter & strIn)
If Left(StrReverse, 1) = Delimiter Then StrReverse = Right(StrReverse, Len(StrReverse) - 1)
End Function
例如,如果单元格A1包含:
女孩非常漂亮
...然后你可以进入另一个单元格:
=StrReverse(A1)
......将返回:
美丽非常是女孩
将要添加的功能的代码复制到Excel(从上面)。
在Excel工作簿中,按 Alt + F11 打开VBA编辑器(VBE)。
按 Alt + I M 插入新模块。
按 Ctrl + V 粘贴代码。
按 Alt + F C 返回Excel。
编辑#1 :
在上面添加了可选的分隔符(默认为“”空格)。
另外,FindReverse
(下面),它允许在工作表上使用VBA(鲜为人知的)InStrRev
函数。
Public Function FindReverse(StringCheck As String, StringMatch As String, _
Optional Start As Long = -1) As Long
'Returns the position number of the last occurrence of 'Stringmatch"
'within StringCheck', Optionally specify the position number from the
'end to begin the search. (-1 = Begin at the end)
FindReverse = InStrRev(StringCheck, StringMatch, Start)
End Function
编辑#2 :
LOL @ Myself ...我总是告诉别人不要尝试重新创建已经内置到MS Office中的功能,而且我似乎在不知不觉中做了同样的事情 - 甚至给它与现有的VBA功能相同。
我意识到它与我写的StrReverse
函数不同(上图),但我怀疑它也可以解决OP的原始查询......
尽管如此,我真的感到惊讶的是VBA甚至允许自定义函数与内置函数同名!