表計算ソフトで時間計算、日数計算を行うための7つのレッスン 第6回

■■Lesson 6
「曜日もシリアル値」

[ここで学ぶ関数 WEEKDAY() NETWORKDAYS.INTL() ](および AND() MOD() )

基本事項(復習)
シリアル値とは、Excelの場合、1900/1/1 0:00 = 1 , 1日=1 として日付や時間を表す表現方法である。セルに 2020/4/15 のように入力すると、その値は自動的にシリアル値に変換され、該当するセルの値として格納される。

■表示形式で曜日を選択

シリアル値からは、対応する日付の曜日に関する情報も
取り出すことができる。シリアル値の入っているセルの
「表示形式」を(その他の表示形式 → ユーザー定義 から)
aaa
にすれば、「日」「月」「火」「水」「木」「金」「土」のような文字列が、
aaaa
にすれば、「日曜日」「月曜日」…… といった文字列が
そのセルに表示される。

英語表記にするには、同じように「表示形式」を
ddd
(「Sun」「Mon」「Tue」……)
dddd
(「Sunday」「Monday」「Tuesday」……)
とするだけ。

■値自体を曜日表記に

シリアル値をもとにして、セルの値そのものを「日」〜「土」などの文字列にするには、たとえば、シリアル値が入っているセル(ここでは B5 とする)の横など(たとえばC5など)に
=TEXT(B5,"aaa")
のように入力すればよい。

補足:
Excel では、1900年3月1日以前については正しい曜日を返さない(1900年のうるう年判定を間違えているため。)。

また、ロケールを使用して、以下のような表現もできる。
=TEXT(B5,”[$-ja]ddd”)


■曜日情報を数値に変換 WEEKDAY()

シリアル値から対応する曜日を数値として取り出すには
WEEKDAY() 関数を使う。(この関数はデフォルトで
1[日曜日] ~ 7[土曜日]の値を返す)

<基本>
入力:
=WEEKDAY(“2021/6/9”)
表示:
4

これは、2021年6月9日は水曜日である、
ということを意味する。

eg)
セルB5に入力されたシリアル値が13日の金曜日であるかそうでないかを判定する関数

=IF(AND(DAY(B5)=13,WEEKDAY(B5)=6),"13日の金曜日","ふつうの日")

特定の年(I12)の特定の月(J12)の13日が金曜日かどうかを判定するなら、

=IF(WEEKDAY(DATE(I12,J12,13))=6,"13日は金曜日","とくになんでもない")

シリアル値が入っているセルについて、「日曜日の場合、「日」と表記し、文字を赤くする」といった場合は、「表示形式」を aaa に設定し、さらに条件付き書式で「数式が」を選び、

=WEEKDAY(B5)=1

あるいは、

=TEXT(B5,"aaa")="日"

などとして条件を設定する。

補足メモ:
日付・時間に関するよく使うそのほかの表示形式
2014/12/25
e 26
ge H26
gge 平26
ggge 平成26
yy 14
yyyy 2014
m 12
mmm Dec
mmmm December
d 25

表示形式の設定において、m は「分」と「月」両方の意味を表すが、どちらであると解釈されるかは文脈(h の直後であれば「分」など)によって決まる。

WEEKDAY() 関数は、第2引数として返り値の「パターン」を指定することができる。

1 あるいは省略した場合
  1 日曜日 〜 7 土曜日
2
  1 月曜日 〜 7 日曜日
3
  0 月曜日 〜 6 日曜日

これは、たとえば、月曜日始まりの万年月間カレンダーを作る場合などに便利。
A1 にその月の始まりにあたる日付( 2020/12/1 など)を入力し、カレンダーの左上はしのセルの値を
=DAY(A1-WEEKDAY(A1,2)+1)
あるいは
=DAY(A1-WEEKDAY(A1,3))
とすればよい。

補足:
より新しいバージョンのExcelでは、以下のようなパターンも用意されており、何曜日始まりのカレンダーであっても簡単に作れるようになった。また、Lesson 7で説明する「第n何曜日」などの計算に用いることができる。
11 1 月曜日 〜 7 日曜日(2 と同じ)
12 1 火曜日 〜 7 月曜日
13 1 水曜日 〜 7 火曜日
14 1 木曜日 〜 7 水曜日
15 1 金曜日 〜 7 木曜日
16 1 土曜日 〜 7 金曜日
17 1 日曜日 〜 7 土曜日(1 と同じ)

