テキストファイルへの書き込み

テキストファイルに書き込みをする。

VBAでテキストファイルに書き込みをするにはTextStreamオブジェクトを利用することで書き込みすることができます。
TextStreamオブジェクトを利用した使い方には下記の3つの方法があります。
 ・FileSystemObjectのOpenTextFileメソッド
 ・FileSystemObjectのCreateTextFileメソッド
 ・FileオブジェクトのOpenAsTextStreamメソッド
  (※FileオブジェクトはFileSystemObjectを利用して取得します。)

それぞれの動きの特徴を大きく分けると下記の違いがあります。

書き込みの
モード
書き込みの指定したファイルが存在する場合書き込みの指定したファイルが存在しない場合
OpenTextFile新規追記可能
既存ファイルに対して指定した書き込みのモードで書き込む。指定したファイルが事前に存在していない場合はファイル自体が作成される。
CreateTextFile新規のみ既存ファイルに対して上書きするかの選択が可能。指定したファイルが事前に存在していない場合はファイル自体が作成される。
OpenAsTextStream新規追記可能
既存ファイルに対して指定した書き込みのモードで書き込む。ファイルが存在しない場合は書き込み不可。
各メソッドの違い


また利用できる引数にもそれぞれ違いがあります。
 ●OpenTextFileメソッドで利用できる引数

引数名説明省略
第1引数filename対象ファイルのパスの指定不可
第2引数iomode入力/出力モードを数値で指定
1:読み取り(規定値)、2:新規書き込み、8:追記書き込み
第3引数create指定したファイルが存在しない場合に新しいファイルを作成するか指定
True:作成する、False:作成しない(規定値)
第4引数format開くファイルの形式を数値で指定
-2:システム既定、-1:Unicode形式、0:ASCII形式(規定値)

 ●CreateTextFileメソッドで利用できる引数

引数名説明省略
第1引数filename対象ファイルのパスの指定不可
第2引数overwrite指定したファイルを上書きできるかどうかを指定
True:作成する(規定値)、False:作成しない
第3引数unicodeUnicodeでファイルを作成するか、ASCIIでファイルを作成するかを指定
True:Unicode、False:ASCII(規定値)

 ●OpenAsTextStreamメソッドで利用できる引数

引数名説明省略
第1引数iomode入力/出力モードを数値で指定
1:読み取り(規定値)、2:新規書き込み、8:追記書き込み
第2引数format開くファイルの形式を数値で指定
-2:システム既定、-1:Unicode形式、0:ASCII形式(規定値)

書き込みにはいずれも、末尾に改行が付与される書き込み(WriteLine)、改行が付与されない書き込み(Write)、指定した数の改行のみ(WriteBlankLines)の書き込みが可能です。

 ●OpenTextFileメソッドを利用した書き込み(新規と追記)

'******************************************************************
' テキストファイルへの新規書き込み(OpenTextFile)
'*****************************************************************
Sub Main_Write_New_OpenTextFile()
    
    '書き込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenTextFile.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'TextStreamオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.OpenTextFile(sTextPath, 2, True)
        
    'テキストへの書き込み(新規)
    'WriteLineメソッド(末尾に改行が付与される)
    oFile.WriteLine ("OpenTextFile:新規")
    oFile.WriteLine ("WriteLineを利用すると末尾に改行が設定されます。 ")
    
     'Writeメソッド(改行が設定されない、改行したい場合は引数に改行コードを設定)
    oFile.Write ("Writeを利用すると改行が")
    oFile.Write ("設定されません。")
    oFile.Write (vbCrLf)  '改行
    
    'WriteBlankLinesメソッド(指定した数の改行コードを設定)
    oFile.WriteBlankLines (2)
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

'******************************************************************
' テキストファイルへの追加書き込み(OpenTextFile)
'*****************************************************************
Sub Main_Write_Add_OpenTextFile()
    
    '書き込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenTextFile_Add.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'TextStreamオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.OpenTextFile(sTextPath, 8, True)
        
    'テキストへの書き込み(追記)
    'WriteLineメソッド
    oFile.WriteLine ("OpenTextFile:追記")
    oFile.WriteLine ("OpenTextFileのiomodeに8を設定すると追記になります。")
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

 ■実行結果

新規書き込み
追加書き込み


 ●CreateTextFileメソッドを利用した書き込み

'******************************************************************
' テキストファイルへの書き込み(CreateTextFile)
'*****************************************************************
Sub Main_Write_CreateTextFile()
    
    '書き込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_CreateTextFile.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'TextStreamオブジェクトの取得(引数に上書き、Unicodeを指定)
    Dim oFile As Object
    Set oFile = oFso.CreateTextFile(sTextPath, True, False)
        
    'テキストへの書き込み
    'WriteLineメソッド(末尾に改行が付与される)
    oFile.WriteLine ("CreateTextFile")
    oFile.WriteLine ("WriteLineを利用すると末尾に改行が設定されます。 ")
    
     'Writeメソッド(改行が設定されない、改行したい場合は引数に改行コードを設定)
    oFile.Write ("Writeを利用すると改行が")
    oFile.Write ("設定されません。")
    oFile.Write (vbCrLf)  '改行
    
    'WriteBlankLinesメソッド(指定した数の改行コードを設定)
    oFile.WriteBlankLines (2)
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

 ■実行結果

 ●OpenAsTextStreamメソッドを利用した書き込み

'******************************************************************
' テキストファイルへの新規書き込み(OpenAsTextStream)
'*****************************************************************
Sub Main_Write_New_OpenAsTextStream()
    
    '書き込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenAsTextStream.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'ファイルの存在確認
    If Not oFso.FileExists(sTextPath) Then
        MsgBox "ファイルがありません。"
        Exit Sub
    End If
    
    'ファイルオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.GetFile(sTextPath)

    'テキストストリームオブジェクトの取得(引数に新規書込、Unicodeを指定)
    Dim oStream As Object
    Set oStream = oFile.OpenAsTextStream(2, -1)
        
    'テキストへの新規書き込み
    'WriteLineメソッド(末尾に改行が付与される)
    oStream.WriteLine ("OpenAsTextStream:新規")
    oStream.WriteLine ("WriteLineを利用すると末尾に改行が設定されます。 ")
    
     'Writeメソッド(改行が設定されない、改行したい場合は引数に改行コードを設定)
    oStream.Write ("Writeを利用すると改行が")
    oStream.Write ("設定されません。")
    oStream.Write (vbCrLf)  '改行
    
    'WriteBlankLinesメソッド(指定した数の改行コードを設定)
    oStream.WriteBlankLines (2)
    
    '閉じる
    oStream.Close

    
End Sub

'******************************************************************
' テキストファイルへの追加書き込み(OpenAsTextStream)
'*****************************************************************
Sub Main_Write_Add_OpenAsTextStream()
    
    '書き込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenAsTextStream_Add.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'ファイルの存在確認
    If Not oFso.FileExists(sTextPath) Then
        MsgBox "ファイルがありません。"
        Exit Sub
    End If
    
    'ファイルオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.GetFile(sTextPath)

    'テキストストリームオブジェクトの取得(引数に追記書込、Unicodeを指定)
    Dim oStream As Object
    Set oStream = oFile.OpenAsTextStream(8, -1)
        
    'テキストへの書き込み(追記)
    'WriteLineメソッド
    oStream.WriteLine ("OpenAsTextStream:追記")
    oStream.WriteLine ("OpenAsTextStreamのiomodeに8を設定すると追記になります。")
    
    '閉じる
    oStream.Close
    
End Sub

 ■実行結果

新規書き込み
追加書き込み