テキストファイルに書き込みをする。
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引数 | unicode | Unicodeでファイルを作成するか、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■実行結果




