UTF-8など文字コードを指定してテキストファイルに書き込む方法
スポンサーリンク
VBA で文字コードを UTF-8 でファイルに書き込むには、 ADODB.Stream を使用します。ADODB.Stream では改行コードを指定して出力することもできます。
尚、Shift-JIS で出力する場合は Open ステートメントを使用した方がシンプルに記述できます。Open ステートを使用したサンプルコードはテキストファイルに書き込む方法(Shift-JIS)を参照してください。
上書きで出力する場合
上書きで出力する場合のサンプルコードは次の通りです。
VBA(実行可能なサンプルコード) | |
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 | ' 上書き書込みのサンプル。 ' 元のファイルの内容はクリアされる。 Sub WriteTest1() ' エラーの場合、WriteErrorラベルに飛ばす。 On Error GoTo WriteError ' 書込むファイルのパスを設定 Dim strOutputFilePath As String strOutputFilePath = ".\Test.txt" ' 上書きモードでファイルをオープン Dim outStream As Object Set outStream = CreateObject("ADODB.Stream") ' 文字コードを設定(UTF-8、Shift_JIS、ISO-2022-JP、EUC-JP) ' ※ISO-2022-JP は JIS。 outStream.Charset = "UTF-8" ' 改行コードを設定(-1:CRLF、10:LF、CR:13) outStream.LineSeparator = -1 ' オープン outStream.Open ' 文字列出力 ' 最後の引数が 1 :文字列の末尾に改行コードを付ける。 ' 最後の引数が 0 :文字列の末尾に改行コードを付けない。 outStream.WriteText "出力する文字列1行目", 1 outStream.WriteText "出力する文字列2行目", 1 outStream.WriteText "出力する文字列3行目", 1 ' 保存 ' 最後の引数が 1 :ファイルが存在する場合エラー。無い場合、新規作成。 ' 最後の引数が 2 :ファイルが存在する場合上書き。無い場合、新規作成。 outStream.SaveToFile strOutputFilePath, 2 outStream.Close Exit Sub WriteError: outStream.Close MsgBox "書込みに失敗しました。" End Sub |
追記で出力する場合
ADODB.Stream ではファイルの出力モードに追記はないので、一度ファイルの内容を読み込んで、その内容の後ろに文字列を出力する必要があります。サンプルコードは次の通りです。
VBA(実行可能なサンプルコード) | |
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 | ' 追記書込みのサンプル。 ' 元のファイルの内容はクリアされず、 ' 元の内容の最後に追記する形で出力する。 Sub WriteTest2() ' エラーの場合、WriteErrorラベルに飛ばす。 On Error GoTo WriteError ' 書込むファイルのパスを設定 Dim strOutputFilePath As String strOutputFilePath = ".\Test.txt" ' 上書きモードでファイルをオープン Dim outStream As Object Set outStream = CreateObject("ADODB.Stream") ' 文字コードを設定(UTF-8、Shift_JIS、ISO-2022-JP、EUC-JP) ' ※ISO-2022-JP は JIS。 outStream.Charset = "UTF-8" ' 改行コードを設定(-1:CRLF、10:LF、CR:13) outStream.LineSeparator = -1 ' オープン outStream.Open ' ★元のファイルの内容を読み込み、出力位置を末尾にする。 outStream.LoadFromFile strOutputFilePath outStream.Position = outStream.Size ' 文字列出力 ' 最後の引数が 1 :文字列の末尾に改行コードを付ける。 ' 最後の引数が 0 :文字列の末尾に改行コードを付けない。 outStream.WriteText "出力する文字列1行目", 1 outStream.WriteText "出力する文字列2行目", 1 outStream.WriteText "出力する文字列3行目", 1 ' 保存 ' 最後の引数が 1 :ファイルが存在する場合エラー。無い場合、新規作成。 ' 最後の引数が 2 :ファイルが存在する場合上書き。無い場合、新規作成。 outStream.SaveToFile strOutputFilePath, 2 outStream.Close Exit Sub WriteError: outStream.Close MsgBox "書込みに失敗しました。" End Sub |
スポンサーリンク