2017-06-17 6 views
2

列F/VENDOR#を取得しようとすると、ベンダー番号のみが入力されます。ベンダー番号が強調表示されます。私の戦略は右から、第3の"_"を見つけて"|"に置き換えてください。パイプの右側に列Dに値が設定されます。Excelでの逆文字列検索

ただし、3つ以上のものがロジックに従っていません。私は間違って何をしていますか?

列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

問題は、見つかった最後の "_"に置換が行われていることです。 3番目のオカレンスを右から左に置き換えるように指定する必要があります。どんな助けもありがとうございます。 – DigitalSea

答えて

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を使用することを検討する必要があります。これは、ステップバイステップ式ではない二重式方法よりも少し複雑です。

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 
関連する問題