Excel中的反向字符串搜索
问题描述:
试图让F/VENDOR#列仅填充供应商编号。供应商编号被突出显示。我的策略是从右侧找到第三个"_"
,并用"|"
替代它。然后,管道的任何权利都填充在列D中。Excel中的反向字符串搜索
但是,具有三个以上"_"
的那些不符合逻辑。我究竟做错了什么?
列d公式=IF(ISERROR(FIND("_",C2)),"",RIGHT(C2,LEN(C2)-FIND("|",SUBSTITUTE(C2,"_","|",LEN(C2)-LEN(SUBSTITUTE(C2,"_","",3))))))
列F /供应商#公式=IF(ISERROR(LEFT(D2,FIND("_",D2)-1)),"",LEFT(D2,FIND("_",D2)-1))
答
问题是列d公式中 - 你必须:
...LEN(C2)-LEN(SUBSTITUTE(C2,"_","",3))...
它应该是:
...LEN(C2)-LEN(SUBSTITUTE(C2,"_",""))-2...
给予用于柱d完整公式:
=IF(ISERROR(FIND("_",A17)),"",RIGHT(A17,LEN(A17)-FIND("|",SUBSTITUTE(A17,"_","|",LEN(A17)-LEN(SUBSTITUTE(A17,"_",""))-2))))
原因是因为这个公式的一部分被真正被用来计算在另一个SUBSTITUTE
函数索引。如果字符串中存在未知数字_
s,则需要使用相对偏移量(-2
是的第二种,右边第三个来自)。
如果你可以使用VBA,那么你应该看看使用正则表达式的UDF,因为我觉得这比双重公式方法稍微简单一些,这并不是轻而易举就可以完成。 UDF可能仅仅是这样的:
Option Explicit
Function GetVendorNumber(rng As Range) As String
Dim objRegex As Object
Dim objMatches As Object
GetVendorNumber = ""
Set objRegex = CreateObject("VBScript.RegExp")
With objRegex
.Pattern = "\D+_(\d+)_.+"
Set objMatches = .Execute(rng.Text)
If objMatches.Count = 1 Then
GetVendorNumber = objMatches(0).SubMatches(0)
End If
End With
End Function
问题是,在找到的最后一个“_”处进行替换。我需要指定从右到左替换第三个匹配项。任何帮助表示赞赏。 – DigitalSea