導入
販売SaaSから今月分のCSVを取り込んだら、先月までA列が「顧客ID」だったのにA列が「案件名」になっていた。VLOOKUPがすべて崩れて、月次集計が動かなくなった。出力側でCSVの列順がいつのまにか変わっていた、というケースはありませんか。
これは取込担当者のチェック漏れではなく、CSVの列順が固定されていないことが原因です。本記事では、CSV取込テンプレートで列順を固定し、列ズレを取込前に検知する仕組みを整える手順をまとめます。
この記事で解決すること
| 項目 | 内容 |
|---|---|
| 解決する課題 | 取込時に列ズレが起きる |
| 主な原因 | 出力元や作成者ごとに列順が違う |
| 解決方法 | CSVテンプレートの列順を固定する |
| 対象業務 | CSV取込・請求管理・販売管理 |
| 対象人数 | 3〜30人 |
| 難易度 | ★☆☆☆☆ |
| 作業時間 | 20分 |
| 用意するもの | 対象のExcelファイル/編集権限/取込元との列順合意 |
| 効果 | 取込ミスを減らせる |
| 向かないケース | 手作業で見るだけの表 |
CSVテンプレートを1枚決めれば、取込側と出力側の認識ズレが構造的になくなります。列追加・順序変更の管理コストも下がります。
なぜその管理表はうまくいかないのか
- 出力元(CSVを作る側)が知らずに列順を変えている
- 取込先のExcelの列順が後から変わってCSV側と合わなくなる
- 取込時に列順をいちいち確認していない
- 同じシステムから出力でも、作成者やバージョンで列順が違う
- VLOOKUPが列番号指定(FALSE未指定)で組まれていて、列ズレに弱い
担当者のチェック漏れではなく、列順を「両者合意のテンプレート」として固定していないことが原因です。見直しは、取込先の列順を1つに決め、CSV側もそれに合わせるところから始めます。
完成イメージ
直す前 — 列順がいつ変わるか分からない:
| A | B | C | D |
|---|---|---|---|
| 顧客ID | 案件名 | 金額 | 日付 |
CSV出力側が「日付」「顧客ID」「案件名」「金額」の順で出してきて取込が壊れる。
直した後 — テンプレートで列順固定+ヘッダー照合:
シート「CSV取込テンプレート」(列順を固定)
| A | B | C | D |
|---|---|---|---|
| 顧客ID | 案件名 | 金額 | 計上日 |
取込時にヘッダー照合でテンプレートと一致するかを自動チェック→不一致なら警告。
改善手順
ステップ1. 取込先のExcel管理表の列順を確定する
まず取込先(Excel側)の列順を1つに決めます。
操作: 別シート「CSV列順定義」を作り、A列に列順番号、B列にカラム名、C列に型、D列に必須/任意を記入する。
記入例:
| 列順 | カラム名 | 型 | 必須/任意 |
|---|---|---|---|
| 1 | 顧客ID | 文字列 | 必須 |
| 2 | 案件名 | 文字列 | 必須 |
| 3 | 金額 | 数値 | 必須 |
| 4 | 計上日 | 日付(yyyy-mm-dd) | 必須 |
| 5 | 備考 | 文字列 | 任意 |
「この5列だけ受け取る、列順は固定」と一文で示せるレベルに整理する。
ステップ2. CSVテンプレートを用意する
CSV出力側に「このフォーマットで出してください」というテンプレートを渡します。
操作: Excelで列順を整えたテンプレートをCSV保存→「CSVテンプレート.csv」として共有フォルダに置く。出力側にも同じテンプレートを共有する。テンプレートには列名のヘッダー行のみ入れ、データ行は空にする。
記入例(CSVテンプレートの中身):
顧客ID,案件名,金額,計上日,備考
出力側はこのヘッダーをそのまま使い、データ行を埋めて返す。
ステップ3. 列名ヘッダーで照合する仕組みを入れる
取込時に列順が変わっていないかを自動チェックします。
操作: 取込シートのA1〜E1にテンプレートの列名を固定で入れる。取込スクリプトまたはマクロで、新CSVのヘッダー行とテンプレートのヘッダー行を文字列比較する。=IF(EXACT(A1,"顧客ID"),"OK","NG") のような確認セルを追加。
記入例:
| セル | 数式 | 期待値 |
|---|---|---|
| A2 | =EXACT(取込CSV!A1,”顧客ID”) | TRUE |
| B2 | =EXACT(取込CSV!B1,”案件名”) | TRUE |
| C2 | =EXACT(取込CSV!C1,”金額”) | TRUE |
✗悪い例: 列番号指定(VLOOKUPで ,3,FALSE のように列番号で参照)→ 列順が変わると即崩れる
◎良い例: INDEX-MATCH やテーブル名参照で列名で取得 → 列順が変わっても列名で追える
ステップ4. テンプレート違反のCSVを取り込まないルールにする
ヘッダー照合でNGが出たCSVは取り込まないルールを明文化します。
操作: 取込手順シートに「ヘッダー照合エラー時の対応」を追記。出力側に差し戻す手順(連絡先、再出力依頼テンプレ)も含める。
記入例:
| 状態 | 対応 |
|---|---|
| ヘッダー照合 全OK | 取込続行 |
| 1列でもNG | 取込中止→出力側に再出力依頼 |
| 列が不足 | 必須列が欠けていないか確認→不足なら再出力依頼 |
| 列が増えている | テンプレート更新の検討→未承認列は無視 |
ステップ5. テンプレート変更時の手順を決める
業務要件でテンプレートを変更する必要が出たときの手順を残します。
操作: 別シート「テンプレート変更履歴」を作り、A列に変更日、B列に変更内容、C列に旧バージョン、D列に新バージョンを記入。変更時は出力側と取込側の両方を同時に更新する。
記入例:
| 変更日 | 変更内容 | 旧版 | 新版 |
|---|---|---|---|
| 2024-04-01 | 「備考」列追加 | v1.0(4列) | v1.1(5列) |
| 2024-06-01 | 「担当者ID」列追加 | v1.1 | v1.2(6列) |
実務での注意点
- 手作業で見るだけの表(外部CSVを取り込まない表)にはテンプレート整備の手間が見合いません。
- 出力側がSaaSベンダー製で列順を制御できない場合は、Power Queryで列の並び替えを取込時に自動化します。
- ヘッダー照合は完全一致(EXACT)で行います。半角全角や末尾スペースの違いで誤検知が出ます。
- テンプレート変更時に出力側と取込側の同期がズレると、取込全停止になります。変更前にテスト取込を1回必ず行います。
- テンプレートはバージョン番号付きで管理します。v1.0、v1.1のように世代管理できる形が望ましいです。
まとめ
CSV取込時に列ズレが起きる原因は、列順を両者合意のテンプレートとして固定していないことです。テンプレートを用意してヘッダー照合の仕組みを入れれば、列ズレを取込前に検知でき、月次集計の崩壊を防げます。
次にやることは、対象ファイルの取込先列順を1つ決め、テンプレートCSVを共有フォルダに置くことです。あわせて、取込元の記録は取込元・取得日・担当者を記録する手順、必須列チェックは必須列を取込前に確認する手順も参考になります。

