なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:指定曜日だけのリストを作る

例えば「今月の土日だけの日付リストが欲しい」と思った時、逆に「平日だけ」あるいは「月水金だけ」のように曜日を指定して日付リストを作りたい時は、WORKDAY.INTL関数を使うのがいい。Excel2010以上なら使える。

まずは例題。「開始日以降、最初の月曜日」が知りたい時はどうするか。

=WORKDAY.INTL(開始日-1,1,"0111111")

WORKDAY.INTL関数は「指定日数後の稼働日を返す」関数。WORKDAY関数の時は、稼働日を平日(月~金)固定でしか指定できなかったが、International版では、第三引数で「週末(稼働日と見なされない日)」を指定できるようになった。週末は「月~日」の順に稼働日を「0」、稼働しない日を「1」として文字列で表現することもできる。ちなみに省略すれば従来通り 「月~金」が稼働日とみなされる。

例題は「月曜日以外はみんな休み」にしたいので、「"0111111"」とすれば「月曜日だけが稼働日」となってくれる。便利なので覚えておきたい関数である。

古いバージョンでも、このくらいの計算なら、

=開始日-WEEKDAY(開始日-1,3)+6

こうすればできる。ただ曜日ごとに調整値が必要になるので若干めんどくさい。

このリストを一ヶ月分表示したい時はどうするか(ここから先はスピルに対応しているバージョン前提)。

その場合は開始日に「月初日」を入力してから、

=LET(
    cal,WORKDAY.INTL(開始日-1,SEQUENCE(31),"0111111"),
    FILTER(cal,cal<EDATE(開始日,1))
)

こうすればいい。

ではここから更に応用。指定曜日を「月水金」のような文字列で指定したい場合はどうするか。

=LET(
    wd,CONCAT(ISERR(FIND({"月","火","水","木","金","土","日"},曜日))/1),
    cal,WORKDAY.INTL(開始日-1,SEQUENCE(31),wd),
    FILTER(cal,cal<EDATE(開始日,1))
)

こんな感じで「月水金」を「"0101011"」に変換できる。