Home » ADO(ActiveX Data Objects)の使い方 » ADODB.StreamでUTF-8形式のテキストファイルを出力する簡単なExcelマクロ

ADODB.StreamでUTF-8形式のテキストファイルを出力する簡単なExcelマクロ

動作検証バージョン:Windows 11 Home + 64bit Excel バージョン 2402(ビルド17315.20000クイック実行)ベータチャネル + Microsoft ActiveX Data Objects 6.1 Library

「Excel マクロ ADODB.Stream」
といった検索で、このサイト『インストラクターのネタ帳』へのアクセスが、時折あります。

ADODBライブラリに含まれるStremオブジェクトを使った、

Excelマクロについて調べていらした方による検索でしょう。

2024年1月時点で
「Excel マクロ ADODB.Stream」
と検索すると、Excel上のデータをUTF-8のCSVファイルに出力するコードを紹介するページが上位にヒットします。
実務上はそのようなニーズが多いとは思いますが、ADODB.Streamオブジェクトについて理解したいのなら、もっと簡単なサンプルを試してみるほうが良さそうに思えます。

[スポンサードリンク]

ADODB.Streamを使ってUTF-8形式のテキストファイルを出力するサンプルマクロ

ADODBライブラリへの参照設定が行われ、Cドライブ直下にtempフォルダーが存在する環境で、以下のマクロを実行してください。

Sub ADODB_Streamでテキストファイルを出力する()
 Dim strm As ADODB.Stream
 Set strm = New ADODB.Stream

 With strm
  .Charset = "UTF-8"
  .Open
  .WriteText "ABC", adWriteLine
  .WriteText "xyz", adWriteLine
  .SaveToFile "C:\temp\samp_adodb_stream.txt", adSaveCreateOverWrite
  .Close
 End With

 Set strm = Nothing
End Sub

正常に実行できると、以下のような文字列が出力された

ABC
xyz

samp_adodb_stream.txtファイルが、Cドライブtempファルダーに作成されます。

サンプルマクロで行っている処理内容

上記のサンプルマクロでは以下の処理を行っています。

変数宣言と代入

最初に、ADODB.Stream型の変数strmを宣言し、代入を行っています。

Dim strm As ADODB.Stream
Set strm = New ADODB.Stream

上記のマクロは変数を使わなくても書けますが、ADODB.Streamオブジェクトについて理解を深めるにはオブジェクト変数の中身を覗いておくほうがおすすめですから、あえて変数を使っています。

UTF-8の指定

Stream.Charsetプロパティを使ってUTF-8を指定し、

Stream.OpenメソッドでStreamオブジェクトを開きます。

With strm
 .Charset = "UTF-8"
 .Open

オブジェクトブラウザー詳細ペインからわかるとおり、Stream.Openメソッドには複数の引数を指定できますが、

ここでは何も引数を指定していません。

文字列の出力

Streamモブジェクトを開いたところで、Stream.WriteTextメソッドを使って、

文字列を出力します。

 .WriteText "ABC", adWriteLine
 .WriteText "xyz", adWriteLine

このとき第2引数Optionsには、StreamWriteEnum列挙型に定義されている定数adWriteLineを指定することで、

文字列「ABC」「xyz」の末尾に、行区切り文字を書き込んでいます。

ネット上では定数を使わず直値「1」を指定している例も見かけますが、折角定数が用意されているのですから定数を使いましょう。

ファイルの保存と閉じる処理

データの出力が終わったら、Stream.SaveToFileメソッドで保存を行い、

Strem.CloseメソッドでStreamオブジェクトを閉じています。

 .SaveToFile "C:\temp\samp_adodb_stream.txt", adSaveCreateOverWrite
 .Close

SaveToFileメソッドの第2引数Optionsに、SaveOptionsEnum列挙型に定義されている定数adSaveCreateOverWriteを指定することで、

同じ名前のファイルが存在したときに上書きするようにしています。

ステップ実行してローカルウィンドウで変数の中身を確認しましょう

実務で使う場合上記程度のマクロならば変数を使わず、

Sub ADODB_Streamでテキストファイルを出力する()

 With New ADODB.Stream
  .Charset = "UTF-8"
  .Open
  .WriteText "ABC", adWriteLine
  .WriteText "xyz", adWriteLine
  .SaveToFile "C:\temp\samp_adodb_stream.txt", adSaveCreateOverWrite
  .Close
 End With

End Sub

でイイと思いますが、ADODB.Streamに慣れていない場合、拙著『いちばんやさしいExcelVBAの教本』などで多用しているローカルウィンドウで、

変数strmの中身を確認しながらステップ実行することをおすすめします。

最終更新日時:2024-01-30 09:40

[スポンサードリンク]

Home » ADO(ActiveX Data Objects)の使い方 » ADODB.StreamでUTF-8形式のテキストファイルを出力する簡単なExcelマクロ

Copyright © インストラクターのネタ帳 All Rights Reserved.

.