表計算ソフトで時間計算、日数計算を行うための7つのレッスン 第6回
■■Lesson 6
「曜日もシリアル値」
[ここで学ぶ関数 WEEKDAY() NETWORKDAYS.INTL() ](および AND() MOD() )
■表示形式で曜日を選択
シリアル値からは、対応する日付の曜日に関する情報も
取り出すことができる。シリアル値の入っているセルの
「表示形式」を(その他の表示形式 → ユーザー定義 から)
aaa
にすれば、「日」「月」「火」「水」「木」「金」「土」のような文字列が、
aaaa
にすれば、「日曜日」「月曜日」…… といった文字列が
そのセルに表示される。
英語表記にするには、同じように「表示形式」を
ddd
(「Sun」「Mon」「Tue」……)
dddd
(「Sunday」「Monday」「Tuesday」……)
とするだけ。
■値自体を曜日表記に
シリアル値をもとにして、セルの値そのものを「日」〜「土」などの文字列にするには、たとえば、シリアル値が入っているセル(ここでは B5 とする)の横など(たとえばC5など)に
=TEXT(B5,"aaa")
のように入力すればよい。
また、ロケールを使用して、以下のような表現もできる。
=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")="日"
などとして条件を設定する。
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))
とすればよい。
練習問題
セル D3 に西暦年が4桁の数値で入力されているとする。このとき、
1. セル D4 に、D3 年の元旦の日付をシリアル値で表示させる場合、このセルにどのような数式を入力すればよいか答えなさい。
2. セル D4 に入力された日付が日曜日であった場合、その翌日の日付を表示し、そうでない場合は空文字列を表示する数式を作成しなさい。ただし、D4 はかならずしも元旦であるとは限らないものとする。
答
1. =DATE(D3,1,1)
2. =IF(WEEKDAY(D4)=1,D4+1,””)
■ 所定の日数 NETWORKDAYS.INTL()
特定の期間の「所定の勤務日数」を求めるには
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引数は省略可)。
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年のうちの第何週にあたるかを表示する。
この記事が気に入ったらサポートをしてみませんか?