パソコン悪戦苦闘記録

VBAでテキストファイル操作~ADOのStreamオブジェクト

 ExcelマクロWordマクロでテキストファイルを操作をするには、少し前までは、Openステートメントを使っていました。
  Open myTxt For Input As #1
というVBAコードです。

 しかし、最近では、使用する文字コードUTF-8に変わってきたために、Openステートメントでは文字化けが起きるようになりました。

 そこで、UTF-8文字コードによって作成されたテキストファイルであっても処理が可能な方法がとられるようになりました。
 その方法とは、ADO(ActiveX Data Objects)の Stream オブジェクト(ADODB.Stream)の利用です。

 この関係の詳細は、
  こちらの記事をご覧ください。

 この方法であれば、
  Shift-Jis文字コードで作成されたテキストファイル
  UTF-8文字コードで作成されたテキストファイル
そのいずれであっても、処理が可能です。





 自分自身の備忘のために、そのVBAコードをこのブログページに掲載しておきます。こうしておくと、いつでも参照できます。
 なお、掲載コードは一つの例で、書き方は、他にもいろいろあり得ると思います。

 VBAでは、事前バインディング方式と、実行時バインディング方式とがありますが、以下のVBAコードは事前バインディング方式で書いています。
 事前バインディング方式では、事前準備として、Library参照設定が必要です。
 VBE(VBエディタ)の[ツール]‐[参照設定]で、
   「Microsoft ActiveX Data Objects 6.1 Library」
の項目に、チェックを付けておきます。

 以下は、Excelマクロの、VBAサンプルコードです。
 Sample【1】が、テキストの読み込み(インプット)処理
 Sample【2】が、テキストの書き込み(アウトプット)処理
です。



Sub Sample【1】_TxtInput()

'事前バインディング方式
'【参照設定】Microsoft ActiveX Data Objects 6.1 Library

Dim myAdoStr As ADODB.Stream
Dim myFile As String
Dim myStr As String

myFile = "D:¥goosyun.txt"
Set myAdoStr = New ADODB.Stream

With myAdoStr
  .Type = adTypeText   'テキスト形式
  .Charset = "UTF-8"  '文字コードの指定
  .Open        'ADODB.Stream を開く
  .LoadFromFile myFile   'ファイルの内容を読み込む
  myStr = .ReadText  '読み込んだ内容を取得
  .Close        'ADODB.Streamを閉じる
End With

'読み込んだテキストファイルの内容をA1セルに代入
  Cells(1, 1).Value = myStr
End Sub



Sub Sample【2】_TxtOutput()

'事前バインディング方式
'【参照設定】Microsoft ActiveX Data Objects 6.1 Library

Dim myAdoStr As ADODB.Stream
Dim i As Integer

'ADODB.Streamオブジェクトを生成
  Set myAdoStr = New ADODB.Stream

With myAdoStr
  .Charset = "UTF-8"  '文字コードを指定
  .Open      'ADODB.Streamを開く
'開いたADODB.Streamに内容を保管する
'adWriteLineは改行する時に入れる
  For i = 1 To 5
    .WriteText Cells(i, 1).Value, _
    adWriteLine
  Next
  .SaveToFile "D:¥goosyun.txt", 2
        'セルの内容をファイルに保存
  .Close    'ADODB.Streamを閉じる
End With

End Sub


Wordマクロの教科書


それでは、また次の記事で
goosyun


《2022年9月24日追記》
 本ページに掲載のコードのうち、Sample【2】(アウトプット)のコードの改良版を書きました。
 複数列のデータを、CSVに保存できます。
   こちらの記事をご覧ください。
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事