アクセス上位ページ
 
最近の更新内容
(2)-f.CreateTextFile メソッド ⇐ [PREV]
[NEXT] ⇒ (2)-h.OpenAsTextStream メソッド

Excel VBA ≫ 3.FSO - FSOによるファイル操作(2)-g.OpenTextFile メソッド

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

前のページでは CreateTextFile メソッドを使用したテキストファイル操作方法を説明しました。 当ページではつづいて OpenTextFile メソッドを使用してテキストファイルを読み書きする方法を説明します。



  • CreateTextFile ・・・ 主にテキストファイルを新規作成する場合に使用
  • OpenTextFile ・・・ 主に既存テキストファイルを読み書きする場合に使用
  • OpenAsTextStream ・・・ 主に既存テキストファイルを読み書きする場合に使用

各メソッドで可能な操作
メソッド 新規作成 読み込み 書き込み
(新規)
書き込み
(追加)
○・・・可能、×・・・不可能
CreateTextFile
(対象:fso、folder)
× ×
OpenTextFile
(対象:fso)
OpenAsTextStream
(対象:file)
×

管理人から一言・・・ OpenAsTextStream メソッドとの使い分け
OpenTextFile メソッドと OpenAsTextStream メソッドは新規ファイルが作成できるかどうかを除いては機能的に同じです。ただ、対象となるオブジェクトが違いますので、処理の内容により使いやすい方を選択するとよいでしょう。

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
  • 開いているテキストファイルを閉じます。

  • 既存テキストファイルの読み込み例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
    

    <入力ファイルの内容> 入力ファイルの内容 <実行結果(イミディエイトウィンドウ)>
    行 = 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
    

    <入力ファイルの内容> 入力ファイルの内容 <実行結果(イミディエイトウィンドウ)>
    行 = 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
    

    <sample_fs027_03 実行前> sample_fs027_03実行前 <sample_fs027_03 実行後> sample_fs027_03実行後

カテゴリ内ページ



Page
Top