AccessでCSVを取り込むと、日本語が「縺」「繧」のような漢字の羅列や、読めない記号になることがあります。原因の多くは、インポート時に指定しているコードページ(文字コード)が、CSVファイルの実際の文字コードと合っていないことです。取り込んだデータを手で直すのではなく、コードページを合わせて取り込み直すのが確実です。
文字化けの見え方で当たりを付ける
| 見え方 | 考えられる状態 |
|---|---|
| 「縺」「繧」「譁」などの漢字が不自然に並ぶ | UTF-8のファイルを日本語(シフトJIS)として読んでいる |
| 「�」のような記号が出る、日本語の部分が欠ける | シフトJISのファイルをUTF-8として読んでいる |
| 先頭の列名の前にだけ見慣れない文字が付く | BOM付きUTF-8のファイルをシフトJISとして読んでいる |
| 英数字は正常で、日本語だけおかしい | 文字コードの食い違い(英数字は多くの文字コードで共通) |
目安として、Excelで「CSV UTF-8」形式で保存したファイルや、多くのWebサービスが書き出すCSVはUTF-8です。古い業務システムが出力するCSVは、シフトJISであることが多いです。ただし決めつけず、次の手順でウィザードのプレビューを見ながら確かめます。文字コード自体を判定・変換する一般的な方法は、CSVの文字コードの記事で扱っています。
確認する順番
- どの方法で取り込んでいるか(毎回ウィザードか、保存したインポート定義・インポート操作か、マクロ・VBAか)
- 使っているインポート定義のコードページは何か
- 元のCSVの文字コードに合わせてコードページを変え、プレビューで日本語が読めるか
- 正しい設定をインポート定義として保存したか
- 文字化けしたデータを片付けてから取り込み直したか
- 取り込み後の件数と文字が、元のファイルと一致しているか
最初に1を確認するのは、保存済みのインポート定義を使っている場合に備えるためです。ウィザードでその場だけ設定を変えても、次回の取り込みでまた古い定義が使われてしまいます。マクロやVBAから DoCmd.TransferText で取り込んでいる場合は、引数に指定している定義名を確認します。コードページの引数を指定していれば、その値も確認します。
ウィザードでコードページを合わせる
- 「外部データ」タブで「新しいデータ ソース」→「ファイルから」→「テキスト ファイル」を選びます。バージョンによっては、「外部データ」タブに直接「テキスト ファイル」ボタンがあります。
- CSVファイルを指定し、取り込み方法を選びます。確認している間は、既存のテーブルへの追加ではなく「新しいテーブルにインポートする」を選びます。失敗しても既存のデータに影響しません。
- ウィザードの最初の画面で「区切り記号付き」を選び、画面左下の「設定」ボタン(英語版のAdvanced)を押します。
- インポート定義の画面が開くので、「コードページ」を変更します。UTF-8のファイルなら「Unicode (UTF-8)」、シフトJISのファイルなら「日本語 (シフト JIS)」を選びます。
- 同じ画面で、フィールドの区切り記号がカンマ、文字列の引用符が
"になっているかも確認します。 - OKでウィザードに戻り、プレビューで日本語が読めるか確認します。先頭の数行だけでなく、記号や旧字体を含みそうな行までスクロールして見ます。
- 続けて、「先頭行をフィールド名として使う」、各フィールドのデータ型、主キーなどを設定して取り込みます。
ボタン名や項目名は、Accessのバージョンや表示言語によって少し違います。見当たらない場合は、ウィザードの最初の画面の下部にあるボタンを順に確認してください。
UTF-8かシフトJISか分からないときは、コードページを切り替えてプレビューを見比べ、日本語が正しく読める方を選びます。どちらにしても一部の文字がおかしい場合は、ファイル自体が文字化けした状態で保存されている可能性があります。出力元に確認します。
正しい設定をインポート定義として保存する
コードページを合わせたら、次回も同じ設定で取り込めるように保存しておきます。
- 「設定」で開いたインポート定義の画面で「名前を付けて保存」を押します。
- 「売上CSV_UTF8」のように、用途とコードページが分かる名前を付けます。
- 次回は、ウィザードの「設定」→「定義」で保存した定義を選び「開く」を押します。コードページ・区切り記号・データ型がまとめて読み込まれます。
誤ったコードページの定義がすでに保存されている場合は、「定義」からその定義を開き、コードページを直して同じ名前で上書き保存します。マクロやVBAが定義名で呼び出している場合も、上書きした内容が使われるようになります。直した後は、そのマクロやVBAで一度取り込み、文字化けが直ったことを確認します。
文字化けしたデータを片付けてから取り込み直す
取り込まれたデータは、文字化けした状態のままテーブルに保存されています。後から置換で直そうにも、正しい元の文字が分からないため現実的ではありません。
- 新しいテーブルに取り込んだ場合:そのテーブルを削除し、正しい設定で取り込み直します。
- 既存のテーブルに追加した場合:文字化けした行を特定して削除する必要があります。作業前に、データベースファイル(.accdb)を閉じた状態でコピーし、バックアップを取ります。取り込み日時や番号の範囲などで今回追加した行を特定できない場合は、取り込み前のバックアップから戻す方が安全です。
再発を防ぐには、取り込みを2段階にします。まず作業用のテーブルに新規で取り込み、件数と文字を確認します。問題がなければ、追加クエリで本番のテーブルに追加します。こうすれば、問題が起きても本番のテーブルを汚さずに済みます。
取り込み後に件数と文字を確認する
件数
- テーブルをデータシートで開き、画面下部のレコード移動ボタンに表示される件数を確認します。
- この件数を、CSVの件数と比べます。CSVの件数は、出力元のシステムが表示する件数か、テキストエディターで見た行数から見出し行を引いた数です。セル内に改行を含むCSVでは、エディター上の行数とレコード数が一致しないことがあります。
- 一部の行を取り込めなかった場合、Accessは名前に「インポート エラー」を含むテーブル(英語版ではImportErrors)を作ることがあります。テーブル一覧にあれば、どの行のどのフィールドで何が起きたかを確認します。
文字
- 日本語を含むフィールドについて、先頭・中ほど・末尾の数件を、テキストエディターで開いた元のCSVと見比べます。
- 文字化けしやすい文字を含む行も探して確認します。たとえば半角カナ、「①」「㈱」などの記号、「髙」「﨑」などの異体字、「~」「-」などです。
- 255文字を超える値がある項目は、データ型が短いテキストだと途中で切れたり、エラーとして記録されたりします。文字化けとは別の問題ですが、取り込み直すついでにデータ型も確認します。
| 確認項目 | 合っていればOK |
|---|---|
| コードページ | 元ファイルの文字コードと同じ |
| プレビュー | 日本語・記号が読める |
| インポート定義 | 正しいコードページで保存・上書き済み |
| 件数 | CSVのデータ行数と一致 |
| インポートエラーのテーブル | 作られていない、または内容を確認済み |
| 文字 | 先頭・中ほど・末尾の行と、文字化けしやすい文字が元ファイルと一致 |
