VBAでファイルを出力する方法のまとめ
VBAでファイルを出力する方法を紹介します。
このエントリーでは、下記の2通りについて簡単なサンプルを使って説明します。
- セルのデータをファイルに出力する
- 配列データをファイルに出力する
1.セルのデータを出力するサンプル
以下のコードは、セルのA1~A10の内容を「C:\sample.txt」に出力するサンプルです。
Sub Test()
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "UTF-8"
stream.LineSeparator = 10
stream.Open
stream.Position = 0
Dim i As Integer
For i = 1 To 10
stream.WriteText ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value, 1
Next i
stream.SaveToFile "C:\sample.txt", 1
stream.Close
Set stream = Nothing
End Sub
以下、解説です。
まず最初にStreamオブジェクトを生成します。
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
Typeプロパティにモードを設定します。「1」はバイナリモード、「2」はテキストモードを示します。サンプルはテキストの書き込みなので「2」を設定します。
stream.Type = 2
Charsetプロパティに文字コードを設定します。文字コードの設定値については3項で説明します。
stream.Charset = "UTF-8"
LineSeparatorプロパティに改行コードを設定します。改行コードの設定値については4項で説明します。
stream.LineSeparator = 10
OpenメソッドでStreamを開きます。
stream.Open
Positionプロパティに、ストリームの先頭から現在位置までのオフセットを示す値を、バイト単位で設定します。デフォルトは「0」なので設定しなくてもよいかもしれません。
stream.Position = 0
WriteTextメソッドでセルの内容をStreamオブジェクトに入力します。「1」はStreamオブジェクトにテキスト文字列と改行文字を書き込む場合の指示です。改行文字を書き込まない場合は「0」を指定します。
Dim i As Integer
For i = 1 To 10
stream.WriteText ThisWorkbook.Worksheets("Sheet1").Cells(i, 1).Value, 1
Next i
SaveToFileメソッドでファイルに出力します。「1」を指定するとファイルを上書きしません。「2」を指定するとファイルを上書きします。省略時のデフォルト値は「1」です。
stream.SaveToFile "C:\sample.txt", 1
CloseメソッドでStreamオブジェクトを閉じます。
stream.Close
最後にオブジェクトを初期化します。
Set stream = Nothing
2.配列データをファイルに出力する
以下のコードは、配列データを「C:\sample.txt」に出力するサンプルです。
Sub Test()
Dim list(9) As String
Dim i As Integer
For i = 0 To 9
list(i) = i
Next i
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "EUC-JP"
stream.LineSeparator = 10
stream.Open
stream.Position = 0
For i = 0 To 9
stream.WriteText list(i), 1
Next i
stream.SaveToFile "C:\sample.txt", 1
stream.Close
Set stream = Nothing
End Sub
ここでは1項のサンプルとの差分のみ説明します。
まず、配列変数listにデータを設定します。
Dim list(9) As String
Dim i As Integer
For i = 0 To 9
list(i) = i
Next i
WriteTextメソッドで配列変数のデータをStreamオブジェクトに入力します。
For i = 0 To 9
stream.WriteText list(i), 1
Next i
3.文字コードについて
文字コードを指定する場合、以下の値をCharsetプロパティに設定します。
- UTF-8
- Shift_JIS
- EUC-JP
4.改行コードについて
改行コードを指定する場合、以下の値をLineSeparatorプロパティに設定します。
- -1:CRLF
- 10:LF
- 13:CR
5.参考サイト
参考サイトは下記です。ありがとうございました。
2014.4.28
ソースコードに一部誤りがあったので修正しました。