先日の「年と月を指定して日付リストを作る方法」の続きというか別アプローチです。一から日付リストを作る場合は前回の方法でよいのですが、既に用意されているリストから特定の曜日だけを抽出する場合はどうすればいいでしょうか。
指定の曜日を抽出する場合、まずは日付が何曜日かを判定する必要があります。判定方法としては WEEKDAY関数(もしくは MOD関数)を使う方法と、TEXT関数を使う方法があります。
曜日の判定(WEEKDAY関数)=WEEKDAY(日付セル) 「1(日曜日)」~「7(土曜日)」の数値を返す
曜日の判定(MOD関数)=MOD(日付セル,7) 「0(月曜日)」~「6(日曜日)」の数値を返す
曜日の判定(TEXT関数)=TEXT(日付セル, "aaa") 「日/月/火/水/木/金/土」を返す
見た目がわかりやすいのは TEXT関数でしょうか。例えば「テーブル1」の「日付」列から、月曜日の日付だけを抽出したい場合は、下記のようにします。
月曜日を抽出=FILTER(テーブル1[日付],TEXT(テーブル1[日付],"aaa")=C1)
こんな感じです。簡単ですね。
これを応用すれば、すべての曜日をスピルで表示させることもできます。
すべての曜日をリスト抽出=LET( 日付,テーブル1[日付], IFERROR(DROP( REDUCE("",C1:I1,LAMBDA(x,y,HSTACK(x,FILTER(日付,TEXT(日付,"aaa")=y)))) ,,1),"") )
月曜日開始なら下記の方法でもいいです。
すべての曜日をリスト抽出(別案)=LET( 日付,テーブル1[日付], 曜日,TEXT(日付,"aaa"), 折り返し,IFERROR(WRAPROWS(日付,7),""), 並び順,TOROW(WEEKDAY(TAKE(日付,7),2)), SORTBY(折り返し,並び順) )
折り返し表示してから並べ替えているだけなので、やっていることは単純ですね。
「あれ、だったらこれで七曜カレンダーも作れる?」と思った方、おしい。カレンダーを作るのはもっと簡単なのです。
月曜開始のカレンダー(月跨ぎ表示)=LET( 日付,テーブル1[日付], 初日,TAKE(日付,1), SEQUENCE(5,7,初日-WEEKDAY(初日,3)) )
日曜開始にしたければ、WEEKDAY関数の「3」を「2」にするだけです。