日付関数でシリアル値を克服しよう


 日付関数で計算力をアップ!

前回は時刻関数についてご説明しましたが、今回は同じシリアル値を利用する日付関数についてご紹介しましょう。日付関数は全部で16種類用意されています。そのうちの12種類の日付関数についてご説明します。種類が多くなると、どのような時にどの関数を使えばよいのか迷いがちですが、大きく3つに分類してみると、とても扱いやすい関数になるのです。

まず、1つは、日付データを分散、結合する関数、2つ目は日付間の期間差を求める関数、そして、もう1つは指定した期間後の日付を求める関数です。
日付データを分散、結合する関数には、[DATE][YEAR][MONTH][DAY][WEEKDAY]関数があります。[DATE]関数は、複数のセルに表示された日付データを1つの日付データとして表示します。それとは反対に、1つの日付データから、[YEAR]関数は年を、[MONTH]関数は月を、[DAY]関数は日を、[WEEKDAY]関数は曜日を抽出する事ができます。つまり、日付のシリアル値を年、月、日に変換してくれる関数なのです。

また、日付間の期間差を求める関数には、[DATEDIF] [YEARFRAC] [NETWORKDAYS] [DAYS360]関数があります。年数を求めるには[YEARFRAC]関数、日数を求めるには [NETWORKDAYS]関数を利用します。[DATEDIF]関数は単位を変更するだけで、年、月、日、全ての期間差を求める事ができます。
そして最後に、指定した期間後の日付を求める関数には、[EDATE] [EOMONTH] [WORKDAY]関数があります。[EDATE]関数は指定した月数後の日付を求め、[EOMONTH]関数は月末日を求めます。また、[WORKDAY]関数を利用すれば、指定した稼動日数後の日付を求める事ができます。

このように日付関数には、同じ用途で利用される関数がいくつかありますが、それぞれに算出される為の条件が異なります。それぞれの関数の違いや用途について詳しくご説明しましょう。
時刻関数の次に、日付関数を使いこなせるようになれば、難しそうでいつのまにか避けていたシリアル値も簡単に克服できます。


今回の関数

日付/時刻関数
 イーオーマンス
 開始日から指定した月数経過後の日付を出す
 
書 式 =EOMONTH(開始日、月)
 指定した月数後の「月末日」を出す関数。ここではC6のセルに入った受付日からE6の「受付期間」を経過した月の末日を表示。指定日数後の日付を出すには、WORKDAY関数を使う。


日付/時刻関数
 ネットワークデイズ
 2つの日付間の稼働日数を出す
 
書 式 =NETWORKDAYS(開始日、終了日[、祭日])
 ある日付間の期間を求めるには、NETWORKDAYSやDATEIFを使う。日数を出すのに使うのがNETWORKDAYS。ここではG6の開始日からJ4の開通予定日までの期間で祭日を除いた稼働日を算出。


日付/時刻関数
 イヤー
 日付データから年のみを取り出す
 
書 式 =YEAR(シリアル値)
日付データから、年、月、日だけを抜き出すには、それぞれYEAR、MONTH、DAY関数を使う。ここではF13のセルに入った「2001/11/30」という日付からYEAR関数を使い「2001年」を抽出している。


日付/時刻関数
 デイトディフ
 指定された期間内の日数、月数、年数を出す
 
書 式 =DATEDIF(開始日、終了日、単位)
 DATEIFも日付間の期間を求めることができる。DATEIFの場合は、祭日を除いた日数をだすことはできないが、「単位」を指定することで、年数、月数、日数を出すことができる。



日付データを分散、結合する


[1] 日付データを分散する

[YEAR]、[MONTH]、[DAY]関数を利用すると、1つの日付データを年、月、日に分散する事が可能。
[YEAR]関数は年を、[MONTH]関数は月を、[DAY]関数は日を、1つの日付データから抽出する。


@年を抽出したいセルIの16番地を選択、日付/時刻関数から[YEAR]関数を選択する。[シリアル値]ボックスをクリック、A日付データのセルFの13番地を選択し[OK]をクリックすると日付データから年のみが抽出される。

 

 

B月のみを抽出したい場合は、[MONTH]関数を選択
C日のみを抽出したい場合は、[DAY]関数を選択、[シリアル値]ボックスには同様にして日付データのセルを選択し[OK]ボタンをクリック。

 

◇■ 日付データから曜日を求める ■◇

 日付から曜日を求めるには、[WEEKDAY]関数を利用する。しかし、[WEEKDAY]関数は答えを0〜7の数値で返すため、表示形式を曜日を表す形式に変更しなければ、正しく曜日を表示させる事ができないので覚えておこう。

