重なりのある数値区間の組を取り出す
開始点と終了点のある一覧から、区間が重なる組み合わせを探します。一方がもう一方に含まれる場合も残し、端で接するだけの組は除きます。
区間が重なっているかを調べるには、片方の開始点がもう片方の終了点より前にあることを、両方向で確かめます。JOIN SHEETでは同じ一覧を2つ読み込んで区間の組を作り、2つの差を計算して判定します。これなら、一方の区間がもう一方に完全に含まれる組も見つかります。
包含と端点だけの接触を区別する
この架空の例では、区間4(2~4)は区間1(0~10)に含まれます。区間1と3は10で接するだけなので除外します。
比較用に、同じ一覧を2つ用意します。読み込む前に各区間へ重複しない数値IDを付け、コピーの列名をFirst・Secondに分けてください。以下の表やIDは、このように元のファイルで準備したものです。
FirstRanges
| Route | FirstID | FirstStart | FirstEnd |
|---|---|---|---|
| R | 1 | 0 | 10 |
| R | 2 | 8 | 12 |
| R | 3 | 10 | 15 |
| R | 4 | 2 | 4 |
SecondRanges
| Route | SecondID | SecondStart | SecondEnd |
|---|---|---|---|
| R | 1 | 0 | 10 |
| R | 2 | 8 | 12 |
| R | 3 | 10 | 15 |
| R | 4 | 2 | 4 |
同じ区間一覧を2つの役割で比較する
- FirstRangesとSecondRangesを読み込み、Route同士を「一致する行のみ」で結びます。同じRouteの4行×4行で最初は16組です。両方のRoute列は結果から非表示にできます。
- 「結果を整理」→「計算」でIDGap = SecondID − FirstIDを作り、その下の「絞り込み」でIDGapが0「より大きい」と設定します。自己・逆順の組がなくなり6組になります。
- 次にGapAB = FirstEnd − SecondStart、GapBA = SecondEnd − FirstStartを「引き算 · A − B」で追加します。AとBを逆にしないでください。
- 計算の下でGapABが0「より大きい」、GapBAが0「より大きい」という絞り込みをそれぞれ追加します。両方の条件を満たす必要があります。
- 「適用」を押してから「結果のプレビュー」で1–2、1–4、2–3の3組を確認して保存します。IDGap・GapAB・GapBAは判定の根拠として結果に残します。
重なる3組を確認する
1–4は一方が他方に完全に含まれていても検出されます。1–3はGapAB=0なので除かれます。GapABとGapBAは判定用の差で、重なった長さではありません。1–4の実際の重なりは2で、GapABの8ではありません。
| FirstID | FirstStart | FirstEnd | SecondID | SecondStart | SecondEnd | IDGap | GapAB | GapBA |
|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 10 | 2 | 8 | 12 | 1 | 2 | 12 |
| 1 | 0 | 10 | 4 | 2 | 4 | 3 | 8 | 4 |
| 2 | 8 | 12 | 3 | 10 | 15 | 1 | 2 | 7 |
元表の色付けではなく確認用の一覧
各区間のStartとEndは数値にし、Start < Endになることを確認します。原文にある12+50のような測点表記は、読み込む前に1250のような数値へ変換してください。アプリで自動変換はしません。端で接する組も残したい場合は、両方の差の条件を0以上に変えます。
同じRouteがn行あると、最初の候補はn²行になります。小さな一覧で試すか、確認対象を十分に分けてください。結果として作るのは重なる区間の一覧で、元のセルに色を付ける操作ではありません。
自分のファイルで始めましょう
JOIN SHEETを使ってみる ↗Excel・CSVの作業はPCでご利用ください。
新しいタブで開くため、作業中のデータは置き換わりません。
サンプルの検証日:
出典
How can I flag overlaps in number ranges? (Reddit r/excel)
原文は道路作業の2班が記録した開始・終了測点について、区間の重なりを見つける方法を尋ねています。 上の表と手順は、この質問を参考に別途作成した架空の例です。質問者の実データや製品の利用体験ではありません。