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


当前回答

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

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

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

其他回答

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

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

考虑到@SSilk所做的评论的一部分,我的最终目标真的是让一切都正确的最后一次出现,一个非常简单的公式的替代方法是复制字符串的列(说a),并在副本(说ColumnB)应用查找和替换。以驱动器:\文件夹\子文件夹\文件名.ext为例

这将返回所选择字符(这里\)的最后一个实例(这里是\)之后的剩余内容(这里是Filename.ext),这有时是目标,并且有助于用一个简短的公式找到最后一个这样的字符的位置,例如:

=FIND(B1,A1)-1

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

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

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

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

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

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

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

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

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

然后是单元格公式

=lastsegment(B1,"/")

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

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

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