【Excel VBA】FSOでテキストファイル(.txt)を新規作成し、書き込む方法

VBAマクロで処理した結果を、Excel形式ではなく、他のシステムと連携しやすいシンプルなテキストファイル(.txt)として出力したい、という場面は頻繁にあります。

FileSystemObject (FSO)を使えば、テキストファイルの新規作成から、内容の書き込みまでを、オブジェクト指向で分かりやすく行うことができます。

この記事では、FSOの**CreateTextFileメソッドと、書き込みを行うTextStreamオブジェクト**の基本的な使い方を解説します。


目次

【準備】参照設定

FSOを快適に利用するため、VBAエディタでツール > 参照設定を開き、**「Microsoft Scripting Runtime」**にチェックを入れておくことを推奨します。


完成したVBAコード

以下は、マクロブックと同じフォルダに「Log.txt」という名前のテキストファイルを新規作成し、2行の文字列を書き込むVBAコードです。

'参照設定: Microsoft Scripting Runtime
Sub CreateAndWriteTextFile()

    ' 変数を宣言します
    Dim fso As New FileSystemObject
    Dim textStreamObj As TextStream
    Dim filePath As String
    
    '--- 設定 ---
    ' 作成するテキストファイルのパス
    filePath = ThisWorkbook.Path & "\Log.txt"
    '--- 設定ここまで ---

    '--- 1. テキストファイルを新規作成し、TextStreamオブジェクトを取得 ---
    ' 第2引数(Overwrite)をTrueにすると、同名ファイルが存在する場合に上書きします
    Set textStreamObj = fso.CreateTextFile(Filename:=filePath, Overwrite:=True)

    '--- 2. TextStreamオブジェクトを使い、ファイルに書き込む ---
    With textStreamObj
        ' .WriteLine は、文字列を書き込んだ後に改行を入れます
        .WriteLine "--- 処理ログ ---"
        .WriteLine "レポート作成日時: " & Now()
        
        ' .Write は、改行を入れずに書き込みます
        .Write "処理ステータス: "
        .Write "正常終了"
        
        ' .Close を実行した時点で、ファイルへの書き込みが確定します
        .Close
    End With
    
    ' オブジェクトを解放
    Set textStreamObj = Nothing
    Set fso = Nothing

    MsgBox "テキストファイルの作成と書き込みが完了しました。"

End Sub

コードのポイント解説

① テキストファイルの作成: .CreateTextFile

Set myStream = fso.CreateTextFile(Filename:="ファイルパス", Overwrite:=True) fsoオブジェクトのCreateTextFileメソッドは、指定したパスに新しいテキストファイルを作成し、そのファイルを操作するための**TextStreamオブジェクト**を返します。

  • Filename: 作成するファイルのフルパスを指定します。
  • Overwrite (任意): Trueを指定すると、もし同名のファイルが既に存在していた場合に、ファイルを上書きします。False(既定値)の場合はエラーになります。

② ファイルへの書き込み: TextStream オブジェクト

取得したTextStreamオブジェクトには、ファイルにテキストを書き込むためのメソッドが用意されています。

  • .WriteLine "文字列": 指定した文字列をファイルに書き込み、最後に改行コードを自動で追加します。一行ずつ書き込んでいく場合に非常に便利です。
  • .Write "文字列": 指定した文字列を書き込みますが、改行はしません。 複数の要素を連結して一行の文字列を作りたい場合に使います。
  • .Close: これが最も重要なメソッドです。WriteWriteLineで書き込んだ内容は、メモリ上に一時的に保持されているだけです。.Closeを実行することで、初めてすべての内容がファイルに書き込まれ、ファイルが閉じられます。これを忘れると、中身が空のファイルができてしまうので注意してください。

【応用】セル範囲の値をテキストファイルに出力する

このテクニックを応用すれば、Excelシート上のデータをテキストファイルに書き出すことも簡単です。

Sub ExportRangeToTextFile()
    Dim fso As New FileSystemObject
    Dim ts As TextStream
    Dim dataRange As Range
    Dim cell As Range
    
    Set dataRange = Range("A1:C10")
    Set ts = fso.CreateTextFile(ThisWorkbook.Path & "\ExportData.txt", True)
    
    ' 範囲内の各セルをループ
    For Each cell In dataRange
        ' セルの値を書き込み(改行なし)
        ts.Write cell.Value & vbTab ' タブ区切りで書き出し
        ' 各行の最後のセルなら改行
        If cell.Column = dataRange.Columns.Count Then
            ts.WriteLine "" 'WriteLineに空文字を渡して改行だけ行う
        End If
    Next cell
    
    ts.Close
    MsgBox "データのエクスポートが完了しました。"
End Sub

まとめ

FSOを使ってテキストファイルを新規作成・書き込みする手順は以下の通りです。

  1. **fso.CreateTextFile("パス")**でファイルを作成し、TextStreamオブジェクトを取得する。
  2. TextStreamオブジェクトの**.WriteLine(改行あり)や.Write**(改行なし)で内容を書き込む。
  3. 最後に、必ず**.Close**メソッドでファイルを閉じて、書き込みを確定させる。

この方法は、VBAの処理結果のログを出力したり、他のプログラムに渡すためのデータファイルを作成したりと、幅広い用途に使える強力なテクニックです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次