管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

ExcelVBAでCRLF,UTF-8のTSVファイルを読み込みたい

ExcelVBAでCRLF,UTF-8のTSVファイルを読み込みたいということがあったのでメモです。
UTF-8の場合は、ADODBを使う必要があるそうです。

実行環境

バージョン 2002 (ビルド 12527.20278 クイック実行)

ソースコード

ファイルパスは、「ボタン1」を設置したシートの「C6」セルに入力させることを想定しています。

Option Explicit

' UTF-8,CRLFのTSVを読み込んで別シートのセルに値を入力する
Sub ボタン1_Click()
    Dim currentBook As Workbook
    Dim filePath As String
    Dim newBook As Workbook
    Dim i As Long
    Dim j As Long
    Dim adodb As Object
    Dim line As String
    Dim splittedLine() As String

    Set currentBook = ActiveWorkbook
    filePath = currentBook.Worksheets("sheet1").Range("C6").Value
    Debug.Print filePath
    
    If filePath = "" Then
        MsgBox "ファイルパスを入力してください"
        Exit Sub
    End If

    ' 転記用新規ExcelBookを開く
    Set newBook = Workbooks.Add
    newBook.Activate

    'ADODB.Streamオブジェクトを生成
    Set adodb = CreateObject("ADODB.Stream")

    i = 1
    With adodb
        .Charset = "UTF-8"        'Streamで扱う文字コードをUTF-8に設定
        .Open
        .LoadFromFile (filePath)
 
        Do Until .EOS
            line = .Readtext(-2)              '"-2"は1行ずつ読み込みの定数
            splittedLine = Split(line, vbTab) '行をタブで区切って配列化
 
            For j = 0 To UBound(splittedLine)
                newBook.Worksheets(1).Cells(i, j + 1).Value = splittedLine(j)
            Next j
            i = i + 1
        Loop
 
        .Close
    End With
  
    Set adodb = Nothing
    Set newBook = Nothing
    Set currentBook = Nothing
 End Sub 

参考にしました