【VBA】テキストファイルを読み込む

VBAでテキストファイルを読み込んで、テキストファイルの内容をVBAで利用することができます。

Shift-JISファイルのテキストファイルを読み込む

VBAでShift-JISのテキストファイルを読み込むにはMicrosoft Scripting RuntimeのFileFileSystemObjectを使用して、 テキストファイルを読み込みます。

https://msdn.microsoft.com/ja-jp/library/cc344105.aspx

事前に参照設定でMicrosoft Scripting Runtimeを選択しておく必要があります。
参照設定は下記の内容を参照してください。

VBAで参照設定を行う

Microsoft Scripting RuntimeのFileFileSystemObjectを使用して テキストファイルの内容を読み込むコードは以下になります。

Option Explicit

Public Function ReadTextFile(file_path As String) As String
'###################################################################################
'テキストファイルの内容を読み込む
'事前に参照設定でMicrosoft Scripting Runtimeを設定してください
'-----------------------------------------------------------------------------------
'引数  :file_path テキストファイルのパス
'###################################################################################

  Dim fso As FileSystemObject
  Dim ts As TextStream

  Set fso = New FileSystemObject
  Set ts = fso.OpenTextFile(file_path, ForReading)

  Dim txt As String
  Do Until ts.AtEndOfStream
    txt = txt & ts.ReadLine & vbNewLine
  Loop
  ts.Close

  ReadTextFile = txt

  Set ts = Nothing
  Set fso = Nothing

End Function

下記の内容のShift-JISのテキストファイルを読み込んで、メッセージボックスに表示してみます。

このテキストは
読み込みテストのための
テキストです。

ReadTextFileを利用してテキストファイルの内容をメッセージボックスに表示すると下記のように表示されます。

UTF-8のテキストファイルを読み込む

上記のShift-JISのコードでUTF-8のテキストファイルを読み込むと文字化けします。
UTF-8のテキストファイルを読み込むためにはADODB.streamを使用します。
事前に参照設定でMicrosoft ActiveX Data Objects Libraryを選択しておく必要があります。

https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/stream-object-ado

文字コードUTF-8、改行コードLFのテキストファイルを読み込むことを想定したコードは下記になります。

Option Explicit

Public Function ReadUTF8TextFile(file_path As String) As String
'###################################################################################
'UTF-8の改行コードLF、BOM無しテキストファイルの内容を読み込む
'事前に参照設定でMicrosoft ActiveX Data Objects Libraryの最新バージョンを設定してください
'-----------------------------------------------------------------------------------
'引数  :file_path テキストファイルのパス
'###################################################################################

  Dim st As New ADODB.stream
  
  st.Open
  st.Charset = "utf-8"
  st.LoadFromFile file_path
  st.LineSeparator = adLF
  
  Dim txt As String
  Do While Not st.EOS
    txt = txt & st.readText(adReadLine) & vbNewLine
  Loop
  
  ReadUTF8TextFile = txt
  
  Set st = Nothing
  
End Function

ADODB.streamのパラメータにそれぞれ下記の値を設定します。

  • Charset: utf-8
  • LineSeparator: adLF

ADODB.streamのreadText関数でテキストを行単位で読み込むためにadReadLineを指定してます。

Licensed under CC BY-NC-SA 4.0
最終更新 2018年7月13日 22:58
Hugo で構築されています。
テーマ StackJimmy によって設計されています。