CSV を文字化けさせずに読み込む(UTF-8 と Shift_JIS の扱い)

公開日:2026年10月4日 執筆:Takuya カテゴリ:ファイル・CSV

CSV を Excel で開くと文字化けしたり、先頭の0が消えたりする問題を避けて、文字コードを指定して読み込むマクロです。ADODB.Stream を使った方法を解説します。

なぜ文字化けするのか

CSV はただのテキストファイルで、どの文字コードで保存されているかはファイルの中に書かれていません。Excel は CSV をダブルクリックで開くと Shift_JIS とみなすことが多いため、UTF-8 で出力された CSV では日本語が文字化けします。

また、Excel で直接開くと、「00123」のような商品コードが数値の 123 に変換されたり、「1-2」が日付になったりします。取り込み処理をマクロで行えば、文字コードを指定し、値を文字列のまま扱えます。

ADODB.Stream で文字コードを指定して読む

ADODB.Stream の Charset に "UTF-8" や "Shift_JIS" を指定すると、その文字コードとしてファイルを読み込めます。読み込んだ全文を改行で分けて1行ずつ処理します。

Function ReadText(ByVal path As String, ByVal charset As String) As String
    Dim st As Object
    Set st = CreateObject("ADODB.Stream")
    st.Type = 2                 ' テキスト
    st.Charset = charset        ' "UTF-8" または "Shift_JIS"
    st.Open
    st.LoadFromFile path
    ReadText = st.ReadText
    st.Close
End Function

シートに取り込むコード

読み込んだテキストを行と列に分け、すべて文字列としてシートに書き込みます。セルの表示形式を先に「文字列」にしておくことで、先頭の0や日付への自動変換を防ぎます。

Sub ImportCsv()
    Dim txt As String, lines As Variant, cols As Variant
    Dim ws As Worksheet, i As Long, j As Long, n As Long, buf() As Variant

    txt = ReadText(ThisWorkbook.Path & "\受注.csv", "UTF-8")
    txt = Replace(txt, vbCrLf, vbLf)
    lines = Split(txt, vbLf)

    Set ws = ThisWorkbook.Worksheets("取込")
    ws.Cells.Clear
    ws.Cells.NumberFormat = "@"                 ' すべて文字列として扱う

    For i = 0 To UBound(lines)
        If Len(lines(i)) > 0 Then
            cols = Split(lines(i), ",")
            ReDim buf(1 To 1, 1 To UBound(cols) + 1)
            For j = 0 To UBound(cols)
                buf(1, j + 1) = Replace(cols(j), """", "")    ' 囲みの " を外す
            Next j
            n = n + 1
            ws.Cells(n, 1).Resize(1, UBound(cols) + 1).Value = buf
        End If
    Next i
    MsgBox n & " 行を取り込みました"
End Sub

この方法の限界と注意点

この記事のコードは、カンマで単純に区切る方法です。項目の中にカンマや改行を含むデータ(例:"東京都千代田区1-1,ビル5F")があると、列がずれてしまいます。そうしたデータがある場合は、ダブルクォーテーションで囲まれた部分を考慮して分割する処理が必要です。

また、UTF-8 の CSV の先頭に BOM(目に見えない識別用の文字)が付いていても、ADODB.Stream は Charset に UTF-8 を指定すれば正しく扱います。文字コードが分からないときは、メモ帳でファイルを開き、右下に表示される文字コードを確認してください。

  • 文字コードはメモ帳の右下で確認できる
  • 項目内のカンマ・改行には別途対応が必要
  • 取り込み先は事前に文字列書式にする

※ADODB.Stream は Windows 版 Excel で利用できます。

ほかの記事