UTF-8形式のテキストファイルの読み込み

UTF-8形式のテキストファイルの読み込みをする

VBAをUTF-8形式で作成されたテキストを読み込むには、ADOのStreamオブジェクト(ADODB.Stream)を利用することで読み込むことができます。

下記のサンプルコードでは1行ずつ読み込む方法とすべてのテキストを一括で読み込む方法を記載しています。

動作確認
Windows10/Excel2016:○
Windows11/Excel2024:○

 ●行単位で読み込む

'******************************************************************
' テキストファイルの読み込み(行単位)
'******************************************************************
Sub ReadTextFile()
    
    Dim sFilePath As String
    sFilePath = "C:\VBA\UTF8\テキスト_UTF8.txt"
    
    Call ReadText_UTF8_Line(sFilePath)

End Sub

'******************************************************************
' UTF-8形式のテキストデータを1行ずつ読み込む(改行コードはLF)
'------------------------------------------------------------------
'  第1引数:テキストファイルのパス
'******************************************************************
Sub ReadText_UTF8_Line(getFilePath As String)

    'ADODB.Streamオブジェクトの作成
    Dim oADO As Object
    Set oADO = CreateObject("ADODB.Stream")
    
    '設定
    oADO.Charset = "UTF-8"
    oADO.Mode = 3   '1:読み取り専用 3:読み取り/書き込み両方
    oADO.Type = 2   '1:バイナリデータ 2:テキストデータ 0:不明(規定値)
    oADO.LineSeparator = 10   '改行コード  10:LF 13:CR -1:CRLF(規定値)
    
    oADO.Open
    oADO.LoadFromFile getFilePath 'ファイルを読み込む
    
    Dim sLine As String
    Dim i As Long: i = 1
    
    '1行ずつ読み込み
    Do While Not (oADO.EOS)
        sLine = oADO.ReadText(-2) '1行ずつ読み込むには"-2"を指定
        'シートにアウトプット
        Sheets("Sheet1").Cells(i, 1) = sLine
        i = i + 1
    Loop
    
    oADO.Close
    Set oADO = Nothing
    
End Sub

 ■実行結果

テキストファイルの中身
読み込みした内容をシートに出力(行ごと)

 ●すべての内容を一括で読み込む

'******************************************************************
' テキストファイルの読み込み
'******************************************************************
Sub ReadTextFile_All()
    
    Dim sFilePath As String
    sFilePath = "C:\VBA\UTF8\テキスト_UTF8.txt"
    
    Call ReadText_UTF8(sFilePath)

End Sub

'******************************************************************
' UTF-8形式のテキストデータを読み込む
'------------------------------------------------------------------
'  第1引数:テキストファイルのパス
'******************************************************************
Sub ReadText_UTF8(getFilePath As String)

    'ADODB.Streamオブジェクトの作成
    Dim oADO As Object
    Set oADO = CreateObject("ADODB.Stream")
    
    '設定
    oADO.Charset = "UTF-8"
    oADO.Mode = 3    '1:読み取り専用 3:読み取り/書き込み両方
    oADO.Type = 2   '1:バイナリデータ 2:テキストデータ 0:不明(規定値)
    oADO.LineSeparator = 10   '改行コード  10:LF 13:CR -1:CRLF(規定値)
    
    oADO.Open
    oADO.LoadFromFile getFilePath 'ファイルを読み込む
        
    Dim sText As String
    sText = oADO.ReadText(-1) 'すべてをテキストを読み込むには"-1"を指定
    
    oADO.Close
    Set oADO = Nothing
    
    'シートにアウトプット
    Sheets("Sheet1").Cells(1, 1) = sText
    
End Sub

 ■実行結果

テキストファイルの中身
読み込みした内容をシートに出力