在Excel中反向stringsearch
试图让F / VENDOR#列仅填充供应商编号。 供应商编号被突出显示。 我的策略是从右侧find第三个"_"
,并用"|"
代替它。 。 然后任何正确的pipe道填充在D列。
然而,三个以上的"_"
不符合逻辑。 我究竟做错了什么?
列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
函数中的索引。 如果string中有未知数的_
,则需要使用相对偏移量( -2
是右边的第三种 )。
如果你可以使用VBA,那么你应该看看使用正则expression式的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