Open myTxt For Input As #1
というVBAコードです。
しかし、最近では、使用する文字コードがUTF-8に変わってきたために、Openステートメントでは文字化けが起きるようになりました。
そこで、UTF-8文字コードによって作成されたテキストファイルであっても処理が可能な方法がとられるようになりました。
その方法とは、ADO(ActiveX Data Objects)の Stream オブジェクト(ADODB.Stream)の利用です。
この関係の詳細は、
⇒ こちらの記事をご覧ください。
この方法であれば、
Shift-Jis文字コードで作成されたテキストファイル
UTF-8文字コードで作成されたテキストファイル
そのいずれであっても、処理が可能です。
![](https://blogimg.goo.ne.jp/user_image/65/36/d71791a0ba290fca19bcc2a3a2eecd38.jpg)
自分自身の備忘のために、その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に保存できます。
⇒ こちらの記事をご覧ください。