ExcelでCSVを崩さず取り込む方法。文字化け・0落ち・日付化を防ぐ安全な手順
CSVをExcelで安全に扱いたいなら、まず結論は「ダブルクリックで開かず、[データ]タブから取り込む」です。
この手順にすると、区切り文字、文字コード、列ごとの型を確認しながら読み込めます。請求データ、顧客一覧、商品コード、郵便番号、会員IDのように、1列でも崩れると困るCSVでは特に有効です。
- 文字化けを避けたい:
データ>テキスト/CSVからを使う - 先頭の0を消したくない: 対象列を テキスト として取り込む
1-2や2026/04/01を勝手に日付化されたくない: 列型を手動で指定する- カンマ入りの住所や備考が列崩れする: 引用符付きCSVか、区切り設定を確認して取り込む
ここがポイント: CSVの事故は「開き方」でかなり防げます。内容を直す前に、Excelの取り込み方法を変えるのが先です。
この記事の対象環境
この記事は主に次の環境を前提にしています。
- Excel for Microsoft 365
- Excel 2024
- Excel 2021
- Excel 2019
- Excel 2016
- Windows版を中心に説明
Microsoftのサポート情報では、.csv をそのまま開くと、Excelは現在の既定設定で列を解釈します。細かく制御したいときは、インポート機能やテキストインポートウィザードの利用が案内されています。
なぜCSVはExcelで崩れやすいのか
CSVは見た目より単純な形式です。セルの型や文字コードの情報を、Excelファイルのように豊富には持っていません。
そのためExcel側は、開いた瞬間に「これは数値」「これは日付」「これはカンマ区切り」と推測して表示します。この自動判定が便利な一方で、実務では次の事故を起こします。
001234が1234になる1234567890123456が15桁超で丸められる04/05が日付扱いになるabc,defを含む列が2列に割れる- UTF-8の日本語が文字化けする
- セミコロン区切りCSVが1列にまとまる
とくに危ないデータ
次のような列は、最初から「数値として計算しないデータ」です。
- 社員番号
- 郵便番号
- 商品コード
- 会員ID
- 電話番号
- 16桁以上の番号
これらは数字に見えても、Excelでは文字列として扱う前提で取り込むほうが安全です。
もっとも安全な取り込み手順
最初におすすめの方法を1本に絞るなら、Power Query経由の取り込みです。
手順
- Excelを開く
データタブを開くテキスト/CSVからを選ぶ- CSVファイルを選択する
- プレビューで文字化けや列ズレがないか確認する
- 必要なら区切り文字やファイルの起点を見直す
- 必要な列を
変換で開き、列の型を調整する 閉じて読み込むでシートへ反映する
Microsoftは、UTF-8のCSVについて、BOM付きなら通常の開き方でも開ける場合がある一方、BOMなしなら データ タブの テキスト/CSVから などを案内しています。実務では、BOMの有無を毎回気にするより、最初からインポートで統一したほうが事故が少なくなります。
この方法が向いている場面
- 毎月同じ形式のCSVを受け取る
- 文字コードが毎回安定しない
- 一部の列だけテキスト扱いにしたい
- 読み込み後に再利用したい
- 更新時に再読込したい
取り込み時に必ず見る場所
- 文字が
???や意味不明な記号になっていないか - 住所や備考のカンマが別列に割れていないか
- 郵便番号やコードの先頭ゼロが残っているか
- 長い番号が指数表示になっていないか
- 日付列が想定どおりの並びか
実務でよくある失敗を、入力例で確認する
たとえば次のCSVを考えます。
customer_id,name,zip,order_code,amount,note
00125,山田太郎,012-3456,000123,1200,"東京,本社案件"
00126,佐藤花子,045-0001,000124,980,"4/5納品分"
00127,鈴木一郎,100-0001,1234567890123456,"確認中"
このCSVをダブルクリックで開くと、環境によっては次のような問題が起こります。
00125が125になる000123が123になる1234567890123456が丸められる- 備考の
東京,本社案件が列分割されることがある - 日本語が文字化けすることがある
一方、データ タブから読み込み、必要列をテキスト指定すると次の状態を保ちやすくなります。
- 顧客IDをそのまま保持
- 受注コードの先頭0を保持
- 長い番号を数値変換せず保持
- カンマ入りテキストを1セルとして保持
列ごとに型を固定したいときの方法
「この列だけは絶対に崩したくない」というときは、Power Queryかテキストインポートウィザードで列型を明示します。
Power Queryでテキストにする
Microsoftの案内では、データ > テキスト/CSVから で読み込んだあと、変換 を開いて列のデータ型を Text に変更できます。これで先頭0や長い番号を保持しやすくなります。
優先してテキストにしたい列は次のとおりです。
- ID列
- 郵便番号列
- 電話番号列
- 商品コード列
- 16桁以上の番号列
- 日付に見えるがコードとして扱う列
テキストインポートウィザードを使う場面
細かく区切りや列型を指定したいのに、.csv を普通に開くと自動解釈されてしまうことがあります。Microsoftはこの場合、.csv を .txt に名前変更して開くか、インポート機能を使う方法を案内しています。
テキストインポートウィザードでは、次の指定ができます。
- 区切り文字の選択
- 連続区切りの扱い
- 引用符の扱い
- 列ごとのデータ形式
- 不要列のスキップ
これは、取引先ごとにCSVの作りが少し違う現場でかなり役立ちます。
列崩れを防ぐチェックポイント
文字化けより気づきにくいのが列崩れです。見た目では数行だけ正常に見えて、途中から壊れていることもあります。
原因になりやすいもの
- データ中にカンマが入っている
- 区切り文字がカンマではなくセミコロン
- ダブルクォートの付け方が不正
- 改行を含むセルがある
- 受領したCSVが厳密なCSVではない
Excel側で確認すること
Microsoftのテキストインポートウィザードでは、引用符で囲まれた値の中に区切り文字があっても1つの値として取り込む動きが説明されています。つまり、"東京,本社案件" のように正しく囲まれていれば、住所や備考のカンマは本来分割されません。
確認ポイントは次の5つです。
- 区切り文字が本当にカンマか
- 文字列がダブルクォートで囲まれているか
- プレビュー上で1行目から数行だけでなく末尾付近も崩れていないか
- 備考欄や住所欄にカンマ・改行がないか
- 一部の列だけ異常に右へずれていないか
文字化けを避ける考え方
日本語CSVで多いのは、UTF-8とShift_JISの扱い差です。ただし実務で毎回エンコード判定から入るのは非効率です。
ここでは、現場で使いやすい順に整理します。
まず試す順番
- 1番目:
データ>テキスト/CSVからで取り込む - 2番目: UTF-8 BOM付きで出力し直して再読込する
- 3番目: テキストインポートウィザードで確認する
- 4番目: 元データの出力側に文字コード指定があるか確認する
Microsoftのサポートでは、UTF-8のCSVはBOM付きなら通常に開ける場合があるとされています。逆に言えば、BOMなしUTF-8を受け取る可能性がある運用では、ダブルクリック前提にしないほうが安定します。
どうしても再出力が必要なときの最小例
Excelで安全に開ける形へ寄せたいときは、CSVをUTF-8 BOM付きで書き直す方法があります。元ファイルの文字コードが分かっている場合の最小例です。
from pathlib import Path
src = Path("input.csv")
dst = Path("output_utf8_bom.csv")
text = src.read_text(encoding="utf-8")
dst.write_text(text, encoding="utf-8-sig", newline="")
このコードでできること
- UTF-8の内容を読み込む
- BOM付きUTF-8で保存し直す
- Excelで開くときの文字化けリスクを下げる
注意点
- 元ファイルがShift_JISなら、
encoding="utf-8"では読めません - 区切り文字や列型の問題は、このコードだけでは解決しません
- 先頭0や日付化を防ぐには、Excel側の取り込み設定も必要です
よくある失敗と対処
1. ダブルクリックで開いてから直そうとする
いちばん多い失敗です。Excelは .csv を開くと既定設定で解釈します。先頭0の消失や日付化は、その時点で起こります。
対処は単純です。
- 直接開かない
データタブから取り込む- 重要列は最初にテキスト指定する
2. 16桁以上の番号を数値のまま扱う
Microsoftは、Excelの数値精度が15桁までで、16桁以上は丸められると案内しています。カード番号、伝票番号、長い会員IDなどは数値ではなくテキスト前提で扱うべきです。
3. Windowsの区切り設定をむやみに変える
Microsoftは、Windowsの地域設定で既定のリスト区切りを変えられる一方、その変更は他アプリにも影響すると注意しています。
毎回のCSV読込のためだけにOS全体の設定を変えるより、まずはExcelのインポート画面で区切り文字を選ぶほうが安全です。
代替手段と使い分け
状況によっては、CSVをそのままExcelに渡さないほうが楽なこともあります。
使い分けの目安
- 単発で一度見るだけ:
テキスト/CSVからで取り込む - 毎回同じ形式を受け取る: Power Queryで手順を保存する
- 出力元を自分で制御できる: BOM付きUTF-8や適切な引用符で出力する
- コード値が多い: 先にExcelではなくテキストエディタで確認する
- 他部署へ再配布する:
.xlsxに変換してから渡す
CSVのまま配るより .xlsx が向く場面
- 先頭0を絶対に維持したい
- セル書式を含めたい
- 数式やフィルタ付きで配布したい
- 閲覧側のExcel設定差を減らしたい
迷ったときの実務ルール
最後に、現場で再現しやすいルールだけ残します。
- CSVはダブルクリックで開かない
- 最初の読込は
データ>テキスト/CSVからで行う - ID、郵便番号、電話番号、長い番号はテキスト扱いにする
- カンマ入りデータは引用符付きかを確認する
- 重要CSVは受領直後に数行だけでなく末尾まで確認する
- 定例業務はPower Queryで手順を固定する
ExcelでCSVが崩れる原因は、ファイルそのものより読み込み時の自動判定にあることが多いです。次に見るべきポイントは、元データの文字コードより先に、今の運用が「ダブルクリック前提」になっていないかどうかです。
