【VBA】テキストファイルを読み込む
概要
VBAでテキストファイルを読み込んで、テキストファイルの内容をVBAで利用することができます。
Shift-JISファイルのテキストファイルを読み込む
VBAでShift-JISのテキストファイルを読み込むにはMicrosoft Scripting RuntimeのFileFileSystemObjectを使用して、
テキストファイルを読み込みます。
事前に参照設定でMicrosoft Scripting Runtimeを選択しておく必要があります。
参照設定は下記の内容を参照してください。
https://kazusa-pg.com/vba-references/
Microsoft Scripting RuntimeのFileFileSystemObjectを使用してテキストファイルの内容を読み込むコードは
以下になります。
1Option Explicit
2
3Public Function ReadTextFile(file_path As String) As String
4'###################################################################################
5'テキストファイルの内容を読み込む
6'事前に参照設定でMicrosoft Scripting Runtimeを設定してください
7'-----------------------------------------------------------------------------------
8'引数 :file_path テキストファイルのパス
9'###################################################################################
10
11 Dim fso As FileSystemObject
12 Dim ts As TextStream
13
14 Set fso = New FileSystemObject
15 Set ts = fso.OpenTextFile(file_path, ForReading)
16
17 Dim txt As String
18 Do Until ts.AtEndOfStream
19 txt = txt & ts.ReadLine & vbNewLine
20 Loop
21 ts.Close
22
23 ReadTextFile = txt
24
25 Set ts = Nothing
26 Set fso = Nothing
27
28End Function
下記の内容のShift-JISのテキストファイルを読み込んで、メッセージボックスに表示してみます。
1このテキストは
2読み込みテストのための
3テキストです。
ReadTextFileを利用してテキストファイルの内容をメッセージボックスに表示すると下記のように表示されます。

UTF-8のテキストファイルを読み込む
上記のShift-JISのコードでUTF-8のテキストファイルを読み込むと文字化けします。
UTF-8のテキストファイルを読み込むためにはADODB.streamを使用します。
事前に参照設定でMicrosoft ActiveX Data Objects Libraryを選択しておく必要があります。
文字コードUTF-8、改行コードLFのテキストファイルを読み込むことを想定したコードは下記になります。
1Option Explicit
2
3Public Function ReadUTF8TextFile(file_path As String) As String
4'###################################################################################
5'UTF-8の改行コードLF、BOM無しテキストファイルの内容を読み込む
6'事前に参照設定でMicrosoft ActiveX Data Objects Libraryの最新バージョンを設定してください
7'-----------------------------------------------------------------------------------
8'引数 :file_path テキストファイルのパス
9'###################################################################################
10
11 Dim st As New ADODB.stream
12
13 st.Open
14 st.Charset = "utf-8"
15 st.LoadFromFile file_path
16 st.LineSeparator = adLF
17
18 Dim txt As String
19 Do While Not st.EOS
20 txt = txt & st.readText(adReadLine) & vbNewLine
21 Loop
22
23 ReadUTF8TextFile = txt
24
25 Set st = Nothing
26
27End Function
ADODB.streamのパラメータにそれぞれ下記の値を設定します。
- Charset: utf-8
- LineSeparator: adLF
ADODB.streamのreadText関数でテキストを行単位で読み込むためにadReadLineを指定してます。