読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

ある文字列について、特定文字以外が含まれている場合に取り除く関数

Excel VBA 文字列処理

正規表現を使わない書き方。
例えば「ある文字列について、半角英数以外の文字を削除したい」という場合などに。

'*
'* StrFilter
'* ある文字列について、特定文字以外が含まれている場合に取り除く(もしくは置換する)関数
'*
'* [in]  sStr     対象文字列
'*       sInstead 置換する文字(指定がなければ空、つまり特定文字以外を削除する)
'* [out] 処理後の文字列
'* 
Private Function StrFilter(ByVal sStr As String, Optional ByVal sInstead As String = "")
    
    Dim i As Long
    Dim sFilter As String

    ' フィルタ文字列(含まれてよい文字をすべて記載)
    sFilter = "abcdefghijklmnopqrstuvwxyz0123456789"
    
    ' 対象文字列を1文字ずつ順番に参照
    StrFilter = ""
    For i = 1 To Len(sStr)
        If InStr(sFilter, Mid(sStr, i, 1)) Then
            StrFilter = StrFilter & Mid(sStr, i, 1)
        Else
            StrFilter = StrFilter & sInstead
        End If
    Next
    
End Function

呼び出し元は例えばこんな感じ。

' 「bchoge1」が表示される
Debug.Print StrFilter2("Abc_hoge_1")

' 「*bc*hoge*1」が表示される
Debug.Print StrFilter2("Abc_hoge_1", "*")