今回は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】業務効率化に便利なツール【まとめ】