Home » FSO・FileSystemObjectの使い方 » TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

TextStreamオブジェクトを使って、テキストファイルを出力するExcelマクロをご紹介しました。

[スポンサードリンク]

VBAのOpenステートメントを使ったマクロとの比較のために、FileSystemObjectのOpenTextFileメソッドを利用しましたが、新規にファイルを出力するのであれば、CreateTextFileメソッドを利用するほうがシンプルなコードで済みます。

TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

FileSystemObject.CreateTextFileメソッドでTextStreamオブジェクトを取得してファイルを出力するサンプルマクロ

FileSystemObjectへの参照設定を行った環境で、以下のSubプロシージャを実行すれば、アクティブなワークシート上のA1:A10セルの値を、アクティブブックと同じフォルダーに「output.txt」というファイル名で出力できます。

Sub ファイル出力を行う_FileSystemObject_CreateTextFile()
 Dim fso As Scripting.FileSystemObject
 Dim tst As Scripting.TextStream
 Dim f_path As String ' 出力するテキストファイルのフルパス
 Dim i As Long

 f_path = ActiveWorkbook.Path & "\output.txt"
 Set fso = New Scripting.FileSystemObject
 Set tst = fso.CreateTextFile(f_path)

 For i = 1 To 10
  tst.WriteLine Text:=Cells(i, "A").Value
 Next i

 tst.Close
 Set tst = Nothing
 Set fso = Nothing
End Sub

FileSystemObject.OpenTextFileメソッドを利用した場合、可読性も考えると、
  Set tst = fso.OpenTextFile( _
    Filename:=f_path, _
    IOMode:=ForWriting, _
    Create:=True)
と、引数をいろいろ指定する必要がありましたが、FileSystemObject.CreateTextFileメソッドなら、上記のとおり、
  Set tst = fso.CreateTextFile(f_path)
で済みます。

FileSystemObject.CreateTextFileメソッドでTextStreamオブジェクトを取得したあとは、FileSystemObject.OpenTextFileメソッドでTextStreamオブジェクトを取得した場合とまったく同じです。

Folder.CreateTextFileメソッドでTextStreamオブジェクトを取得してファイルを出力するサンプルマクロ

CreateTextFileという名前のメソッドは、FileSystemObjectオブジェクトだけでなく、Folderオブジェクトにも用意されています。

TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

以下のSubプロシージャでも、アクティブなワークシート上のA1:A10セルの値を、アクティブブックと同じフォルダーに「output.txt」というファイル名で出力できます。

Sub ファイル出力を行う_Folder_CreateTextFile()
 Dim fso As Scripting.FileSystemObject
 Dim fol As Scripting.Folder
 Dim fol_path As String ' 出力するフォルダのフルパス
 Dim tst As Scripting.TextStream
 Dim i As Long

 fol_path = ActiveWorkbook.Path
 Set fso = New Scripting.FileSystemObject
 Set fol = fso.GetFolder(fol_path)
 Set tst = fol.CreateTextFile("output.txt")

 For i = 1 To 10
  tst.WriteLine Text:=Cells(i, "A").Value
 Next i

 tst.Close
 Set tst = Nothing
 Set fol = Nothing
 Set fso = Nothing
End Sub

先ほどのプロシージャで、
  f_path = ActiveWorkbook.Path & "\output.txt"
  Set fso = New Scripting.FileSystemObject
  Set tst = fso.CreateTextFile(f_path)
となっていた部分が、
  fol_path = ActiveWorkbook.Path
  Set fso = New Scripting.FileSystemObject
  Set fol = fso.GetFolder(fol_path)
  Set tst = fld.CreateTextFile("output.txt")
になっています。

FileSystemObjectオブジェクトのGetFolderメソッドで、

TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

Folderオブジェクトを取得して、
  Set fol = fso.GetFolder(fol_path)

FolderオブジェクトのCreateTextFileメソッドで、TextStreamオブジェクトを取得しています。
  Set tst = fol.CreateTextFile("output.txt")

単純にテキストファイルを出力するだけなら先にご紹介したFileSystemObjectオブジェクトのCreateTextFile、テキストファイルを出力するだけでなく同じフォルダーに何らかの処理を行うのならFolderオブジェクトのCreateTextFileでしょうか。

[スポンサードリンク]

Home » FSO・FileSystemObjectの使い方 » TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile

「FSO・FileSystemObjectの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.