市町村様式を「市町村名.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 SubinvalidCharsで使えない文字を定義しています。
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を返します。
あるかないかで処理を変える場合はこちらを使います。
この記事の処理のように、シート名を自動で設定する場合に入れておくといいでしょう。










コメントを残す