是否有一种有效的方法来识别字符串中使用基函数的最后一个字符/字符串匹配?也就是说,不是字符串的最后一个字符/字符串,而是字符/字符串在字符串中最后出现的位置。搜索和查找都从左到右工作,所以我不知道如何应用没有冗长的递归算法。现在看来,这种解决方案已经过时了。
当前回答
单元格A1 =查找/the/position/的/最后一个斜杠
简单的方法是反转文本,然后找到第一个斜杠。现在你可以得到全文的长度减去这个数字。
像这样:
=LEN(A1)-FIND(“/”,REVERSETEXT(A1),1)+1
返回最后一个/的位置21
其他回答
对于A1中的字符串和B1中的子字符串,使用:
= XMATCH (B1,中期(A1,序列(LEN (A1)), LEN (B1)),, 1)
从内到外,MID(A1,SEQUENCE(LEN(A1)),LEN(B1))将字符串A1拆分为一个动态的子字符串数组,每个子字符串的长度为B1。为了找到子字符串B1最后出现的位置,我们使用XMATCH并将其Search_mode参数设置为-1。
考虑到@SSilk所做的评论的一部分,我的最终目标真的是让一切都正确的最后一次出现,一个非常简单的公式的替代方法是复制字符串的列(说a),并在副本(说ColumnB)应用查找和替换。以驱动器:\文件夹\子文件夹\文件名.ext为例
这将返回所选择字符(这里\)的最后一个实例(这里是\)之后的剩余内容(这里是Filename.ext),这有时是目标,并且有助于用一个简短的公式找到最后一个这样的字符的位置,例如:
=FIND(B1,A1)-1
刚想出这个解决方案,不需要VBA;
找到我的例子中最后出现的“_”;
=IFERROR(FIND(CHAR(1);SUBSTITUTE(A1;"_";CHAR(1);LEN(A1)-LEN(SUBSTITUTE(A1;"_";"")));0)
由内而外解释;
SUBSTITUTE(A1;"_";"") => replace "_" by spaces
LEN( *above* ) => count the chars
LEN(A1)- *above* => indicates amount of chars replaced (= occurrences of "_")
SUBSTITUTE(A1;"_";CHAR(1); *above* ) => replace the Nth occurence of "_" by CHAR(1) (Nth = amount of chars replaced = the last one)
FIND(CHAR(1); *above* ) => Find the CHAR(1), being the last (replaced) occurance of "_" in our case
IFERROR( *above* ;"0") => in case no chars were found, return "0"
希望这对你有帮助。
如果您只查找字符“~”的最后一个实例的位置,那么 = len(替代(字符串 ,"~",""))+ 1
我确信有一个版本将与字符串的最后一个实例一起工作,但我必须回去工作。
在VBA中一个简单的方法是:
YourText = "c:\excel\text.txt"
xString = Mid(YourText, 2 + Len(YourText) - InStr(StrReverse(YourText), "\" ))
推荐文章
- Excel VBA -退出循环
- 在SQL Server Management Studio中保存带有标题的结果
- Excel:匹配字符串中的最后一个字符/字符串
- .text, .value和.value2之间的区别是什么?
- 从c#读取Excel文件
- 检查单元格是否包含子字符串
- 在Excel中从公式返回空单元格
- 熊猫:在excel文件中查找表格列表
- 循环通过文件夹中的文件使用VBA?
- 将公式应用到Excel中的整个列的快捷方式
- 在现有Excel值中添加前导0 /0到一定长度
- 如何从一个VBA函数返回一个结果
- 如何在Excel中创建包含双引号的字符串或公式?
- 使用Pandas对同一工作簿的多个工作表进行pd.read_excel()
- 在Linux中用命令行将xlsx转换为csv