PR

【VBA】テキストファイルの読み込み・書き込み(UTF-8編)

VBA
記事内に広告が含まれています。

VBAにて、「UTF-8」のテキストファイルの読み込み・書き込みの方法について、ご説明いたします。

なお、「Shift-JIS」のテキストファイルの読み込み・書き込みの方法については、以下の記事をご参照ください。

また、そもそも「Shift-JIS」とか「UTF-8」が何なのかという説明は、以下の記事をご参照ください。

VBAを書籍でコツコツ学習したい方はこちら

「UTF-8」のテキストファイルの読み込み方法

例えば、このようなファイルを読み込むとします。

サンプルプログラム

UTF-8の文字コードで書かれたデータを読み込むときは、ADO(ActiveX Data Objects)という仕組みを使います。

'①読み込んだテキストファイルの格納用変数
Dim buf As String

'②ADOを使えるようにする
With CreateObject("ADODB.Stream")
    '③読み取るファイルのエンコードを指定
    .Charset = "UTF-8"
    
    '④ファイルを開く準備をする
    .Open

    '⑤ファイルのフルパスを指定して、ファイルを開く
    .LoadFromFile "C:\work\サンプル_UTF-8.txt"
    
    '⑥ファイルを最後まで読み込むまで、処理を繰り返す
    Do Until .EOS
        '⑦ファイルを1行ずつ読み込む
        buf = .ReadText(-2)
        
        '⑧読み込んだデータ(変数buf)を使う処理を記述する
        Debug.Print buf
    Loop
    
    '⑨ファイルを閉じる
    .Close

End With

解説

  • 読み込んだテキストファイルの内容を格納するために、String型の変数を準備しておきます。

  • CreateObject(“ADODB.Stream”)で、ADOを使えるようにします。
    また、以降の処理でADOを使うために、Withで囲みます。
    ※Withの中のステートメントに「.」(ピリオド)を忘れないようにご注意ください。

  • 読み取るファイルのエンコードを指定します。
    もちろん、UTF-8以外の文字コードを指定して読み込むことも可能です。

  • テキストファイルを開く準備をします。Line Inputステートメントのような、ファイル名の指定は不要です。

  • ファイルのフルパスを指定したテキストファイルのデータを、Streamオブジェクトに読み込みます

  • ファイルを1行ずつ読み込んだ後、ループ処理の終了条件として、ファイルを最後まで読んだかを判定するためにEOSプロパティを使います。

  • ReadTextメソッドで、Streamオブジェクトからデータを1行ずつ読み込んで、変数bufに格納します。
    なお、末尾の(-2)は、1行ずつ読み込むという意味です。
    (-2)を省略すると、ファイル全体を一気に読み込んで変数bufに格納します。この場合、1行ずつ読み込むループ処理は不要です。なお、ファイルサイズが大きい場合に(-2)を省略すると、読み込みに時間がかかりますのでご注意ください。

  • 先ほどの⑦で指定した変数を使って、読み込んだデータ(変数buf)の内容を使う処理を記述します。

  • 最後にお作法として、開いたStreamオブジェクトを閉じます

「UTF-8」のテキストファイルの書き込み方法

サンプルプログラム

'①ADOを使えるようにする
With CreateObject("ADODB.Stream")
    '②書き込むファイルのエンコードを指定
    .Charset = "UTF-8"

    '③ファイルを開く準備をする
    .Open

    '④文字列をファイルに書き込む
    .WriteText "ぎゃぎゅぎょ", 1
    .WriteText "じゃじゅじょ"	'←第2引数を省略したため、改行しない
    .WriteText "ぢゃぢゅぢょ", 1

    '⑤ファイルのフルパスを指定して、ファイルを保存する
    .SaveToFile "c:\work\サンプル_UTF-8書き込み.txt", 2

    '⑥ファイルを閉じる
    .Close
End With

解説

①~③は、読み取りの場合と同様です。

  • CreateObject(“ADODB.Stream”)で、ADOを使えるようにします。

  • 書き込むファイルのエンコードを指定します。

  • テキストファイルを開く準備をします。

  • WriteTextメソッドで、文字列をファイルに書き込みます
    第2引数に「1」を指定すると、書き込むデータの後ろに改行コードを書き込みます。
    第2引数を省略するか「0」を指定すると、末尾に改行コードを書き込みません。

  • SaveToFileメソッドで、ファイルを保存します。
    【構文】
    SaveToFile ファイルのフルパス ,保存オプション
    【説明】
    第2引数の保存オプションは、以下の通りです。
    1:指定ファイルが存在しない場合は新規作成
      指定ファイルが存在する場合はエラー
    2:指定ファイルが存在しない場合は新規作成
      指定ファイルが存在する場合は上書き(元データは消える)

  • 最後にお作法として、開いたStreamオブジェクトを閉じます

実行結果

上記のサンプルプログラムを実行すると、こんなテキストファイルが作られます。

VBAを書籍でコツコツ学習したい方はこちら
VBAをガッツリ学べるスクールはこちら

コメント

タイトルとURLをコピーしました