期間(開始日・終了日)が重複しているかどうかを判定する方法

会議室や車両、レンタル品の予約表で、「同じ部屋・同じ備品なのに期間がかぶって予約されていないか」をチェックしたい。1件ずつ目でつき合わせるのは件数が増えると現実的ではありません。結論から言うと、「自分の開始日が相手の終了日以前、かつ自分の終了日が相手の開始日以降」なら重複しているという考え方をSUMPRODUCT関数に落とし込めば、関数だけで一覧全体の重複チェックができます。この記事では具体例をもとに手順を解説します。

目次

サンプルデータ

次のような会議室の予約一覧があるとします。A列が部屋名、B列が開始日、C列が終了日です。D列に「他の予約と期間が重複しているかどうか」を自動判定します。

A(部屋) B(開始日) C(終了日) D(重複判定)
2 会議室A 2026/9/1 2026/9/3 重複あり
3 会議室A 2026/9/3 2026/9/5 重複あり
4 会議室A 2026/9/10 2026/9/12 (空欄)
5 会議室B 2026/9/2 2026/9/4 (空欄)
6 会議室A 2026/9/2 2026/9/2 重複あり

手順1: 「重複している」を数式にする

2つの期間が重複しているかどうかは、日付の大小関係だけで判定できます。「自分の開始日が、相手の終了日より後」または「自分の終了日が、相手の開始日より前」であれば、2つの期間はどこにも重なりません。逆にいえば、そのどちらでもない、つまり自分の開始日が相手の終了日以前で、かつ自分の終了日が相手の開始日以降であれば、必ずどこかで重なっています。この関係は日付に限らず、時刻や番号の範囲同士の重複判定にも同じ考え方が使えます。

手順2: SUMPRODUCTで同じ部屋の予約とすべて比較する

この条件を、同じ部屋(A列が一致)の予約すべてに対してチェックし、自分以外に1件でも当てはまる行があれば「重複あり」とします。D2セルに次の数式を入力します。

=IF(SUMPRODUCT(($A$2:$A$6=A2)*($B$2:$B$6<=C2)*($C$2:$C$6>=B2))-1>0,"重複あり","")

SUMPRODUCT関数の中身は、部屋(A列)が自分と同じで、かつ相手の開始日(B列)が自分の終了日(C2)以前、かつ相手の終了日(C列)が自分の開始日(B2)以降という3条件をすべて満たす行の数を数えています。自分自身の行も必ず1件としてカウントされてしまうため、最後に-1して自分を除外し、残りが1件以上(0より大きい)なら「重複あり」と表示しています。複数条件をSUMPRODUCTで組み合わせる基本的な考え方はSUMPRODUCTでAND/OR条件の集計をする方法でも扱っているので、あわせて確認してみてください。D2をD6までコピーすれば、部屋ごとの重複を一覧全体で自動判定できます。

2行目(9/1〜9/3)は3行目(9/3〜9/5)と9/3が重なるため「重複あり」、3行目も同じ理由で「重複あり」になります。6行目(9/2〜9/2の1日だけの予約)は2行目の期間にすっぽり収まるため「重複あり」です。4行目(9/10〜9/12)はどの予約とも日付が離れているため空欄のまま、5行目は日付は重なっていても部屋がA列で「会議室B」と異なるため、重複としてカウントされません。

よくあるつまずきポイント

  • 終了日と次の開始日がちょうど同じ日(境界)を重複とみなすかどうか: 上の数式では「9/3チェックアウト・9/3チェックイン」のように、終了日と開始日がぴったり同じ日も「重複あり」と判定します。宿泊施設の予約のように「同日中の入れ替えは重複扱いにしない」運用にしたい場合は、比較演算子を<=>=から<>に変えることで、境界がちょうど重なるだけのケースを重複から除外できます。
  • 「-1」を忘れると常に重複ありになる: SUMPRODUCTの数式は自分自身の行も必ず1件としてカウントするため、最後の-1を忘れると、他に何も重複がなくても判定が常に1(重複あり)になってしまいます。
  • 部屋名・備品名の表記ゆれ: 「会議室A」と「会議室A」(全角英字)のように表記が微妙に違うと、Excelには別の部屋として扱われ、本来チェックしたい重複が見逃されます。プルダウン(データの入力規則)で部屋名を選択式にしておくと表記ゆれを防げます。
  • 行数が非常に多い場合の負荷: この数式は行ごとに他の全行と比較するため、予約件数が数千行を超えるような一覧では計算が重くなることがあります。件数が多い場合は、部屋ごとにシートを分ける、日付で絞り込んでからチェックするなどの工夫が有効です。

まとめ

期間の重複チェックは、「自分の開始日が相手の終了日以前、かつ自分の終了日が相手の開始日以降」という条件をSUMPRODUCT関数に組み込むことで、関数だけで一覧全体を自動判定できます。境界の扱いや表記ゆれには注意が必要ですが、一度作ってしまえば予約が増えても数式をコピーするだけで対応できます。日付を条件にした集計はSUMIFで日付範囲を指定して集計する方法、複数条件の集計はCOUNTIFSで複数条件を満たすセルの個数を数える方法でも扱っているので、あわせて確認してみてください。

目次