【VBA】ファイル名やシート名を決めるとき、使えない文字を消したりするコード

市町村様式を「市町村名.xlsx」としたり、セルの文字列を取得してシート名を自動で設定することがあります。

?や*などの使えない文字があるときは別の命名方法にしたり、いっそ消してしまいます。

使用不可文字があったら消す

Function DeleteInvalidChars(fileName As String) As String

    Dim invalidChars As String
    Dim i As Integer

    invalidChars = "/€?*:[]"

    For i = 1 To Len(invalidChars)
        If InStr(fileName, Mid(invalidChars, i, 1)) > 0 Then
            fileName = Replace(fileName, Mid(invalidChars, i, 1), "")
        End If
    Next i

    DeleteInvalidChars = fileName
    
End Function

Sub test()
    Dim fileName As String
    fileName = "test??"
    MsgBox DeleteInvalidChars(fileName)
End Sub

invalidCharsで使えない文字を定義しています。

Ifの条件式が多少複雑ですが、まずMidの使い方を整理します。

Mid("あいうえお", 1, 1)

' あ(1番目の文字から1文字)

Mid("あいうえお", 2, 1)

'い(2番目の文字から1文字)

Mid("あいうえお", 2, 2)

'いう(2番目の文字から2文字)

こんな感じです。

サンプルコードのMidの第2引数がiなので、invalidCharsの1文字を参照して、次のループでは1つ右の1文字を参照しています。

InStr(fileName, invalidCharsの1文字)

んで、InStrでその1文字があるかどうかを判別しています。

invalidCharsは7文字あるので、7回ループしますね。

InStrは頻出ですが、Midは覚える必要ありませんので、雰囲気を覚えつつ、都度調べましょう。

使えない文字があるかどうかを確認する

Function CheckInvalidChars(fileName As String) As Boolean

    Dim invalidChars As String
    Dim i As Integer

    invalidChars = "/€?*:[]"

    For i = 1 To Len(invalidChars)
        If InStr(fileName, Mid(invalidChars, i, 1)) > 0 Then
            CheckInvalidChars = False
            Exit Function
        End If
    Next i

    CheckInvalidChars = True
    
End Function

Sub test()
    Dim fileName As String
    fileName = "test??"
    If CheckInvalidChars(fileName) Then
        MsgBox "使用不可文字は含まれていません。"
    Else
        MsgBox "使用不可文字が含まれています。"
    End If
End Sub

今度は使えない文字がある場合はTrue、ない場合はFalseを返します。

あるかないかで処理を変える場合はこちらを使います。

この記事の処理のように、シート名を自動で設定する場合に入れておくといいでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA