この記事は
VBAでcsvファイルを読み込んだ際に発生する文字化けの対処法についての記事です。
使用状況
- Javascriptでスクレイピングして出力したcsvファイルの読み込み
- データベースからcsvファイルをはき出したものをエクセルでの表示
(忙しい人向け)
文字化け回避しながらファイル取り込み処理部分のみのソースコードです。下記のコードを入力し、”fPath”に取得したファイルパスを代入するだけでcsvファイルを文字化けせずに読み込むことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Dim buf As String Dim tmp As Variant Dim fPath As String '※取り込むファイルのパス' Dim i As Long, j As Long '※"fPath"にファイルのパスを入力' fPath = "hoge" With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open .LoadFromFile fPath Do Until .EOS buf = .ReadText(-2) i = i + 1 tmp = Split(buf, ",") For j = 0 To UBound(tmp) Cells(i, j + 1) = tmp(j) Next j Loop .Close End With |
ソースコード
あらかじめセルB2に取り込むcsvファイルのパスの仕込みやファイル読み込み用のシートを追加、読み込んだcsvファイルの行数列数関わらず対応できるなど、より実用化を意識したソースコードの例となっております。
(読み込みたいファイルのパスを取得するVBAは別記事にて解説いたします。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | Sub PasteSalesData() Dim buf As String Dim fPath As String '取り込むファイルのパス' Dim WS As Worksheet '新規作成シート' Dim i As Long, j As Long Dim tmp As Variant '-----事前準備-----' 'B2が空白かをチェックします' If Cells(2, 2) = "" Then MsgBox "csvファイルが選択されていません。" 'csvファイル読み込み処理を飛ばして、下から2行目にあるcontinueまで飛びます。' GoTo Continue End If '拡張子込みのファイル名取得' fPath = Cells(2, 2).Value '情報反映用シート新規作成' Set WS = Sheets.Add() 'ファイル名をシート名に反映←①代入' WS.Name = WSName '-----csvファイル読み込み実装部分(文字化け回避)-----' '文字化け回避のおまじない' With CreateObject("ADODB.Stream") 'ここで読み込んだcsvファイルを' .Charset = "UTF-8" .Open '指定したパスのcsvファイルを読み込んでいる' .LoadFromFile fPath Do Until .EOS 'csvファイルを1行ずつ読み込み' buf = .ReadText(-2) i = i + 1 'csvファイルをカンマ区切りで分解して配列として格納' tmp = Split(buf, ",") For j = 0 To UBound(tmp) Cells(i, j + 1) = tmp(j) Next j Loop .Close End With MsgBox "CSVファイルを読み込みました。" '単体チェックで引っかかった場合の処理遷移先' Continue: End Sub |
まとめ
ポイントはtmpが配列で読み込んだcsvファイルのデータをすべて握っているので、それをどううまく抽出するかです。細かい解説はソースコード内に記載しておりますのでそちらをご残照くださいませ。