「Excel マクロ ADODB.Stream」
といった検索で、このサイト『インストラクターのネタ帳』へのアクセスが、時折あります。
ADODBライブラリに含まれるStremオブジェクトを使った、
Excelマクロについて調べていらした方による検索でしょう。
2024年1月時点で
「Excel マクロ ADODB.Stream」
と検索すると、Excel上のデータをUTF-8のCSVファイルに出力するコードを紹介するページが上位にヒットします。
実務上はそのようなニーズが多いとは思いますが、ADODB.Streamオブジェクトについて理解したいのなら、もっと簡単なサンプルを試してみるほうが良さそうに思えます。
ADODB.Streamを使ってUTF-8形式のテキストファイルを出力するサンプルマクロ
ADODBライブラリへの参照設定が行われ、Cドライブ直下にtempフォルダーが存在する環境で、以下のマクロを実行してください。
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
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
End Sub
.Charset = "UTF-8"
.Open
.WriteText "ABC", adWriteLine
.WriteText "xyz", adWriteLine
.SaveToFile "C:\temp\samp_adodb_stream.txt", adSaveCreateOverWrite
.Close
End With
でイイと思いますが、ADODB.Streamに慣れていない場合、拙著『いちばんやさしいExcelVBAの教本』などで多用しているローカルウィンドウで、
変数strmの中身を確認しながらステップ実行することをおすすめします。
最終更新日時:2024-01-30 09:40
- Newer:Excelで小数を分数に変換したい-TEXT関数
- Older:VBAのDate関数のデータ型
Home » ADO(ActiveX Data Objects)の使い方 » ADODB.StreamでUTF-8形式のテキストファイルを出力する簡単なExcelマクロ