前のページではテキストストリームオブジェクトを取得する3つのメソッドのうち、 CreateTextFile メソッドを使用したテキストファイル操作方法を説明しました。このページではつづいて OpenTextFile メソッドを使用してテキストファイルを読み書きする方法を説明します。
OpenTextFileメソッドの使用方法
OpenTextFile メソッドは ファイルシステムオブジェクトのメンバーメソッドです。引数 FileName には操作対象ファイルのパスを絶対パスか相対パスで指定する必要があります。
引数名 | 省略 | 説明 |
---|---|---|
FileName | × | 作成するファイルのパスを表す文字列を指定します。 絶対パス、相対パスともに指定可能です。 |
IOMode | ○ |
読み込みか、書き込みかのモードを指定します。
既定値は ForReading です。 <指定可能な定数(※1)> ForReading(値:1) ・・・ 読み込み ForWriting(値:2) ・・・ 新規書き込み ForAppending(値:8) ・・・ 追加書き込み |
Create | ○ | 引数 FileName で指定されたファイルが存在しない場合に新しいファイルを作成するかどうかを True / False で指定します。 既定値は False (新規作成しない)です。 |
Format | ○ |
開くファイルの形式を指定します。 既定値は TristateFalse です。 <指定可能な定数(※1)> TristateUseDefault(値:-2) ・・・ システムデフォルト TristateTrue(値:-1) ・・・ Unicode TristateFalse(値:0) ・・・ ASCII |
※1・・・オブジェクトライブラリへの参照設定をしないとこれらの定数は使用できません。
参照設定をしない場合は直接数値を指定してください。
入力に関する主なプロパティ・メソッド
読み込みモードでテキストストリームオブジェクトを取得した後、以下のプロパティおよびメソッドを使用することで文字列の読み込みなどが可能になります。
※出力に関するプロパティ・メソッドはこの前ページへのリンク先を参照してください。
内容 | tso のプロパティ /メソッド |
---|---|
ファイルポインタ位置(行数)取得 | tso.Line |
行のカラム位置取得 (行頭からの文字位置) |
tso.Column |
文字列読み込み | tso.Read |
1行読み込み | tso.ReadLine |
ファイル全体読み込み | tso.ReadAll |
指定文字数スキップ | tso.Skip |
指定行数スキップ | tso.SkipLine |
ファイル末尾判定 | tso.AtEndOfStream |
行末尾判定 | tso.AtEndOfLine |
ファイルクローズ | tso.Close |
- tso.Line
現在のファイルポインタ(行)を取得します。先頭行は 1 となります。 tso.ReadLine メソッドなどを使用するとこの行を読み込みます。 - tso.Column
現在のカラム位置(行頭からの文字位置)を取得します。 行頭は 1 となります。tso.Read メソッドを使用するとこの位置の文字を読み込みます。 - tso.Read ( Characters )
ファイルから指定された文字数を読み込みます。 引数 Characters (省略不可)には読み込む文字数を指定します。 - tso.ReadLine
ファイルから 1 行 (改行文字を除く) を読み込みます。 - tso.ReadAll
ファイル全体を読み込みます。 ファイルサイズの大きいファイルに対して使用するとメモリを大量に消費し、 処理のパフォーマンスが悪くなる可能性があります。 - tso.Skip ( Characters )
引数 Characters (省略不可)で指定された文字数の読み込みをスキップします。 - tso.SkipLine
現在のファイルポインタのある行の読み込みをスキップします。 - tso.AtEndOfStream
ファイルポインタがファイルの末尾にあるかどうかを True / False で返します。 - tso.AtEndOfLine
ファイルポインタが行の末尾にあるかどうかを True / False で返します。 - tso.Close
開いているテキストファイルを閉じます。
OpenTextFileメソッドの使用例
テキストファイルの読込例1
fso.OpenTextFile メソッドを使用して読み込みモードでテキストストリームオブジェクトを取得後、tso.ReadLine メソッドにより1行ずつ読み込む例です。
Sub sample_fs027_01()
Dim fso As Object
Dim tso As Object
Dim strPath As String
'ファイルシステムオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルパス
strPath = "C:\Users\xxxx\Desktop\vba\fs027_01.txt"
'テキストストリームオブジェクトの取得(読み込みモード)
Set tso = fso.OpenTextFile(strPath)
With tso
Do Until .AtEndOfStream 'ファイル末尾まで繰り返し
'イミディエイトウィンドウへ読み込み位置と値を表示
Debug.Print "行 = " & .Line & _
" 位置 = " & .Column & _
" 値 = " & .ReadLine
Loop
.Close 'ファイルのクローズ
End With
'オブジェクト変数のクリア
Set fso = Nothing
Set tso = Nothing
End Sub
Do…Loop Withステートメント Setステートメント
下図はテスト用の入力ファイルです。
上記サンプルマクロを実行すると、テキストファイルを読み込み、内容をイミディエイトウィンドウへ表示します。
テキストファイルの読込例2
fso.OpenTextFile メソッドを使用して読み込みモードでテキストストリームオブジェクトを取得後、tso.Read メソッドにより1文字ずつ読み込む例です。
以下の例では1行目を読み飛ばし、2行目を1文字ずつ読み込んでイミディエイトウィンドウへ表示します。
Sub sample_fs027_02()
Dim fso As Object
Dim tso As Object
Dim strPath As String
'ファイルシステムオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルパス
strPath = "C:\Users\xxx\Desktop\vba\fs027_01.txt"
'テキストストリームオブジェクトの取得(読み込みモード)
Set tso = fso.OpenTextFile(strPath)
With tso
.SkipLine '行のスキップ
Do Until .AtEndOfLine '行の末尾まで繰り返し
'イミディエイトウィンドウへ読み込み位置と値を表示
Debug.Print "行 = " & .Line & _
" 位置 = " & .Column & _
" 値 = " & .Read(1)
Loop
.Close 'ファイルのクローズ
End With
'オブジェクト変数のクリア
Set fso = Nothing
Set tso = Nothing
End Sub
Do…Loop Withステートメント Setステートメント
下図はテスト用の入力ファイルです。
上記サンプルマクロを実行すると、テキストファイルを読み込み、内容をイミディエイトウィンドウへ表示します。
既存テキストファイルの追加書込例
fso.OpenTextFile メソッドを使用して追加書き込みモードでテキストストリームオブジェクトを取得後、tso.WriteLine メソッドにより現在日時を追加書き込みする例です。
fso.OpenTextFile メソッドの第2引数は、オブジェクトライブラリへの参照設定をしておくことで、定数“ForAppending”が指定可能になります。
Sub sample_fs027_03()
Dim fso As Object
Dim tso As Object
Dim strPath As String
'ファイルシステムオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルパス
strPath = "C:\Users\xxxx\Desktop\vba\fs027_03.txt"
'テキストストリームオブジェクトの取得(追加書き込みモード)
Set tso = fso.OpenTextFile(strPath, 8, True)
With tso
.WriteLine Now '現在日時を追加書き込み
.Close 'ファイルのクローズ
End With
'オブジェクト変数のクリア
Set fso = Nothing
Set tso = Nothing
End Sub
下図はテスト用の入力ファイルです。
上記サンプルマクロを実行すると、既存テキストファイルに現在日時を追加書き込みされました。
ファイルシステムオブジェクトのプロパティ・メソッド
Openステートメントを使用したテキストファイル読込
Openステートメントを使用したテキストファイル追加書込