VBAでファイルを出力する方法のまとめ

VBAでファイルを出力する方法のまとめ

Posted at April 3,2014 1:33 AM
Tag:[Excel, 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
ソースコードに一部誤りがあったので修正しました。

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)