いきなり答える備忘録

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

(Gスプレッドシート)直近のx曜日の日付を求める


 Googleスプレッドシートで、「基準日(指定した日)からみて直近の○曜日」の日付を求める方法についてです。
 WEEKDAY関数を駆使する方法が有名ですが、GoogleスプレッドシートにもWORKDAY.INTL関数が導入されたのでより容易に求められるようになっています。

  • WORKDAY.INTL関数を使って直近のx曜日の日付を求められます。
  • 基準日を含めて検索することや、直前のx曜日を求めるのも容易です。

手順

基準日より後(当日を含まない)のx曜日を求める場合

 次の画像では、C2セルに「2022/4/12」という日付が入力されています。この日は火曜日です。

 この日からみて直近の(ただし基準日当日を含まないものとします)各曜日を求めるため、C5からC11の各セルに次のような式を入力しています。

 C5~C11セル(直近の日曜~土曜の日付)

=WORKDAY.INTL(C2,1,"1111110")
=WORKDAY.INTL(C2,1,"0111111")
=WORKDAY.INTL(C2,1,"1011111")
=WORKDAY.INTL(C2,1,"1101111")
=WORKDAY.INTL(C2,1,"1110111")
=WORKDAY.INTL(C2,1,"1111011")
=WORKDAY.INTL(C2,1,"1111101")

 WORKDAY.INTL関数は平日(営業日)の日付を求めるための関数で、何曜日が休日なのかを第3引数で指定することができます。その引数は7桁の数字からなる文字列で、「月~日曜日の各曜日が0(平日)か1(休日)か」を表しています(ほかに数値で指定することもできます)。
 また、第2引数の「1」は「次の平日」を表しているので、基準日がそのまま返ってくることはありません。
 これを利用して、求めたい曜日だけを平日とみなして直近の日付を求めるというわけです。


 実行するとこうなります。
 Excel(シリアル値が返ってくる)と異なり、一発で日付が出るのが気持ちいいです。

 直近の火曜日は基準日の7日後であり(当日ではない)、その他の曜日についても正しい結果が得られていることが確認できます。

基準日以降(当日を含む)のx曜日を求める場合

 ここでもC2セルに「2022/4/12」という日付が入力されています。この日は火曜日です。

 この日からみて直近の(ただし基準日当日を含む)各曜日を求めるため、C5からC11の各セルにそれぞれ次のような式を入力しています。

 C5~C11セル(直近の日曜~土曜の日付)

=WORKDAY.INTL(C2-1,1,"1111110")
=WORKDAY.INTL(C2-1,1,"0111111")
=WORKDAY.INTL(C2-1,1,"1011111")
=WORKDAY.INTL(C2-1,1,"1101111")
=WORKDAY.INTL(C2-1,1,"1110111")
=WORKDAY.INTL(C2-1,1,"1111011")
=WORKDAY.INTL(C2-1,1,"1111101")

 WORKDAY.INTL関数の第1引数を「C2-1」つまり基準日の前日とすることで、基準日当日を含む日付を検索しています。


 結果はこうなります。
 最初の例とは火曜日(基準日と同じ曜日)の結果だけが異なり、基準日そのものとなっているのがわかります。

基準日より前(当日を含まない)のx曜日を求める場合

 ここから画像は結果のみを表示します。
 この例では基準日より前(基準日を含まない)の、直近の各曜日を求めています。

 C5~C11セル(直前の日曜~土曜の日付)

=WORKDAY.INTL(C2,-1,"1111110")
=WORKDAY.INTL(C2,-1,"0111111")
=WORKDAY.INTL(C2,-1,"1011111")
=WORKDAY.INTL(C2,-1,"1101111")
=WORKDAY.INTL(C2,-1,"1110111")
=WORKDAY.INTL(C2,-1,"1111011")
=WORKDAY.INTL(C2,-1,"1111101")

 WORKDAY関数の第2引数を「-1」とすることで「直前の平日」を検索しています。
 これにより基準日を含まない、直前のx曜日が求められます。

基準日以前(当日を含む)のx曜日を求める場合

 この例では基準日以前(基準日を含む)の、直近の各曜日を求めています。

 C5~C11セル(直前の日曜~土曜の日付)

=WORKDAY.INTL(C2+1,-1,"1111110")
=WORKDAY.INTL(C2+1,-1,"0111111")
=WORKDAY.INTL(C2+1,-1,"1011111")
=WORKDAY.INTL(C2+1,-1,"1101111")
=WORKDAY.INTL(C2+1,-1,"1110111")
=WORKDAY.INTL(C2+1,-1,"1111011")
=WORKDAY.INTL(C2+1,-1,"1111101")

 WORKDAY関数の第1引数を「C2+1」とし、第2引数を「-1」とすることで「基準日の翌日からみた直前の平日」を検索しています。
 これにより基準日を含む直前のx曜日が求められます。