いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)日付が同じ週か判定する

 Googleスプレッドシートで、2つの日付が同じ週に属しているかを判定する方法についてです。
 WEEKNUM関数を使うのが手っ取り早いですが、年をまたいだ日付の判定に難がありますので別の方法を試してみます。

  • WEEKDAY関数を使って、その日付が属する週を区別することができます。

手順

週が日曜から始まる場合

f:id:accs2014:20220202172848p:plain:right:w400

 画像ではC列に日付が、B列にその曜日が記録されています。
 これに対しC3セルに「=C3-WEEKDAY(C3)」と入力して式を下方にコピーしています。
 この式は(週が日曜から始まるとみなして)同じ週に属する日付に対して同じ値を返すので、日付が属する週を区別することができます。


 ただし、返されている値は「前の週の最終日」です。週を「判定」「区別」するにあたってはこれで何も支障はありませんが、当該週の日付を返す方が都合がよいのであれば、式に「+1」を加えるなどすればよいでしょう


f:id:accs2014:20220202172852p:plain:right:w550

 上記の式を踏まえて、ここでは2つの日付が同じ週なのかどうかを判定しています。
 D3セルに次のような式を入力し、下方にコピーしています。

 D3セル

=IF(B3-WEEKDAY(B3)=C3-WEEKDAY(C3),"同じ週","別の週")

 最初の画像に照らして間違いない結果になっていることが確認できます。

週が月曜から始まる場合

f:id:accs2014:20220202172856p:plain:right:w400

 上記の例と同様に、C列に日付が、B列にその曜日が記録されています。
 これに対しC3セルに「=C3-weekday(C3,2)」と入力して式を下方にコピーしています。
 この式は(週が月曜から始まるとみなして)同じ週に属する日付に対して同じ値を返すので、日付が属する週を区別することができます。


 ただし、ここでもやはり返されている値は「前の週の最終日」です。当該週の日付を返す方が都合がよいのであれば、式に「+1」を加えるなどしてください。


f:id:accs2014:20220202172900p:plain:right:w550

 上記の式を踏まえて、2つの日付が同じ週なのかどうかを判定しています。
 D3セルに次のような式を入力し、下方にコピーしています。

 D3セル

=IF(B3-WEEKDAY(B3,2)=C3-WEEKDAY(C3,2),"同じ週","別の週")


WEEKNUM/ISOWEEKNUM関数の使用

f:id:accs2014:20220202172904p:plain:right:w400

 WEEKNUM関数を使えばその日が属する週番号を得ることができるので簡単に週を区別することができますが、異なる年の日付を比較する場合には使えません。
 画像は各日付をWEEKNUM関数(第2引数を省略=週は日曜日スタート)で評価した様子です。WEEKNUM関数は1月1日に対しては必ず「1」を返し、そこを起点として週番号を数えるようになっているため、本来同じ週である2021/12/31(金曜日)と2022/1/1(土曜日)に対する結果が全く異なるものとなっています。また、WEEKNUM関数を使うと、ほぼ1年離れた日付に対して同じ値を返してしまうこともありますので、2つの日付が「同じ週かどうか」という厳密な比較を行うのはかえって困難となります。
 また、ISOWEEKNUM関数なら年の最初の月曜日から「1」番の週が始まるため、同じ週の日付に対し異なる値を返すことはありませんが、やはり基本的に1年離れた日付に対して同じ値を返してしまうことと、週が月~日固定で自由に設定できない難点があります。