テキストファイルの読み込みをする。
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■実行結果




