
今回は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の入れかた
- VBAのエディタの左上の「ツール」を選択
- 参照設定を選択
- 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
関連fa-arrow-circle-right【VBA】業務効率化に便利なツール【まとめ】

