VBAでEUCのファイルをShift-JISに変換する

他の変換は以下のリンクを参照

このページではEUCのファイルをShift-JISに変換する方法を紹介しています。

その他の変換は以下を参照ください。

文字コード変換にはActiveX Data Objectsを利用する

VBAの標準機能では文字コードはUnicode(UTF16-LE)とASCIIの2種類が扱えます。

しかし実際に目にするファイルの文字コードは主にShift-JIS、UTF-8のBOM付き、UTF-8のBOM無し、EUCの4種類になってきます。

そして問題になるのが文字コードの相互変換の方法で、変換が必要な場合にどうやって変換したらいいのか、という点です。

Linuxでは文字コードを変換するnkfコマンドやiconvコマンドがありますが、Windowsの場合は簡単に使えるものがなく、.NetのSystem.Text.Encodingクラス、PerlのEncodeモジュール、PHPのmb_convert_encoding関数、など、どうやって実装しようかなあ、と悩まされる問題があります。ただ、これら.NetもPerlもPHPもプログラミング言語や開発環境のインストールが必要になってくるため、どうしてもハードルが高くなります。

そこでVBAでActiveX Data Objectsを利用しましょう。Excelさえ入っていればインストール不要で文字コード変換が可能です。

なお、上に挙げた.Netは標準でインストール済みのPowerShellでも使えますので、分かる方はそちらでもいいと思います。

事前設定

以下のコードではADODB.Streamを利用するための参照設定が必要です。

VBAの画面で、ツールメニュー→参照設定→Microsoft ActiveX Data Objects x.x Library にチェックを付けます。ここではバージョン6.1ですが、最新バージョンを選択すれば問題ありません。

参照設定を行わない場合はCreateObject関数を利用し、以下のコードの「ADODB.Stream」のオブジェクト変数の初期化の部分を「CreateObject(“ADODB.Stream”)」としてください。

なお、参照設定をした方がわずかではありますが処理速度は速くなります。また、.を入力するとプロパティやメソッドが表示される利点もあります。

EUCからShift-JISに変換

文字コードがEUCのテキストファイルをShift-JISに変換するマクロです。

通常、EUCのファイルはUnixのファイルが多く、その場合の改行コードはLFのため、改行コードもWindows用のCRLFに変換するようにしています。変換が不要な場合は後述の説明を参照してください。

関数の引数にファイルのフルパスを渡して使います。

コードの説明

1行目 第一引数に変換元のEUCファイルのフルパスを指定し、第二引数に書き込み先のShift-JISファイルのフルパスを指定します。第一引数のファイルをそのまま変換したい場合は第二引数に第一引数と同じファイルパスを指定しても構いません。
2、3行目 ActiveX Data Objectsのクラス変数のインスタンス変数を作成しています。EUCファイルを読み込む変数と、Shift-JISに変換する先のファイルへの書き込み変数用です。なお、参照設定をしている場合はADODB.Streamの部分はStreamと書いても問題なく動作します。
4行目 書き込み用のデータを格納する変数です。途中の処理で改行コードの変換を行っています。
6行目 7行目から10行目は読み込むEUCファイルの設定を行います。
7行目 Typeプロパティにはバイナリモード(adTypeBinary)とテキストモード(adTypeText)の2種類があり、ここではテキストモードを指定しています。
8行目 Charsetプロパティには文字セットを指定します。一般的に日本で使うEUCはJIS X 0208のEUC-JPのため、読み込むファイルもEUC-JPに指定しています。
9行目 データストリームを開きます。ここではまだ引数のEUCファイルは参照していません。
10行目 ファイルの内容をストリームに読み込みます。
13行目 読み込んだEUCファイルデータを取得します。
14行目 取得したデータの改行コードのLFをCRLFに置換します。CRLFへの変換が不要な場合は、この行をコメントアウトしてください。
15行目 変換元のEUCファイルの改行コードがLFではなくCRLFだった場合、14行目での改行コード変換を行うとCR+CR+LFになってしまいます。そのCR+CRを、CRに置換します。CRLFへの変換が不要な場合は、この行をコメントアウトしてください。
17行目 18行目から26行目は書き込むShift-JISファイルの設定を行います。
18行目 Typeプロパティにはテキストモードを指定しています。
19行目 書き込むファイルの文字コードであるShift-JISを指定しています。
20行目 データストリームを開きます。ここではまだ引数のShift-JISファイルは指定していません。
23行目 WriteTextメソッドでデータの書き込みを行います。
26行目 コピー後のShift-JISのデータを引数のファイルパスに保存します。
29、30行目 読み込みデータ、書き込みデータをクローズします。

CreateObject関数を利用する場合

CreateObject関数を利用する場合は2行目と3行目を以下のように書き換えます。

以降のコードは変更不要です。

サンプルコード

関連記事

サブコンテンツ

このページの先頭へ