Excel (エクセル) 学習室 / KENZO30


エクセル中級 21

中級・特別編トップへ

Excel(エクセル)学習室 HOME

   中 級 21

Excelの基礎

  日付/時刻関数(WEEKDAY関数)
   日付/時刻関数(WORKDAY、NETWORKDAS関数)

 

 

日付/時刻関数(WEEKDAY関数)

WEEKDAY関数

WEEKDAY関数は、シリアル値や日付文字列から曜日に対応する数値を求める関数です。この求められた数値から曜日を表示させたり、曜日の判定などに使ったりします。

書式で表すと、WEEKDAY(シリアル値,種類)となります。

引数のシリアル値は、直接あるいはセル参照で指定します。日付文字列をセル参照ではなく、直接指定する場合は、半角のダブル クォーテーション (") で囲み( "2004/05/9" など)ます。
引数の種類は、1〜3の数字で指定します。指定数字の意味は下記表のとおりです。指定数字と返される数字(曜日番号)によって何曜日かを判定します。指定数字によって、返される数字の意味(曜日)が異なるので注意が必要です。なお、省略することも可能です。省略すると1と同じ意味になります。

 

種類(指定数字)の意味
指定数字 戻り値 意        味
1または省略 1(日)〜7(土) 日曜日を1として起算し表示
2 1(月)〜7(日) 月曜日を1として起算し表示
3 0(月)〜6(日) 月曜日を0として起算し表示

 

使用例 1

下図は、基本を理解するための例です。

 

左図は、引数の種類(指定数字)によって戻り値(曜日番号)が異なることを示したものです。
同じ日付を参照していても、指定数字の種類が異なれば、戻り値の曜日番号も違ってきます。

(画像:Win XP&Excel2003)

引数の種類「1」は、省略することができます。

 

使用例 2

この例は、ある商品の特売日(土日)の売上げ金額を求めたものです。WEEKDAY関数で曜日番号を求め、これを利用してSUMIF関数で集計しています。


曜日番号は、引数の種類(指定数字)「3」を使って求めています。その理由は、「3」で求めると土日が連番となるため、SUMIF関数の引数で比較演算子を使いやすくなるからです。
なお、「2」で求めても同じく土日が連番となるので、使いやすいです。

(画像:Win XP&Excel2003)

SUMIF関数では、「>=5」を条件(すなはち、土日)にして、集計しています。
この例のような場合、曜日を表示させておいて、曜日を条件に集計する方法もありますが、曜日番号で集計する方が使いやすいかと思います。

 

使用例 3

WEEKDAY関数をTEXT関数にネストさせて曜日を求める方法が、市販マニュアル本などに紹介されています。しかし、この方法は、間違っているようです。


左図の例は、指定数字を変えて求めてみた例です。見てのとおり、指定数字「1」以外は、間違った答えを表示しています。

(画像:Win XP&Excel2003)

なぜこのような結果になるのでしょうか。指定数字「1」(あるいは省略)の場合は、正解が求められるので、これを使えばいいのでしょうか?(私は、そう思い込んでいました ^^;)
実は、指定数字「1」(あるいは省略)で正解が求められるのは、偶然の一致でそうなるだけなのです。
参考:「日経PC21 エクセルの謎(04/5月号)」田中 亨 氏)

ご存知のように、エクセルの日付計算は、1900/1/1を『1』として計算するシリアル値で管理されています。WEEKDAY関数で求められた曜日番号は、このシリアル値と認識されているようです。それを、表示形式で曜日に変換しているだけなのです。下図はそれを示すものです。
ですから、WEEKDAY関数をTEXT関数にネストさせ、指定数字「2」や「3」で、曜日を求めても、曜日番号が1900/1/1〜1900/1/7のシリアル値と合致しないために、正しい答えが求められないのです。

 

ところでExcelでは、1900年は閏年ではないのに1900/2/29を表示します。
(これは、他の表計算ソフトが1900年を閏年として扱っていたため、互換性を維持するためこのような仕様にしたといわれています)

このため、曜日に対する日付がズレて表示されます。本当は1900/1/1は、月曜日ということになります。

 


(画像:Win XP&Excel2003)

Excelの日付計算は、本来は存在しない1900/2/29が挟み込まれて成り立っています。従って、ワークシート上で1900/3/1より前の日付が絡む日数計算や曜日を求める場合には、ズレを調整するがあります。注意してください。

