VBAでエンコードしたCSVテキストを出力する方法【CSV文字化け解決】

今回はADODB.streamを使ってCSVをエンコードしてテキストとして出力するコードを書いていきます。

・このコードが使えると...

  • CSV文字化けの解決
  • Do...Loopを使う必要がない
  • テキストで出力されるのでそのまま配列に入れられる

エンコードしたCSVテキストを出力するコード

Function encodedImportCSV(encode As String)

    Dim csv_file As String
    csv_file = Application.GetOpenFilename("CSV Files(*.csv),*.csv", , "CSVファイルを選択")

    If csv_file = "" Then
        MsgBox "キャンセルしました。"
    End If

    Dim encode_stream As New ADODB.Stream

    ' Encoding CSV file into text
    With encode_stream
        .Open
        .LoadFromFile csv_file
        .Type = adTypeText
        .Charset = encode
        encodedImportCSV = .ReadText
        .Close
    End With

End Function

使う前に...Microsoft ActiveX Data Objects 6.1 Libraryを入れておく。

・Microsoft ActiveX Data Objects 6.1 Libraryの入れかた

  1. VBAのエディタの左上の「ツール」を選択
  2. 参照設定を選択
  3. Microsoft ActiveX Data Objects 6.1 Libraryにチェックを入れる

VBAコードの解説

1. Functionを設定

Function encodedImportCSV(encode As String)
  • encodeを引数にしてUTF-8、Shift-JISなどを選択可能

2. CSVファイルを選択する

Dim csv_file As String
csv_file = Application.GetOpenFilename("CSV Files(*.csv),*.csv", , "CSVファイルを選択")

If csv_file = "" Then
    MsgBox "キャンセルしました。"
End If
  • 2行目...CSVファイルを選択。ファイルダイアログボックスが表示される
  • 4~6行目...×ボタン、またはキャンセルを押したときの処理

3. ADODBを使ってCSVをエンコードする

Dim encode_stream As New ADODB.Stream

' Encoding CSV file into text
With encode_stream
    .Open
    .LoadFromFile csv_file
    .Type = adTypeText
    .Charset = encode
    encodedImportCSV = .ReadText
    .Close
End With
  • 1行目...さっきチェックしたADODB.Streamをもってくる
  • 4~11行目...ADODBを開き設定した文字コードでエンコードする処理
  • .LoadFromFile csv_file...選択したcsv fileを読みこむ
  • .Type = adTypeText...テキスト形式で出力
  • .Charset = encode...設定した文字コードをいれる
  • encodedImportCSV = .ReadText...CSVをエンコードしたテキストで返す

VBAコードの使いかた

Sub importCSV()

    Dim csv_text As String
    csv_text = encodedImportCSV("utf-8")

End Sub
  • 標準モジュールリストにFunctionをインポートしてくる
  • 標準モジュール内でencodedImportCSV([使いたい文字コード])でOK

関連【VBA】業務効率化に便利なツール【まとめ】