Excelの表を結合すると行数が増えるのはなぜ?
同じ顧客IDの注文2件と配送先3件を結合すると6行になります。行を削除する前に重複キーと結合条件を確認する方法を解説します。
結合後に行数が増えたら、まず結合キーの重複を確認してください。同じ顧客IDの注文が2件、配送先が3件あれば一致する組み合わせは2×3で6行です。JOIN SHEETの結合は最初の一致だけを返すのではなく、一致するすべての組み合わせを作ります。
注文2件が6行になる仕組み
架空の顧客C10には注文O10・O20と、本社・倉庫・店舗の配送先があります。注文表に配送先の指定がないため、顧客IDだけでは使う住所を1つに決められません。
この例の図はデータの関係を示す説明図で、実際の操作画面ではありません。
行を削除する前に接続を確認する
- 注文の「顧客ID」を配送先の「登録ID」へ接続し「一致する行のみ」を選びます。
- 「結果のプレビュー」でO10とO20の出現回数を見ます。
- 接続線のメニューから「接続状態を確認」を開き「確認する」を押します。
- 「詳細な数値と例」の「重複キーを含む行」と「重複キーの種類数」を確認します。前者は注文側2行・配送先側3行、後者は両側とも1種類です。
- 元データでC10の繰り返しを確認します。ここで示す重複件数は、重複コードの一覧そのものではありません。
同じ注文番号でも配送先が違う
| 注文番号 | 顧客ID | 配送先 |
|---|---|---|
| O10 | C10 | 本社 |
| O10 | C10 | 倉庫 |
| O10 | C10 | 店舗 |
| O20 | C10 | 本社 |
| O20 | C10 | 倉庫 |
| O20 | C10 | 店舗 |
6行はすべて同じ内容ではありません。配送先が違う行を機械的に削除すると必要な情報が失われます。また、注文金額をそのまま合計すると配送先の数だけ重複計上するおそれがあります。
注文ごとの配送先を1つにするには?
注文にも配送先コードがあれば、顧客IDと配送先コードの2つの条件で接続します。既定の配送先だけが必要なら、配送先シートをその条件で絞ってから結合できます。どの住所を採用するか決まっていない場合は、先に業務上のルールを決めてください。
「接続状態を確認」が調べるのは選択した2シート間です。ほかの接続や結果の整理を含む最終件数とは異なる場合があります。条件を直した後は最終結果の行数と注文番号も照合しましょう。
繰り返しの作業を減らす
シートを接続・比較して、必要な結果を確認できます。
この記事はProプランの利用環境を前提としています。
JOIN SHEETを使ってみる ↗Excel・CSVの作業はPCでご利用ください。新しいタブで開くため、作業中のデータは置き換わりません。
サンプルの検証日:
出典
Why do multiple-table joins produce duplicate rows? — Stack Overflow
Power query merge tables results in duplicate rows — Reddit r/excel
公開質問の結合による行数増加を独立した架空例で説明しています。質問者の実データやJOIN SHEETの利用事例は使用していません。