如何在Excel中反向搜索?

时间:2017-12-28 09:19:35

标签: excel string vba text excel-formula

我在工作表中有一个文字,如:

  

女孩非常漂亮

我想要一个公式从右到左执行搜索单词“very”,如果找到则将其提取到工作表的其他区域。

注意:进行反向搜索的目的是因为我想在我的工作簿中实现它,这需要反向搜索。

至少,请告诉我如何恢复这样的文字:

  

美丽非常是女孩

然后我可以进行正常搜索。我不知道VBA所以请给出一些公式。

1 个答案:

答案 0 :(得分:0)

VBA用于反转文本中的单词的函数:

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)

......将返回:

  

美丽非常是女孩

将自定义VBA函数添加到工作簿:

  • 将要添加的功能的代码复制到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功能相同。

内置VBA功能:

StrReverse syntax

我意识到它与我写的StrReverse函数不同(上图),但我怀疑它也可以解决OP的原始查询......

尽管如此,我真的感到惊讶的是VBA甚至允许自定义函数与内置函数同名!

如何混淆VBA: StrReverse(StrReverse)