是否有一种有效的方法来识别字符串中使用基函数的最后一个字符/字符串匹配?也就是说,不是字符串的最后一个字符/字符串,而是字符/字符串在字符串中最后出现的位置。搜索和查找都从左到右工作,所以我不知道如何应用没有冗长的递归算法。现在看来,这种解决方案已经过时了。


当前回答

在新版本的Excel(2013年及以上)中,闪光填充可能是一个简单而快速的解决方案:在Excel中使用闪光填充 .

其他回答

如何创建一个自定义函数并在您的公式中使用它?VBA有一个内置的函数,InStrRev,它所做的正是您正在寻找的。

把这个放到一个新模块中:

Function RSearch(str As String, find As String)
    RSearch = InStrRev(str, find)
End Function

你的函数看起来像这样(假设原始字符串在B1中):

=LEFT(B1,RSearch(B1,"\"))

对于A1中的字符串和B1中的子字符串,使用:

= XMATCH (B1,中期(A1,序列(LEN (A1)), LEN (B1)),, 1)

从内到外,MID(A1,SEQUENCE(LEN(A1)),LEN(B1))将字符串A1拆分为一个动态的子字符串数组,每个子字符串的长度为B1。为了找到子字符串B1最后出现的位置,我们使用XMATCH并将其Search_mode参数设置为-1。

在新版本的Excel(2013年及以上)中,闪光填充可能是一个简单而快速的解决方案:在Excel中使用闪光填充 .

在VBA中一个简单的方法是:

YourText = "c:\excel\text.txt"
xString = Mid(YourText, 2 + Len(YourText) - InStr(StrReverse(YourText), "\" ))

很晚了,但是一个简单的解决方案是使用VBA创建一个自定义函数。

将功能添加到工作簿、工作表或VBA模块中的VBA

Function LastSegment(S, C)
    LastSegment = Right(S, Len(S) - InStrRev(S, C))
End Function

然后是单元格公式

=lastsegment(B1,"/")

在单元格中,在单元格B1中要搜索的字符串将用单元格B1中以最后一个“/”结尾的文本填充该单元格。 没有长度限制,没有晦涩的公式。 我认为唯一的缺点是需要启用宏的工作簿。

任何用户VBA函数都可以以这种方式调用,以向单元格公式返回值,包括作为内置Excel函数的参数。

如果你打算大量使用这个函数,你会想要检查字符不在字符串中,字符串为空等情况。