@曜日を求めたいセルDの6番地を選択し、日付/時刻関数から[WEEKDAY]関数を選択、[シリアル値]ボックスには、

A日付データを選択。

B種類は、種類表を参考にして入力、[OK]ボタンをクリックすると、数値で曜日が返される。


Cセルの書式設定ダイアログの[表示形式]タブのユーザー定義で「(aaa)」と入力すると、曜日が()でつけられ表示される。

※「aaaa」は日曜日、「ddd」はSun、「dddd」はSundayと表示される

 

◇■ 日付を使わずに日付データを分散する ■◇

区切り位置ウィザードを使うと、日付データの[/]を区切り位置として利用できるので、関数を使わずに日付データを分散する事ができる。

 ※関数があらかじめ設定されている日付データは区切り位置ウィザードを利用できないので注意

日付データを範囲選択、[データ]→[区切り位置]を選択、区切り位置ウィザードで@区切り文字を入力し、表示先を指定するだけで、大量の日付データを、一度に、年、月、日に分割する事が可能。

 

 [2] 日付データを結合する

[DATE]関数を利用すると、年、月、日と別々のセルに分散した日付データを1つのセルに表示させる事ができる。方法は、年、月、日が入力されたセルを選択するだけでOK。


@1つの日付データとして表示させたいセルを選択し、日付/時刻関数から[DATE]関数を選択する。


A[年]ボックスには年が入力されたIの16番地を、

B[月]ボックスには月が入力されたKの16番地を、

C[日]ボックスには日が入力されたLの16番地を選択し、[OK]ボタンをクリックすると、セルに1つの日付データとして表示される。

 

 

 

知ッ得

WEEKDAY関数では引数の「種類」で、「1」またはなにも指定しないと、日曜日は「1」となる。「2」と指定すると、日曜日は「7」、月曜日が「1」となる。なお、「表示形式」で「日曜日」と表示させたいときは「aaaa」、「Sun」にするには「ddd」と指定する。


日付間の期間差を求める

 日付から曜日を求めるには、[WEEKDAY]関数を利用する。しかし、[WEEKDAY]関数は答えを0〜7の数値で返すため、表示形式を曜日を表す形式に変更しなければ、正しく曜日を表示させる事ができないので覚えておこう。

 

 [1]日付間の年数、月数、日数を1つの関数で求める

2つの日付間の年数、月数、日数を求める場合は、[DATEDIF]関数1つで可能。
ただし、[DATEDIF]関数は関数の貼り付けダイアログにないので、関数ボタンからではなく、数式の編集ボタン、又は、[=]から入力し、手入力で関数名から書式に従って入力していく必要がある。

※DATEDIF関数の書式=DATEDIF(開始日,終了日,"単位")

<日付間の年数を求める>

@年数を求めたいセルJの6番地を選択し

A数式の編集ボタンをクリック、

