つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

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

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

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

 そこで、UTF-8文字コードによって作成されたテキストファイルであっても処理が可能な方法がとられるようになりました。
 その方法とは、ADOActiveX 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に保存できます。
   こちらの記事をご覧ください。