練習問題
セル D3 に西暦年が4桁の数値で入力されているとする。このとき、
1. セル D4 に、D3 年の元旦の日付をシリアル値で表示させる場合、このセルにどのような数式を入力すればよいか答えなさい。
2. セル D4 に入力された日付が日曜日であった場合、その翌日の日付を表示し、そうでない場合は空文字列を表示する数式を作成しなさい。ただし、D4 はかならずしも元旦であるとは限らないものとする。


1.  =DATE(D3,1,1)
2. =IF(WEEKDAY(D4)=1,D4+1,””)

■ 所定の日数 NETWORKDAYS.INTL()

注 以下、本節の「所定の日数」の計算では祝日などのイレギュラーな値は扱わない。祝日については Lesson 7 でとりあげる。

特定の期間の「所定の勤務日数」を求めるには
NETWORKDAYS.INTL() 関数(Excel 2010以降)を使う。ここでいう「所定の勤務日」は、デフォルトで土曜日、日曜日以外の「平日」のことである。

<基本>
入力:
=NETWORKDAYS.ITNL(“2021/6/1”,”2021/6/10”)
表示:
8

たとえば、日付(シリアル値)B2 が含まれる月(1日〜月末)の所定の勤務日数(休日は土曜日、日曜日とする)なら

=NETWORKDAYS.INTL(B2-DAY(B2)+1,EOMONTH(B2,0),1)

15日締め、当月25日払いの事業所のC1年C2月度の給与に対応する期間の所定の労働日数を求める(休日は、同じく、土曜日と日曜日)なら

=NETWORKDAYS.INTL(DATE(C1,C2-1,16),DATE(C1,C2,15),1)

(上記、いずれも第3引数は省略可)。

補足メモ:
これと似た関数で、Excel 2007以前から存在するNETWORKDAYS() があるが、この関数は週末(非営業日)が「土曜日、日曜日」に限られる。

NETWORKDAYS.INTL() の第3引数は休日となる「週末」の曜日を表し、以下のような値をとることができる。

1 土曜日・日曜日
2 日曜日・月曜日
3 月曜日・火曜日
4 火曜日・水曜日
5 水曜日・木曜日
6 木曜日・金曜日
7 金曜日・土曜日
11 日曜日のみ
12 月曜日のみ
13 火曜日のみ
14 水曜日のみ
15 木曜日のみ
16 金曜日のみ
17 土曜日のみ

これら以外の休日のパターンを扱うには、以下のような方法を用いる。

———————
ある期間(A1〜A2)に含まれる特定の曜日の数(以下の例の場合 6 = 金曜日)を求めるには、以下の関数を使うことができる。

=INT((A2-MOD(A2-6,7)-A1+7)/7)

これを利用し、休日が水曜日、土曜日の事業所の A1〜A2 の期間の稼働日数を求める関数は以下のとおり。

=A2-A1+1-INT((A2-MOD(A2-4,7)-A1+7)/7)-INT((A2-MOD(A2-7,7)-A1+7)/7)
———————-

じつはこれは、NETWORKDAYS.INTL() を使っても同じことが実現できる。以下のようにすればい。
(休日かそうでないかは月〜日の順番で7桁の数値で表す)

=NETWORKDAYS.INTL(A1,A2,"0010010")

応用:
毎週日曜日が休日で、月曜日〜金曜日の所定の労働時間が7時間30分、土曜日の所定が4時間の事業場のB2(シリアル値)が含まれる月(月初〜月末)の所定労働時間を求める。
=NETWORKDAYS.INTL(B2-DAY(B2)+1,EOMONTH(B2,0),1)*"7:30"+INT((EOMONTH(B2,0)-MOD(EOMONTH(B2,0)-7,7)-B2-DAY(B2)+1+7)/7)*"4:00"

■1年のうちの第何週かを求める


特定の日付が 1年のうちの「第何週であるか」を調べるためには、WEEKNUM() 関数を使うことができる。この関数では、第2引数として、「週の始まりを何曜日とするか」を指定する( 月曜日 〜 日曜日:11 〜 17)。
また、Excel 2013 以降では ISOWEEKNUM() 関数を使うこともできる。

たんに、ある日(C22)が(たとえば)その年の1月1日から数えて何週目にあたるか、を返すなら、
=ROUNDUP((C22-DATE(YEAR(C22),1,0))/7,0)
でよい。
また、セルの「表示形式」を ww にすると、その日が
(日曜日始まりで)1年のうちの第何週にあたるかを表示する。

この記事が気に入ったらサポートをしてみませんか?