尝试获取列F / VENDOR#以仅填充供应商编号。供应商编号突出显示。我的策略来自右侧,找到第三个Artist
并将其替换为"_"
。然后在D列填充管道的任何右侧。
然而,具有三个以上"|"
的那些不遵循逻辑。我做错了什么?
D栏公式"_"
F栏/供应商#formula =IF(ISERROR(FIND("_",C2)),"",RIGHT(C2,LEN(C2)-FIND("|",SUBSTITUTE(C2,"_","|",LEN(C2)-LEN(SUBSTITUTE(C2,"_","",3))))))
答案 0 :(得分: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
函数中的索引。如果字符串中有-2
个未知数,则需要使用相对偏移量(_
是第3个来自右侧)。
如果您可以使用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