VBAのADO(ActiveX Data Objects)を用いてテキストファイルを読み込んでみました。
ADOとはデータベース、テキストファイル、Excelなどのデータソースにアクセスするためのオブジェクトです。
使わないでも読めますが、使わないでLine Inputなどでテキストファイルを読み込むとUTF-8が文字化けします。
そのため、開くタイミングで文字コード指定できるADOを使いました。
VBAでADOの参照設定をする
ADOはVBAの初期設定では参照できるようになっていないため、参照設定をします。
Excelの開発タブからVBE(Visual Basic Editor)を開きツール>参照設定をクリックします。
下記を入れてください。
- Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Objects 6.1 LibraryとはMicrosoftが開発したデータアクセスのためのコンポーネントです。
バージョンが6.1から上がっていればそれで構いません。
ADOでテキストファイルの内容をコンソールに書き出す
Sub writeOutTxt()
# 変数宣言
Dim ado
Dim tmpStr as String
Dim tmpFile as String: tmpFile = "C:¥tmp.txt"
# ADOのオブジェクトを作成
Set ado = createObject("ADODB.stream")
# テキストファイルを読み込んで書き出す
With ado
.Charset = "utf-8"
.Open
.LoadFromFile("C:¥test.txt")
tmpStr = .readtext
.savetofile tmpFile, 2
End With
End Sub
上記で完了ですが、簡単に説明します。
変数宣言の箇所は一般的な話であるためこの記事では飛ばします。
変数宣言したら、宣言した変数adoをActiveXのstreamオブジェクトにします。
Set ado = createObject("ADODB.stream")
そして用意したtest.txtファイルの内容をtmp.txtファイルに書き込みます。
With ado
.Charset = "utf-8"
.Open
.LoadFromFile("C:¥test.txt")
tmpStr = .readtext
.savetofile tmpFile, 2
End With
withステートメントは問題ないと思いますが簡単に言うと、オブジェクト名の記載の省略をしてプログラムの可読性をあげるために使います。
WithからEnd Withまでの.から始まるものは全てado.と認識してください。
Charsetはstreamオブジェクトでデータを扱う際の文字コードを指定します。
Openはstreamオブジェクトを開きテキストデータを操作できる状態にします。
LoadFromFileは引数に指定したファイルのデータを読み込みます。
readtextはstreamオブジェクトのテキストデータを返します。
この場合先にLoadFromFileで読み込んだテキストデータを返しています。
savetofileはstreamオブジェクトの内容をファイルに保存します。
2はsavetofileのSaveOptionsで上書き指定です。
ファイルがなければ作り、もしあればそのファイルに上書きします。
1を指定するとファイルがあるとエラーを起こします。
End Subで終わりです。

