分かりやすく、使いやすく。

UTF-8など文字コードを指定してテキストファイルに書き込む方法

スポンサーリンク

VBA で文字コードを UTF-8 でファイルに書き込むには、 ADODB.Stream を使用します。ADODB.Stream では改行コードを指定して出力することもできます。

尚、Shift-JIS で出力する場合は Open ステートメントを使用した方がシンプルに記述できます。Open ステートを使用したサンプルコードはテキストファイルに書き込む方法(Shift-JIS)を参照してください。

  1. 上書きで出力する場合
  2. 追記で出力する場合


上書きで出力する場合

上書きで出力する場合のサンプルコードは次の通りです。

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 
スポンサーリンク