OpenTextFileメソッドによるテキストファイル操作

前のページではテキストストリームオブジェクトを取得する3つのメソッドのうち、 CreateTextFile メソッドを使用したテキストファイル操作方法を説明しました。このページではつづいて OpenTextFile メソッドを使用してテキストファイルを読み書きする方法を説明します。

OpenTextFile メソッドと OpenAsTextStream メソッドは新規ファイルが作成できるかどうかを除いては機能的に同じです。OpenTextFile メソッドはファイルシステムオブジェクトが対象となりますので、ファイルシステムオブジェクトが取得できている状況ではこちらを使用するとよいでしょう。

スポンサーリンク

OpenTextFileメソッドの使用方法

OpenTextFile メソッドは ファイルシステムオブジェクトのメンバーメソッドです。引数 FileName には操作対象ファイルのパスを絶対パスか相対パスで指定する必要があります。

構文
fso.OpenTextFile(FileName [, IOMode] [, Create] [, Format])
引数名 省略 説明
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ステートメント

下図はテスト用の入力ファイルです。

入力ファイルの内容
入力ファイルの内容

上記サンプルマクロを実行すると、テキストファイルを読み込み、内容をイミディエイトウィンドウへ表示します。

  • マクロ実行結果(イミディエイトウィンドウ
    行 = 1 位置 = 1 値 = 1234567890
    行 = 2 位置 = 1 値 = あいうえおabc
    行 = 3 位置 = 1 値 = ABCDE

テキストファイルの読込例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ステートメント

下図はテスト用の入力ファイルです。

入力ファイルの内容
入力ファイルの内容

上記サンプルマクロを実行すると、テキストファイルを読み込み、内容をイミディエイトウィンドウへ表示します。

  • マクロ実行結果(イミディエイトウィンドウ
    行 = 2 位置 = 1 値 = あ
    行 = 2 位置 = 2 値 = い
    行 = 2 位置 = 3 値 = う
    行 = 2 位置 = 4 値 = え
    行 = 2 位置 = 5 値 = お
    行 = 2 位置 = 6 値 = a
    行 = 2 位置 = 7 値 = b
    行 = 2 位置 = 8 値 = c

既存テキストファイルの追加書込例

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

 Withステートメント  Setステートメント

下図はテスト用の入力ファイルです。

sample_fs027_03実行前
sample_fs027_03実行前

上記サンプルマクロを実行すると、既存テキストファイルに現在日時を追加書き込みされました。

sample_fs027_03実行後
sample_fs027_03実行後

 
ファイルシステムオブジェクトのプロパティ・メソッド
Openステートメントを使用したテキストファイル読込
Openステートメントを使用したテキストファイル追加書込

タイトルとURLをコピーしました