Excel VBA でファイル名に使えない文字を取り除く・チェックする

Excel VBA でファイルの保存を行う時には、ファイル名に使えない文字があります。 たとえば、セルの値やInputBoxからの入力など、ユーザーが関与する可能性のある値をもとにファイル名をつける場合には、チェックしたほうがいいかもしれません。ファイル名はプ...

Excel VBA でファイルの保存を行う時には、ファイル名に使えない文字があります。
たとえば、セルの値やInputBoxからの入力など、ユーザーが関与する可能性のある値をもとにファイル名をつける場合には、チェックしたほうがいいかもしれません。ファイル名はプログラム内で生成するというような場合は気にする必要はないでしょう。

目次

  1. ファイル名に使えない文字
  2. ファイル名に使えない文字を取り除くコード
  3. ファイル名に使えない文字をチェックするコード

ファイル名に使えない文字

ファイル名に使えない文字には大きく二種類あります。
  • 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

名前

101mm,1,Acer Aspire one 752,4,Android,8,Arduino,2,BIOS,1,BOSE,1,Canon,3,DS,1,DVD,1,EF24-105 F4L IS USM,1,Eos 70d,4,EOS Kiss X7,4,Excel,4,GIMP,5,Git,3,Git Bash,3,HD60S,1,Inkscape,3,iPad,3,iPhone,3,Kindle,2,Lightroom,1,Office,2,PC,9,PDF,1,PHP,1,SONY,1,SSD,3,SSH,3,ThinkPad,17,ThinkPad R61e,2,ThinkPad X240,6,ThinkPad X260,10,TOEFL,1,TOEIC,5,VBA,6,VBScript,3,VMware player,1,WEB制作,4,Windows,7,Windows 10,6,Windows 11,1,オーディオ,2,カメラ,10,キャプチャ,1,パソコン周辺機器,2,パソコン部品,4,レビュー,1,レンズ,2,圧縮&解凍,3,英語,8,仮想環境,1,家庭学習,3,撮影機材,6,雑感,3,子育て,5,資格,14,情報処理技術者試験,5,中古,5,電子工作,2,電子書籍,2,動画,3,動画制作,4,変換,1,簿記,2,
ltr
item
勉強とガジェット: Excel VBA でファイル名に使えない文字を取り除く・チェックする
Excel VBA でファイル名に使えない文字を取り除く・チェックする
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKUGd2UBqFp3Yk9Yr86VMg5X0lGMMC8VGnX3m9tq42zEoNCnqSo_mxyCvI9k_4RMT1LlLkGc29BlStHGTP0p4rtJvQohJwc1e3_IOp-ZAMTP-9HFGdGw6IYWWMebA6xI-j26zxN9w5PXd/s400/keyboard-621830_1920.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRKUGd2UBqFp3Yk9Yr86VMg5X0lGMMC8VGnX3m9tq42zEoNCnqSo_mxyCvI9k_4RMT1LlLkGc29BlStHGTP0p4rtJvQohJwc1e3_IOp-ZAMTP-9HFGdGw6IYWWMebA6xI-j26zxN9w5PXd/s72-c/keyboard-621830_1920.jpg
勉強とガジェット
https://tanaka-misaki.blogspot.com/2012/02/excel-vba.html
https://tanaka-misaki.blogspot.com/
http://tanaka-misaki.blogspot.com/
http://tanaka-misaki.blogspot.com/2012/02/excel-vba.html
true
8692194293250221214
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content