自分方位研究所

日々の活動記録

ADO(ActiveX Database Object)を利用して、UTF-8形式のファイルを読み込む

文字コードがUTF-8形式のテキストファイルを、Excel VBAの LINE INPUTステートメントでそのまま読み込むと文字化けしてしまう、というところまで進んできました。

なんとか文字化け無しでテキストを取得したいということで調べてみると、ADO(ActiveX Database Object)の "ADODB.Stream"というものを利用すれば、UTF-8形式の文字コードでも取り込めるということがわかりました。
以下、コードを紹介します。

Function ファイルパスを取得 と、Function 出力開始セルを指定  については、昨日の記事と同じものです。
Sub UTF8形式のテキストファイルを文字化け無しで取り出す という名前のプロシージャを新たに作成しました。

このマクロで何ができるかというと、UTF-8形式のテキストファイルを選択して、その内容をメッセージボックス上に表示し、また、イミディエイトウィンドゥに出力します。

それぞれの表示文字数に上限があり、それを超える場合は、メッセージボックスでは、テキストファイルの先頭から文字制限数までを表示。イミディエイトウィンドゥでは、ファイルの最後尾から先頭へ向かって、出力制限文字数までを表示します。

はてなブログの記事のエクスポートファイルの読み込みを試してみたところ、文字化けせずにテキストを表示することができました。

 

Function ファイルパスを取得() As String

'ダイアログボックスを開いてファイルを選択する。ファイルフルパスを取得。
    
    ファイルパスを取得 = Application.GetOpenFilename( _
        FileFilter:="Textです。(*.txt),*.txt,CSVです。,*.csv,全部です。(*.*),*.*", _
        TITLE:="ファイルを選択")
        
    Debug.Print ファイルパスを取得
    
    'ファイル選択でフルパスファイル名。キャンセルすると「False」

End Function

'◆===================================================

Function 出力開始セルを指定() As Range

'アクティブなブックにワークシートを1つ右端に追加。

    Worksheets.Add after:=Sheets(Sheets.Count)
    Set 出力開始セルを指定 = ActiveSheet.Range("A1")


End Function

'◆===================================================

Sub UTF8形式のテキストファイルを文字化け無しで取り出す()

    Dim filePas As String
    filePas = ファイルパスを取得
    If filePas = "False" Then End

    Dim stCell As Range
    Set stCell = 出力開始セルを指定

    Dim ADODBobj As Object
    Set ADODBobj = CreateObject("ADODB.Stream")
    
    With ADODBobj
        .Charset = "UTF-8"
        .Open
        .LoadFromFile filePas
    End With
    
    Dim tmpText As String
    tmpText = ADODBobj.ReadText
    
    ADODBobj.Close

    Set ADODBobj = Nothing
    
    Debug.Print tmpText
    MsgBox tmpText
   
End Sub

 

取得したテキストデータをExcelシートへ出力するには、改行コードで区切って1セル毎に格納していく処理が必要です。本日はそこまで手が回りませんでしたので、明日以降に作成していきたいと思います。

このマクロは、文字コードがUTF-8形式専用で、例えばシフトJIS形式のファイルを読み込むと逆に文字化けします。シフトJIS形式のファイルを扱う場合は.

Charset = "UTF-8"  →  "SHIFT-JIS"

へ変更する必要があります。

引き続き、明日も取り組みます。