B「=DATEDIF(」と入力する。

C関数パレットが表示される。


書式に従い、D開始日であるGの6番地を選択(横へコピーする事を考えて列を固定するためにF4キーを3回押して、複合参照をかけておく)、[,]を入力。

E終了日であるJの4番地を選択(横、下へコピーしてもずれないように絶対指定をかけておく)。

F単位には、単位表を参考にして、単位をダブルクオーテーションで囲んで入力する。[OK]ボタンをクリックすると、年数が求められる。


<日付間の月数を求める>

G数式をKの6番地にコピーし、

H数式バーで、単位を[YM]に変更して確定すると、月数が求められる。


※単位を[M]にすると、前述で求めた年数を、1年を12ヶ月として加算してしまうので注意

<日付間の日数を求める>

I数式をLの6番地にコピーし、

J数式バーで、単位を[MD]に変更して確定すると、日数が求められる。


※単位を[D]にすると、前述で求めた年数、月数まで加算してしまうので注意

 

 [2]年数のみを求める

2つの日付間の年数を求めるには、[YEARFRAC]関数でも可能。しかし、[YEARFRAC]関数は答えを年を単位とする数値として返すため、[INT]関数にネストして小数点以下を切り捨てて、〜年と表示させる事が必要。


※[YEARFRAC]関数はアドイン関数なので、[ツール]→[アドイン]で分析ツールにチェックを入れなければ利用できないので注意

@年数を表示させたいセルJの6番地を選択、[INT]関数を選択、

A[数値]ボックスをクリック、関数ボックスから、

B[その他の関数]を選択する。


日付/時刻関数から、[YEARFRAC]関数を選択、

C開始日、終了日には、それぞれが入力されたセルを選択、

D基準には、基準表を参考にして入力、[OK]ボタンをクリックすると、年数が、小数点以下で切り捨てられて表示される。

 

 

 [3]日数のみを求める

日数を求める関数、[DATEDIF]、[NETWORKDAYS]、[DAYS360]関数のそれぞれの違いについて確認しよう。
 

◇■ 休日(土日、祝日)を除いた実働日数を求める[NETWORKDAYS]関数 ■◇

日付間の日数を求めるには、[DATEDIF]関数を利用すればよいが、これでは、休日まで日数が加算されてしまうので、実際に稼動した日数を求めることができない。そこで利用するのが[NETWORKDAYS]関数。[NETWORKDAYS]関数は、土日を自動的に期間から削除してくれるだけではなく、祝日も祝日のデータを範囲選択するだけで削除してくれるので、休日を除いた実際の稼動時間を簡単に算出可能。

※[NETWORKDAYS]関数はアドイン関数である

@実働日数を求めたいセルIの6番地を選択し、日付/時刻関数から[NETWORKDAYS]関数を選択する。

A開始日、終了日には、それぞれが入力されたセルを選択、祭日には、

B祭日が入力されたセルを範囲選択し(コピーする事を考え、絶対指定をかけておく)、[OK]ボタンをクリックすると、土日、祝日を除いた実働日数が求められる。

◇■ 1年を360日として日付間の日数を求める[DAYS360]関数 ■◇

1ヶ月を30日として、2つの日付間の日数を返すのが[DAYS360]関数。
方式には、ヨーロッパ方式(TRUE)と米国NASD方式(FALSE又は、0)がある。

 

 

知ッ得
YEARFRAC関数は日付間の年数を出す関数。ただしアドイン関数なので、「ツール」→「アドイン」で分析ツールにチェックを入れなければ利用できないので注意。Day60関数は1年を360日(30日×12日)と仮定して、日付間の日数を計算するもの。欧米では使うが日本では一般的ではない。


希望の期間後の日付を求める

指定した月数後の、日付を求めるには[EDATE]関数、月末日は[EOMONTH]関数、指定した稼動日後の日付を求めるには、[WORKDAY]関数

 

 [1]指定した月数後の日付や月末日を求める

月数を指定して、開始日からの日付を求めるには、[EDATE]関数、開始日からの月末日求めるには、[EOMONTH]関数を利用する。

※[EDATE]、 [EOMONTH]関数はアドイン関数である

<月数を指定して開始日からの月末日を求める>

受付最終日は各月の末日とする。

@受付最終日を求めたいセルを選択、日付/時刻関数から[EOMONTH]関数を選択。

A[開始日]には受付日であるCの6番地を選択。

B[月]ボックスには月数が入力されたセルEの6番地を選択、[OK]ボタンをクリックすると

C指定した月数後の月末日が求められる。


<月数を指定して開始日からの日付を求める>

日付/時刻関数の[EDATE]関数を選択し、D開始日、月を同様にして入力すると、

E指定した月数後の日付が求められる。

 

 [2]指定した稼働日数後の日付を求める

開通予定日を求めたい場合、工事開始日に可能実働日を足しても、可能実働日は休日を除いた日数なので、正しく、開通予定日を求めることができない。しかし、[WORKDAY]関数は、日数として指定した値に、自動的に年間の休日(土日、祝日)を足して計算してくれるので、正しく開通予定日を求める事が可能。

@開通予定日を求めたいセルJの4番地を選択し、日付/時刻関数から[WORKDAY]関数を選択する。

A[開始日]ボックスには、工事開始日を選択、

B[日数]ボックスには、可能実働日であるIの6番地を選択するが、開始日も含めた日数なので、1日を引く式を立てる。

C[祭日]ボックスには、祝日が入力されたセルを範囲選択し、[OK]ボタンをクリックする。

D開通予定日が求められる。

 

今回の表示形式

 

[1] 日付の表示桁数を揃える

月や日が1桁や2桁であると、全体の桁数がバラバラになってしまい、見栄えも良くない。
こんな時は、日付の表示形式を変更するだけで、全ての日付の表示桁数を揃える事ができる。

@年を表す表示形式は、[y]、月は[m]、日は[d]なので、それぞれを桁数だけ入力する。

つまり、年数は4桁、月数は2桁、日数は2桁に揃える。


[2]関数を使わずに年、月、日のみを表示させる

年月日の1つの日付データでも、表示形式を変更して、年のみ、月のみ、日のみを表示させるように設定する事ができる。

日付データのセルを選択し、表示形式を、年のみにしたい場合は、

@[yyyy]と入力、月のみは[mm]、日のみは[dd]と入力する。