VBATips

特定文字以前を削除する処理をパーツ化する【Split関数応用】【ExcelVBA】

特定文字以前の文字列を削除したい

フォルダパスとファイル名を分けたいファイル名と拡張子を分けると同様に、
特定文字以前の文字を削除したい場合があります。パーツ化することで簡単にコピペで使えます。
特定文字移行を削除したい場合はこちらの記事参照。

特定文字以前の文字列を削除するサンプルコード

Split関数を使用し、特定文字前と特定文字後に分けます。

'■特定文字以前を削除する(特定文字前のみ返す)サブプロシージャ
Public Function Call_SpecificCharacterAfterDelete(str As String, SPWord As String)
    Dim arr As Variant
    
    arr = Split(str, SPWord)
    
    Call_SpecificCharacterAfterDelete = arr(UBound(arr))
    
End Function

実際の使い方

Public Sub sample()

    '■通常の使い方
    Debug.Print Call_SpecificCharacterAfterDelete("10,000円以上送料無料!", "円")    '以上送料無料!
    '■特定文字が複数の場合も正しく表示
    Debug.Print Call_SpecificCharacterAfterDelete("C:\Users\temp", "\Users")         '\temp
    '■特定文字が複数回出現の場合は最初の段階で表示
    Debug.Print Call_SpecificCharacterAfterDelete("C:\Users\temp", "\")              'temp
    '■特定文字が存在しなければ、全てを返す
    Debug.Print Call_SpecificCharacterAfterDelete("123456", "aaa")                   '123456
   
End Sub

注意点

  • Split関数で特定文字で分割して配列に格納しています。
  • 「10,000円以上送料無料!」を「円」で区切るなら以下となり、円の文字は消去されます。
    arr(0) = 10,000
    arr(1) = 以上送料無料!
  • arr(Ubound(arr))で配列の要素の最大部分を反映します。
  • もしarr(0)以外を取得(複数個に分割されたすべてが必要)の場合は以下のようにすれば取得可能です。
        For i = LBound(arr) + 1 To UBound(arr)
            If str = "" Then
                str = arr(i)
            Else
                str = str & SPWord & arr(i)
            End If
        Next i
        Call_SpecificCharacterAfterDelete = str
    

関連記事

文字列を分割して配列に値を格納する【Split関数】
定数配列を使用する(Split/Arrayで代用)【ExcelVBA】
特定文字以降を削除する処理をパーツ化する【Split関数応用】【ExcelVBA】

コメント

タイトルとURLをコピーしました