テキストファイルの読み込み

テキストファイルの読み込みをする。

VBAでテキストファイルの読み込みをするにはTextStreamオブジェクトを利用することで読み込むことができます。
TextStreamオブジェクトを利用した使い方には下記の2つの方法があります。
 ・FileSystemObjectのOpenTextFileメソッド
 ・FileオブジェクトのOpenAsTextStreamメソッド
  (※FileオブジェクトはFileSystemObjectを利用して取得します。)

各メソッドで利用できる引数は以下になります。
 ●OpenTextFileメソッドで利用できる引数

引数名説明省略
第1引数filename対象ファイルのパスの指定不可
第2引数iomode入力/出力モードを数値で指定
1:読み取り(規定値)、2:新規書き込み、8:追記書き込み
第3引数create指定したファイルが存在しない場合に新しいファイルを作成するか指定
True:作成する、False:作成しない(規定値)
第4引数format開くファイルの形式を数値で指定
-2:システム既定、-1:Unicode形式、0:ASCII形式(規定値)

 ●OpenAsTextStreamメソッドで利用できる引数

引数名説明省略
第1引数iomode入力/出力モードを数値で指定
1:読み取り(規定値)、2:新規書き込み、8:追記書き込み
第2引数format開くファイルの形式を数値で指定
-2:システム既定、-1:Unicode形式、0:ASCII形式(規定値)


OpenTextFileメソッドとOpenAsTextStreamメソッドの両方ともファイルの読み込みをする時にはiomode に 1(読み取り) を指定し、読み取りにはファイル全体(ReadAll)、行単位(ReadLine)、文字数単位(Read)の読み込みが可能です。
 ※文字単位での読み込みは改行コードも1文字としてカウントされます。

またOpenAsTextStreamメソッドはFileオブジェクトを利用するので、実在しないファイルパスを指定した場合はファイルオブジェクトが取得できずにエラーとなります。

 ●OpenTextFileメソッドを利用した読み込み(ファイル全体)

'******************************************************************
' テキストファイルの読み込み(全体を読み込む)
'******************************************************************
Sub Main_Read_All_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, 1)
    
    '全文読み込む
    Debug.Print oFile.ReadAll
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

 ■実行結果

読み込み元のファイルの中身

 ●OpenTextFileメソッドを利用した読み込み(行単位)

'******************************************************************
' テキストファイルの読み込み(行単位で読み込む)
'******************************************************************
Sub Main_Read_Line_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, 1)
    
    '行単位で読み込む
    Do Until oFile.AtEndOfStream
        Debug.Print "(" & oFile.Line & "行目)" & oFile.ReadLine
    Loop
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

 ■実行結果

 ●OpenTextFileメソッドを利用した読み込み(文字数単位)

'******************************************************************
' テキストファイルの読み込み(文字数単位で読み込む)
'******************************************************************
Sub Main_Read_Chr_OpenTextFile()

    '読み込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenTextFile_char.txt"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'TextStreamオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.OpenTextFile(sTextPath, 1)

    '指定した文字数単位で読み込む
    Do Until oFile.AtEndOfStream
        '10文字単位で読み込む
        Debug.Print "(10文字単位)" & oFile.Read(10)
    Loop
    
    'ファイルを閉じる
    oFile.Close
    
End Sub

 ■実行結果

読み込み元のファイルの中身


 ●OpenAsTextStreamメソッドを利用した読み込み(ファイル全体)

'******************************************************************
' テキストファイルを読み込む(全体を読み込む)
'******************************************************************
Sub Main_Read_All_OpenAsTextStream()
    
    '読み込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenAsTextStream.txt"
    
    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.GetFile(sTextPath)

    'テキストストリームオブジェクトの設定(引数に読み込み、Unicodeを指定)
    Dim oStream As Object
    Set oStream = oFile.OpenAsTextStream(1, -1)
        
    '全文読み込む
    Debug.Print oStream.ReadAll
    
    'テキストストリームオブジェクトを閉じる
    oStream.Close
    
End Sub

 ■実行結果

読み込み元のファイルの中身

 ●OpenAsTextStreamメソッドを利用した読み込み(行単位)

'******************************************************************
' テキストファイルを読み込む(行単位で読み込む)
'******************************************************************
Sub Main_Read_Line_OpenAsTextStream()
    
    '読み込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenAsTextStream.txt"
    
    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.GetFile(sTextPath)

    'テキストストリームオブジェクトの設定(引数に読み込み、Unicodeを指定)
    Dim oStream As Object
    Set oStream = oFile.OpenAsTextStream(1, -1)
        
    '行単位で全内容を読み込む
    Do Until oStream.AtEndOfStream
        Debug.Print "(" & oStream.Line & "行目)" & oStream.ReadLine
    Loop
    
    'オブジェクトを閉じる
    oStream.Close
    
End Sub

 ■実行結果

 ●OpenAsTextStreamメソッドを利用した読み込み(文字数単位)

'******************************************************************
' テキストファイルの読み込み(文字数単位で読み込む)
'******************************************************************
Sub Main_Read_Chr_OpenAsTextStream()

    '読み込み先のテキストファイルのパスを指定
    Dim sTextPath As String
    sTextPath = "C:\VBA\text_OpenAsTextStream.txt"
    
    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクトの取得
    Dim oFile As Object
    Set oFile = oFso.GetFile(sTextPath)

    'テキストストリームオブジェクトの設定(引数に読み込み、Unicodeを指定)
    Dim oStream As Object
    Set oStream = oFile.OpenAsTextStream(1, -1)
        
    '指定した文字数単位で読み込む
    Do Until oStream.AtEndOfStream
        '10文字単位で読み込む
        Debug.Print "(10文字単位)" & oStream.Read(10)
    Loop
    
    'テキストストリームオブジェクトを閉じる
    oStream.Close
    
End Sub

 ■実行結果

読み込み元のファイルの中身