【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を指定してます。

関連ページ