● Excelのファイル名に使えない文字(記号)をチェックするVBAプログラムの例
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
※関連Webページ
「ファイル名」ではなくて「シート名」で使えない文字についてはこちらをご参考にしてください。
『Excel のシート名に使えない文字について再考2017』
VABプログラムで何らかのExcelファイルを参照する・読み込むときや、逆に書き出したりする場合、ファイル名に使ってはいけない記号が混ざってしまうとエラーで止まってしまうので、そうならないように例えば以下のようなプログラム処理で、事前チェックをします。
(以下のプログラムは、VBEditorの画面で標準モジュールを新規挿入して、そのまま全部コピペすれば使えます。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
' ' Option Explicit '################################################################################################## 'アクティブなシートのA1セルの値にファイル名に使えない文字が含まれているかいないかのチェック事例。 '使えない記号が含まれていればエラーメッセージが出て、イミディエイトにTrueが表示されます。 '使えない記号が含まれていなければ、エラーは出ずに、イミディエイトにFalseが表示されます。 '################################################################################################## Sub test01() Dim TestStr01 As Variant 'アクティブなシートのA1セルの値を取得 TestStr01 = ActiveWorkbook.ActiveSheet.Range("A1") 'その値を、FnameNgStrChk01()関数にて、 'ファイル名に使えない記号が混ざっていないかをチェックします。 '結果はイミディエイトウィンドウに出ます。 '使えない記号が含まれていなけエラーは出ずにFalseが表示されます。 '使えない記号が含まれていればエラーが出てTrueが表示されます。 Debug.Print FnameNgStrChk01(TestStr01) End Sub '############################################################################# 'ファイル名に使えない文字のチェック用の関数。読み込み時、書き出し時、兼用。 '指定例:Debug.Print FnameNgStrChk01("ああ[あああ") ' 「 [ 」が含まれている旨のエラーが出て、 ' True(=ヒットした!含まれてた!という意味です)が返されます。 '使えない記号が含まれていればエラーが出てTrueが返ります。 '使えない記号が含まれていなけエラーは出ずにFalseが返ります。 '############################################################################# Option Explicit Function FnameNgStrChk01(ByVal str01 As Variant) As Boolean Dim ChkChr01 As Variant '変数「ChkChr01」に「""」を代入して初期化 ChkChr01 = "" '● 送られてきた値(str01の値)が空だったときのチェック '(一応、それぞれのパターンを書き出してみました。) If IsNull(str01) = True Then '送られてきた値がNullだったときはFalse(何もヒットしなかったよ!という意味です)を返して 'プログラムの実行を終わる。(本プログラムはAccessにも流用できると思いますが、 'NullのチェックはAccessの場合は必須です。) FnameNgStrChk01 = False Exit Function ElseIf str01 = "" Then '送られてきた値が空文字("")だったときもFalseを返してプログラムの実行を終わる。 FnameNgStrChk01 = False Exit Function Else 'それ以外の場合、つまり、チェックにひっかからなければ次へ End If '● ファイル名に使えない文字のチェック '(ヒットしたら、ヒットした文字を変数「ChkChr01」に代入します。 ' エラーメッセージを出すときに、どの文字がダメなのかを ' 変数「ChkChr01」を使ってユーザーに知らせたいためです。 ' なお、以下の「\」は半角の「¥」のことです。) '★以下、Excel用。Excelは以下の書き方でも、記号の半角と全角の区別がつく。 ' 'Windowsの仕様によるもの(書き出し時に特に使います。読み込み時はOSがこの文字を含んだファイル名を作らせてくれないため、そもそもそのファイルを吸い込むことはありませんから、[と]だけのチェックになります。) ' If InStr(str01, "\") > 0 Then ChkChr01 = "\" '送られてきた文字列に「\」が含まれていたら、ChkChr01に「\」を代入します。以下同じような意味です。 ' If InStr(str01, "/") > 0 Then ChkChr01 = "/" ' If InStr(str01, """") > 0 Then ChkChr01 = """" ' If InStr(str01, "<") > 0 Then ChkChr01 = "<" ' If InStr(str01, ">") > 0 Then ChkChr01 = ">" ' If InStr(str01, "?") > 0 Then ChkChr01 = "?" ' If InStr(str01, ":") > 0 Then ChkChr01 = ":" ' If InStr(str01, "|") > 0 Then ChkChr01 = "|" ' If InStr(str01, "*") > 0 Then ChkChr01 = "*" 'Excelの仕様によるもの(書き出し時、読み込み時、両方使います) ' If InStr(str01, "[") > 0 Then ChkChr01 = "[" ' If InStr(str01, "]") > 0 Then ChkChr01 = "]" '★以下、Access用。 'Accessは「Option Compare Database」に依存するせいか、 'この書き方じゃないと '記号の全角と半角の区別ができない。 'もちろんExcelでも兼用できる。 'というか、こっちのコードの方が、 'AccessとExcelの両方で使えてめんどくさくなくていい。 'Windowsの仕様によるもの(書き出し時に特に使います。読み込み時はOSがこの文字を含んだファイル名を作らせてくれないため、そもそもそのファイルを吸い込むことはありませんから、[と]だけのチェックになります。) If InStr(1, str01, "\", vbBinaryCompare) > 0 Then ChkChr01 = "\" '送られてきた文字列に「\」が含まれていたら、ChkChr01に「\」を代入します。以下同じような意味です。 If InStr(1, str01, "/", vbBinaryCompare) > 0 Then ChkChr01 = "/" If InStr(1, str01, """", vbBinaryCompare) > 0 Then ChkChr01 = """" If InStr(1, str01, "<", vbBinaryCompare) > 0 Then ChkChr01 = "<" If InStr(1, str01, ">", vbBinaryCompare) > 0 Then ChkChr01 = ">" If InStr(1, str01, "?", vbBinaryCompare) > 0 Then ChkChr01 = "?" If InStr(1, str01, ":", vbBinaryCompare) > 0 Then ChkChr01 = ":" If InStr(1, str01, "|", vbBinaryCompare) > 0 Then ChkChr01 = "|" If InStr(1, str01, "*", vbBinaryCompare) > 0 Then ChkChr01 = "*" 'Excelの仕様によるもの(書き出し時、読み込み時、両方使います) If InStr(1, str01, "[", vbBinaryCompare) > 0 Then ChkChr01 = "[" If InStr(1, str01, "]", vbBinaryCompare) > 0 Then ChkChr01 = "]" '● 最終処理 If ChkChr01 = "" Then 'ChkChr01の値が空のままなら=何もヒットしなかったのなら、= ' =ファイル名に使えない文字が何も含まれていなければ、 'Falseだけ返して何もしない。 FnameNgStrChk01 = False Else 'ChkChr01の値が空じゃないなら=ファイル名に使えない文字が含まれていれば、 'エラーメッセージで注意喚起して、Trueを返す。 MsgBox "ファイル名チェックエラー:Excelのファイル名には使えない記号、「 " & ChkChr01 & " 」が含まれています。" FnameNgStrChk01 = True End If End Function '################################################################ 'おまけ:フルパスからファイル名だけを抜粋する関数 'str02 にフルパスを指定します。 '例:Debug.Print Trimfname01("C:\folder01\smple01.xls") '「smple01.xls」が抜粋されて返ってきます。 '################################################################ Function Trimfname01(ByVal str02 As String) As String Trimfname01 = Right(str02, Len(str02) - InStrRev(str02, "\", -1, vbBinaryCompare)) End Function ' ' |
※関連Webページ
「ファイル名」ではなくて「シート名」で使えない文字についてはこちらをご参考にしてください。
『Excel のシート名に使えない文字について再考2017』
- 投稿タグ
- ExcelVBA, Excelの独学, Excel連携VBA, パソコンでの自動化, ビジネスパソコンの基礎, 自動化