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))

enter image description here

enter image description here

+0

问题是,在找到的最后一个“_”处进行替换。我需要指定从右到左替换第三个匹配项。任何帮助表示赞赏。 – DigitalSea

问题是列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