2021.04.13Web
マクロで環境依存文字を含むファイルや文字化けしたファイルを開く方法
WEBコミュニケーション事業部の安田です。
マクロでExcelファイルを開く際に、そのExcelのファイル名に環境依存文字が入っていたり、ファイル名が文字化けしているとてエラーで処理が止まってしまいます。処理するExcelファイル数が多いとファイル名の確認・修正は非効率ですし、環境依存文字に関しては見た目で気づかないケースもあります。マクロで解決できないか?と探していたのですがなかなか見つからず・・・。しかし、完全に自動ではありませんが対応できましたので紹介したいと思います。
今回の環境
これから説明する内容は以下の環境で再現しています。
※デスクトップに「コラム用」フォルダがあります。
※環境依存文字はアンダーバーの環境依存文字です。
※ソースコードを利用されたい方はご連絡ください。
エラーの原因
エラーの原因は、文字化けや機種依存文字が使われているファイル名をVBAが認識できないことです。下記の画像の上部赤枠はフォルダ内の文字化け、環境依存文字が含まれたファイル名です。下部赤枠で、VBAで環境依存文字、文字化けが[ ? ] (ハテナマーク)になっているのがわかります。この状態でマクロでExcelを開こうとするとエラーになります。
まずはファイル名を変更する処理を試してみた
ファイル名でエラーになっているのでファイル名を変更すれば解決するのでは?と思い処理を追加してみました。ファイル名を変更する「Name」ステートメントとファイルをコピーする「FileCopy」ステートメントの2つで試してみましたがファイル名が原因でエラーとなり処理できませんでした。
次にFileSystemObjectオブジェクトを試してみた
VBAのメソッドでは対応できないようなので外部ライブラリを使ってみればよいのでは?と思いファイル操作ができる「FileSystemObject」オブジェクトを使ってみました。このオブジェクトには、Nameステートメントのようなファイル名を変更するメソッドがないので、「Copy」メソッドで対応したところ、ファイル名を変更することができました。流れとしては、「Copy」メソッドで文字化けしているファイルをコピーしてから元のファイルを「Delete」メソッドで削除します。
このやり方は開くExcelファイルすべての名称を変更するため、元のファイル名がわからなくなります。それでよければ問題ありませんが確認する必要があるときなどは不便です。
最後に運用できるように調整
弊社の業務では、なるべくファイル名をそのままにした方が楽なのでもう少し考えました。
エラーになっているファイル名のハテナマーク部分を「Replace」メソッドで置換すればもとのファイル名に近くなると思ったので試してみたのですがなりませんでした。詳しく調べてみると見た目はハテナマークでも文字コードが違うことが判明しました。文字コードから判断したところ理想の形になりました。
しかし、文字コードを自動で判断して置換はできないのでエラーが発生したら文字コードを調べて設定していく必要があります。