ここで、日付から曜日を求めるいくつかの方法を紹介しておきます。
下図のC3は、単純に日付を、ユーザー定義の表示形式でaaaa」として求めたものです。このように、日付から簡単に曜日を表示させることができます。(参照:ユーザー定義の表示形式 → 特別4
C4
は、TEXT関数表示形式を指定して求めたものです。

(画像:Win XP&Excel2003)

C5C6は、WEEKDAY関数を使ったものですが、これは上記の理由により、間違った方法です。偶然の一致で正解が表示されているだけです。使わない方が賢明です。
WEEKDAY関数を使って、どうしても曜日を求めたい場合は、たとえば、CHOOSE関数にネストさせ「=CHOOSE(WEEKDAY(B6,2),"月","火","水","木","金","土","日")」などとして求めることができます。
(かなり悠長ですが…)引数の値は、指定数字に合わせて入力する順を変えます。

先頭へ戻る

 

 

日付/時刻関数(WORKDAY、NETWORKDAS関数)

WORKDAY関数

WORKDAY関数は、開始日から起算して、指定した稼動日数後(あるいは前)の日付シリアル値)を求める関数です。稼働日数とは、土曜日と日曜日および指定した休日などを除く実働日のことです。
指定した日数内に土曜日と日曜日があれば、自動的に日数計算から除外されます。計算から除外したい休日や祭日は、引数で指定できるようになっています。なお、WORKDAY関数は、標準インストールでは搭載されていない関数です。ツール(T)のアドイン(I)から分析ツールを追加する必要があります。

書式で表すと、WORKDAY(開始日,日数,祭日)となります。
引数の開始日は、日付文字列やシリアル値で指定します。日付文字列をセル参照ではなく、直接指定する場合は、半角のダブル クォーテーション (") で囲みます。
日数は整数で指定します。正の数で指定すると、その稼動日数後の日付を求めることになり、負の値を指定するとその稼動日数前の日付を求めることになります。
祭日には、祝日や夏休みなどのように稼動日数の計算から除外する日付を指定します。なお、除外する日がない場合は、省略することができます。省略した場合、土曜日と日曜日だけが計算から除外されます。除外する日が多い場合は、シート上へリストを作りこの範囲を指定します。なお、配列定数で指定することもできます。(配列定数については、特別編で解説予定)

 

使用例

下図は、基本を理解するための簡単な例です。


祭日の引数には、左図の青枠の日付の範囲を参照しています。

(画像:Win XP&Excel2000)

参照先 2004/5/10(F6)は、会社の創立記念日で休業日であるという意味です。独自の休日であっても、引数で指定すれば除外対象にすることができます。
戻り値は、標準の表示形式のままではシリアル値が表示されます。図のように日付で表示する場合は、日付の表示形式に変更します。
D3は、日数が1日後の日付を求めています。1日後なので、5/10は除外対象にならないものの、問題なく計算されています。このように、除外対象に含まれなくても、自動的に判定し計算されます。

 

 

NETWORKDAYS関数

NETWORKDAYS関数は、開始日から終了日までの期間に含まれる稼動日数を求める関数です。稼働日数とは、土曜日と日曜日および指定した休日などを除く実働日のことです。
指定した期間内に土曜日と日曜日があれば、自動的に日数計算から除外されます。計算から除外したい休日や祭日は、WORKDAY関数と同じように引数で指定します。なお、NETWORKDAYS関数も標準インストールでは搭載されていない関数ですから、ツール(T)のアドイン(I)から分析ツールを追加する必要があります。

書式で表すと、NETWORKDAYS(開始日, 終了日, 祭日)となります。
引数の開始日は、対象期間の最初の日を表す日付を指定します。終了日も同じく、対象期間の最終日を表す日付を指定します。日付文字列をセル参照ではなく、直接指定する場合は、半角のダブル クォーテーション (") で囲みます。
祭日の取り扱いは、WORKDAY関数と同じです。祝日や夏休みなどのように期間計算から除外する日付を指定します。除外する日がない場合は、省略することができます。除外する日が多い場合は、シート上へリストを作りこの範囲を指定します。なお、配列定数で指定することもできます。

 

使用例

WORKDAY関数の例と比較してみてください。

 

青枠は、祭日の引数です。

(画像:Win XP&Excel2000)

図を見てわかるとおり、WORKDAY関数の逆を計算をしていることになります。この場合も、除外対象にならない日付が祭日の引数に含まれていても、自動的に判定し正しく計算されています。
D6は、開始日から終了日の間に土曜、日曜および祭日が含まれない計算です。戻り値は「5」になっています。単純に「=21-17」で引き算をすると「4」になります。また、期間計算のできるDATEDIF関数の「D」で計算しても「4」になります。この違いは、計算の前提条件が異なるためです。NETWORKDAYS関数は、あくまで稼働日数を求めるものであり、確かにこの間の稼動日数は「5」です。通常の期間計算では、指定した期間の開始日は算入されませんが、稼動日として求める場合は、算入して計算します。この違いを理解しておきましょう。

 

   先頭へ戻る   

 

中級・特別編トップへ

Excel(エクセル)学習室 HOME


KENZO30 内容の無断転載は、禁止しています