VBAのOpenステートメントを使ったマクロとの比較のために、FileSystemObjectのOpenTextFileメソッドを利用しましたが、新規にファイルを出力するのであれば、CreateTextFileメソッドを利用するほうがシンプルなコードで済みます。
FileSystemObject.CreateTextFileメソッドでTextStreamオブジェクトを取得してファイルを出力するサンプルマクロ
FileSystemObjectへの参照設定を行った環境で、以下のSubプロシージャを実行すれば、アクティブなワークシート上のA1:A10セルの値を、アクティブブックと同じフォルダーに「output.txt」というファイル名で出力できます。
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
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オブジェクトにも用意されています。
以下のSubプロシージャでも、アクティブなワークシート上のA1:A10セルの値を、アクティブブックと同じフォルダーに「output.txt」というファイル名で出力できます。
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
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メソッドで、
Folderオブジェクトを取得して、
Set fol = fso.GetFolder(fol_path)
FolderオブジェクトのCreateTextFileメソッドで、TextStreamオブジェクトを取得しています。
Set tst = fol.CreateTextFile("output.txt")
単純にテキストファイルを出力するだけなら先にご紹介したFileSystemObjectオブジェクトのCreateTextFile、テキストファイルを出力するだけでなく同じフォルダーに何らかの処理を行うのならFolderオブジェクトのCreateTextFileでしょうか。
- Newer:ワークシートからブック名を取得するExcelマクロ
- Older:VBAのSplitでは1文字ずつの配列にならない
Home » FSO・FileSystemObjectの使い方 » TextStreamでファイル出力するExcelマクロ-FileSystemObject.CreateTextFile・Folder.CreateTextFile