VB6・VBA でテキストをファイルに出力するには、いくつかの方法があります。
Open ステートメントでファイルを開いて書き込む
Open ステートメントでファイルを出力する場合は、まず Open ステートメントでファイルを開き、次に Print # または Write # ステートメントでテキストを出力後、最後に Close ステートメントでファイルを閉じるといった処理を行います。出力ファイルに対して、出力テキストを上書きするか追記するかは、Open ステートメントのモードで指定することができます。
【Openステートメントの書き込みモード】
モード | 説明 |
Append |
書き込み(追記)モード |
Output |
書き込み(上書き)モード |
どちらのモードでも、新規にファイルを作成する場合はファイルが存在しない場合でも新規ファイルを作成し、テキストを出力します。
Open ステートメントの詳細な使用方法はこちらを参照ください。
【サンプルコード1】
Public Sub sample()
Dim intNo As Integer
Dim strFileName As String
' テキストを出力するファイルを設定
strFileName = "C:\tmp\sample.txt"
' ファイルの書き込み
intNo = FileSystem.FreeFile() ' フリーファイルNoを取得
Open strFileName For Output As #intNo ' 上書きモードでファイルをオープン
Print #intNo, "ABCDE"
Print #intNo, "あいうえお"
Close #intNo ' ファイルをクローズ
End Sub
上記サンプルは「C:\tmp\sample.txt」を上書きモードでオープンし、テキストを二行出力しています。ファイルをオープンする際はファイル番号を指定する必要がありますが、通常、この番号は FreeFile 関数で取得します。また、Print # ステートメントは出力文字列の後ろにセミコロン(;)を付与するかどうかによって動作が異なります。
条件 | 実行例 | 説明 |
セミコロンなし |
Print #intNo, "ABC" |
文末に改行コード(CR+LF)を付与して出力します。 |
セミコロンあり |
Print #intNo, "ABC"; |
文末に改行コード(CR+LF)を付与しません。出力文字列は連続して出力されます。
例)Print #intNo, "ABC"; "DEF" → ABCDEF
|
FileSystemObject を使って書き込む
FileSystemObject を使って書き込む場合は、まず FileSystemObject のインスタンスを生成し、その OpenTextFile メソッドを使ってファイルをオープン(TextStream オブジェクトを生成)します。オープンしたファイルに対する書き込みは、生成したTextStream オブジェクトの Write メソッドまたはWriteLine メソッドで行います。どちらのメソッドもテキストの出力メソッドですが、WriteLine メソッドは文字列の後に改行コードを一緒に出力します。
【サンプルコード2】
Public Sub sample2()
Dim file As String
Dim Fso As New FileSystemObject
Dim Ts As TextStream
' テキストを出力するファイルを設定
file = "C:\tmp\sample2.txt"
' ファイルの書き込み
Set Ts = Fso.OpenTextFile(file, ForAppending, True) ' 追記モードでファイルをオープン
Ts.WriteLine "ABCDE"
Ts.WriteLine "あいうえお"
Ts.Close ' ファイルをクローズ
Set Ts = Nothing
End Sub
上記サンプルは「C:\tmp\sample2.txt」を追記モードでオープンし、テキストを二行出力しています。ファイルが既にある場合、出力文字列はファイルの最後に追記されます。また、上記例ではファイルを開く際にクリエイトフラグを True で指定しているため、ファイルが存在しない場合でも、新規にファイルを作成して、文字列を出力します。
クリエイトフラグ指定例 | 説明 |
Set Ts = Fso.OpenTextFile(file, ForAppending, True) |
ファイルがない場合は新規で作成します。 |
Set Ts = Fso.OpenTextFile(file, ForAppending, False) |
ファイルがない場合はエラーとなります。 |