Excel VBA でファイルの保存を行う時には、ファイル名に使えない文字があります。 たとえば、セルの値やInputBoxからの入力など、ユーザーが関与する可能性のある値をもとにファイル名をつける場合には、チェックしたほうがいいかもしれません。ファイル名はプ...
Excel VBA でファイルの保存を行う時には、ファイル名に使えない文字があります。
たとえば、セルの値やInputBoxからの入力など、ユーザーが関与する可能性のある値をもとにファイル名をつける場合には、チェックしたほうがいいかもしれません。ファイル名はプログラム内で生成するというような場合は気にする必要はないでしょう。
目次
ファイル名に使えない文字
ファイル名に使えない文字には大きく二種類あります。- Windows の都合で使えない文字
- Excel の都合で使えない文字
なお、半角の円記号は日本語以外の環境(フォント?)ではバックスラッシュとして表示されます。このブログ記事でも、お使いの環境によって円記号で表示されたりバックスラッシュで表示されたりすると思います。そのため、上の表は画像にしました。
また、バックスラッシュで表示されている場合でも、以下で紹介するVBAコードをVBEに貼り付けると半角円記号になります。
これらの文字が含まれるファイル名でブックを保存しようとすると、メッセージで警告されます。
Excel VBAで下記のようなコードを実行して、WindowsおよびExcelで使えない文字を使ってブックを保存しようとすると、下記のようなメッセージが表示されます。「C:\Temp」をご自身の環境に存在するフォルダに変更して実行してみてください。
Sub saveWithNGcharTest() Dim newBook As Workbook Set newBook = Workbooks.Add 'OK 'newBook.SaveAs "C:\Temp\hoge.xlsx" 'NG newBook.SaveAs "C:\Temp\<.xlsx" newBook.SaveAs "C:\Temp\[.xlsx" newBook.SaveAs "C:\Temp\\.xlsx" End Sub
また、デスクトップ等で、Windowsの都合でファイル名に使えない文字をファイル名に入力すると、下記のメッセージが表示されます。
ファイル名に使えない文字を取り除くコード
下記のプログラムで、対象の文字を取り除くことができます。非常に原始的な方法ですが。。。全部取り除くと空文字列になってしまうかもしれない場合は二番目の引数(オプショナル)に置換用の文字を指定することができます。
Public Function replaceNGchar(ByVal sourceStr As String, _ Optional ByVal replaceChar As String = "") As String Dim tempStr As String tempStr = sourceStr tempStr = Replace(tempStr, "\", replaceChar) tempStr = Replace(tempStr, "/", replaceChar) tempStr = Replace(tempStr, ":", replaceChar) tempStr = Replace(tempStr, "*", replaceChar) tempStr = Replace(tempStr, "?", replaceChar) tempStr = Replace(tempStr, """", replaceChar) tempStr = Replace(tempStr, "<", replaceChar) tempStr = Replace(tempStr, ">", replaceChar) tempStr = Replace(tempStr, "|", replaceChar) tempStr = Replace(tempStr, "[", replaceChar) tempStr = Replace(tempStr, "]", replaceChar) replaceNGchar = tempStr End Function
ファイル名に使えない文字をチェックするコード
下記のプログラムで、対象の文字を取り除くことができます。こちらも非常に原始的な方法ですが。。。戻り値Trueが使用不可文字あり、戻り値Falseは使用不可文字なしを示します。
Public Function existNGchar(ByVal sourceStr As String) As Boolean Dim tempStr As String tempStr = sourceStr existNGchar = True If InStr(tempStr, "\") > 0 Then Exit Function If InStr(tempStr, "/") > 0 Then Exit Function If InStr(tempStr, ":") > 0 Then Exit Function If InStr(tempStr, "*") > 0 Then Exit Function If InStr(tempStr, "?") > 0 Then Exit Function If InStr(tempStr, """") > 0 Then Exit Function If InStr(tempStr, "<") > 0 Then Exit Function If InStr(tempStr, ">") > 0 Then Exit Function If InStr(tempStr, "|") > 0 Then Exit Function If InStr(tempStr, "[") > 0 Then Exit Function If InStr(tempStr, "]") > 0 Then Exit Function existNGchar = False End Function
COMMENTS