2−4 日時の処理
ここでは、日時関数の活用方法を解説します。ワークシートのセル内に日付を入力すると、表示は日付形式になっていますが、内部的にはシリアル値という日付や時刻の処理を行うための専用の数値が入力されることになります。日数計算や今日が何日なのか、といったことはすべてシリアル値で表されることを知ることが日付を自由に扱うひけつです。
■現在の日時とシリアル値
日付や時刻はすべてシリアル値と呼ぶ数値で管理されます。シリアル値とはExcelで日付や時刻の計算に使用されるコードだと考えてください。シリアル値は、1900年1月1日を1として、1日進めば+1した連続番号で、9999年12月31日までの日付に対応する値が使用されます。
1.シリアル値
シリアル値は、整数部が日数を表し、小数部が時刻を表します。たとえば、1998年4月16日の12時00分00秒(正午)のシリアル値は次の値になります。
35,901.500 日数は35,901 時刻は0.500
日付のシリアル値は35,901で、時刻のシリアル値は0.500ということになります。つまり、1900年1月1日から35,900日後が1998年4月16日だということになります。日時をシリアル値で表すことの最大のメリットは、期間の計算が容易になることです。ある期間の日数を計算するとき、年数は通常の計算(10進数の計算)で求められますが、月数は1月〜12月の12進数の計算になりとてもやっかいな計算になります。しかも月ごとに日数も違っているので、日数計算はさらにやっかいです。
2.現在の日時と日付
現在の日時を表すシリアル値は、次の関数で知ることができます。NOW()関数は日時(整数部と小数部)、TODAY()関数は日付(整数部)だけを返します。
書式 NOW() 日時のシリアル値を返す
TODAY() 日付のシリアル値を返す
この2つの関数には引数の指定はありませんが、関数名の後に括弧()を付け加えることが必要です。
双方の関数の使い分けとしては、日付と時刻、あるいは時刻を扱う場面ではNOW()関数を使い、日付だけを扱う場面ではTODAY()関数を使うようにすればいいでしょう。この関数で求められる現在の日時はコンピュータ内蔵のカレンダーと時計から導き出されるので、コンピュータの設定が正しくなければ、正しい日時はかえされませんので注意してください。なお、日時の設定はWindowsの[スタート]メニューe[設定]e[コントロールパネル]e[日付と時刻]で行います。
例
現在のシリアル値を知るには、セルにNOW関数あるいはTODAY関数を入力して表示形式を数値あるいは標準に設定します。関数を入力すると表示形式が自動的に日付に設定されるので、シリアル値は表示されません。表示形式はセルを右クリックして表示されるショートカットメニューの[セルの書式設定]を選択して操作します。
r>操作
@セルC4に=NOW()を入力する
AセルC7に=TODAY()を入力する
◆現在の日時が表示される
BセルC4を右クリックしてショートカットメニューを開く
C[セルの書式設定]を選択する
[A]セルの書式設定ダイアログボックスが開く
D[表示形式]タブをクリックしてこの画面に切り替える
E分類一覧の[標準]を選択して[OK]をクリックする
◆シリアル値が表示される
◆セルC7の表示形式も[標準]に設定する
[B]シリアル値が表示される
![]() |

EX4B297ZZ EX4B298Z
![]() |

EX4B299Z EX4B300Z
この表示された値がシリアル値です。この値は、ワークシートが再計算されたとき(他のセルに数式などを入力したときにワークシートが再計算されます)、またはこの関数を記述したマクロが実行されたときにだけ更新されます。時間の経過と共に自動的に結果が更新されることはありません。
注意
Windows版Excel97では1900年日付システムが採用されており、1900年1月1日から9999年12月31日までの日付に対応するシリアル値が使用されます。一方、Macintosh版Excelでは1904年日付システムが採用されており、1904年1月1日から9999年12月31日までの日付に対応するシリアル値が使用されます。シリアル値に差が生じるので注意しましょう。なおWindows版では、[オプション] ダイアログ ボックス([ツール]-[オプション])の[計算方法]タブで[1904年から計算する]チェックボックスをオンにすることで変更することができます。また、Macintosh版Excelで作成されたワークシートをWindows版Excelで開くと、[1904 年から計算]チェックボックスが自動的にオンになります。
[シリアル値の範囲]
次の表は、最初の日付と最後の日付に対応するシリアル値を示しています。
日付システム 最初の日付 最後の日付
1900 1900年1月1日 9999年12月31日
(シリアル値=1) (シリアル値=2958525)
1904 1904年1月2日 9999年12月31日
(シリアル値=1) (シリアル値=2957063)
●日付システムの変更
日付システムの1900年と1904年のどちらを使うのかは、メニュー[ツール]e[オプション]のオプションダイアログボックスで設定します。[1904年から計算する]にチェックを付けると1904年システム、チェックを消すと1900年システムの計算方法になります。Windowsの通常は1900年を使います。
r>操作
@[ツール]e[オプション]を選択する
[A]オプションダイアログボックスが開く
A[計算方法]タブをクリックする
B[1904年から計算する]をクリックしてチェックを付ける
C[OK]をクリックする
EX4B295Z
![]() |
EX4B296Z
メモ[2000年の対応]
Excel97で日付を入力する場合、年を表す数値を2桁の数字で入力すると、次のように入力されます。
● 00〜29の範囲の値で年を入力した場合、2000〜2029の範囲の年になります。たとえば、「19/4/16」と入力すると、2019年4月16日と見なされます。
● 30〜99の範囲の値で年を入力した場合、1930〜1999の範囲の年になります。たとえば、「98/4/16」 と入力すると、1998年4月16日と見なされます。
【まとめ】
●NOW関数は現在の日時シリアル値を返す。
●TODAY関数は現在の日付シリアル値を返す。
●NOW関数またはTODAY関数をセルに入力すると、表示形式が日付に自動設定され、現在の日時が表示される。シリアル値を知るときは表示形式を適切に設定し直す
●シリアル値 日付(時刻を含む)のシリアル値は、1900年1月1日を1として1日ごとに番号を進めた連続番号のこと
■シリアル値を求める関数
日時(日付と時刻)を表すのが「シリアル値だ」ということは前説の通りです。現在の日時に対するシリアル値はNOW関数あるいはTODAY関数で求めますが、任意の日時に対応するシリアル値は次の関数で求めます。ある期間の日数や時間量を求めるには、シリアル値を使って計算しなければなりません。日付や時刻に対するシリアル値は、年月日や時分秒を数値指定で求める関数と、文字列で指定する関数、それにシリアル値を指定する関数があります。
DATE 指定した日付に対応するシリアル値を返す
書式 DATE(年, 月, 日)
TIME 指定された時刻に対応するシリアル値を返す
書式 TIME(時, 分, 秒)
DATEVALUE 日付を表す文字列をシリアル値に変換します。
書式 DATEVALUE(日付文字列)
TIMEVALUE 時刻を表す文字列をシリアル値に変換する
書式 TIMEVALUE(時刻文字列)
これらの関数を使う前にシリアル値についてもう少し理解を深めておくことにしましょう。ある期間の日数計算が必要になとき、シリアル値で計算することになります。たとえば、4月8日〜6月8日間の日数は、4月8日のシリアル値と6月8日のシリアル値を求めて日数計算することになります。例として次のようなシリアル値が求められたとしましょう。このシリアル値から日数を計算すると以下のようになります。
4月8日のシリアル値 36,258
6月8日のシリアル値 36,288
期間の日数 = 36,288 − 36,258
= 30
これをワークシート上で実現すると次のようになります。日付(日付形式の文字列)を入力したときにセルの表示形式は自動設定されるので、シリアル値を表示させるための簡単な変更方法を合わせて解説しています。日付は数値扱い、つまりシリアル値なので、右詰めで表示されます。
r>操作
@セルE6に日付「4/8」を入力する
[A]表示形式が自動設定されて、「4月8日」が表示される
AセルF6に参照式「=E6」を入力する
[B]日付入力と同じように表示形式が自動設定されて、「4月8日」が表示される
BセルポインタをF6に合わせて[桁区切りスタイル]ボタンをクリックする
[C]シリアル値が表示される
[D]期間の最終日を同じように入力する
先に操作したようにショートカットメニューを使って表示形式を[標準]に変更してもシリアル値は表示されるようになりますが、この方法だとボタンを1回クリックするだけで済みます。

EX4B309Z EX4B310Z
EX4B311Z
EX4B312Z
![]() |

EX4B313Z EX4B316Z
日付を示すシリアル値は通常の数値なので、計算することで、2つの差を求めることができます。すこし難しい表現ですが、ようするに、5月8日のシリアル値36288から4月8日のシリアル値36258を引けば期間の日数が求められる、ということです。
r>操作
@セルF9に減算式を「=F7−F6」を入力する
[A]差が求められる
セルF9に表示された値が4月8日から5月8日までの日数になります。この計算では、同日(4月8日から4月8日)を0日として計算するので、30日が求められます。
EX4B314Z
EX4B315Z
1.日時を数値で指定する
年月日をそれぞれの数値として指定してシリアル値を求めにはDATE関数、時分秒を数値で指定してシリアル値を求めにはTIME関数を使います。
●DATE関数
指定された日付に対応するシリアル値を返します。
書式 DATE(年, 月, 日)
年 年を表す数値を、1900〜9999の範囲で指定する
月 月を表す数値を、1〜12の範囲で指定する
日 日を表す数値を、1〜月末を表す数値の範囲で指定する
例
1998年4月16日のシリアル値は以下のように求められます。関数を入力すると表示形式が自動的に日付に変わるので、表示形式を[標準](前説参考)に設定し直してシリアル値が表示されるようにします。標準以外の表示形式が設定されているセルに入力した場合、表示形式は自動変更されません。
入力する数式
セルE3 =DATE(C3,C4,C5) セルG3 =E3
r>操作
◆セルE3に数式「=DATE(C3,C4,C5)」を入力する
[A]指定した日付のシリアル値が表示される
◆セルG3にセルE3を参照する数式「=E3」を入力する
[B]シリアル値にたいする日付が表示される
セルG3の表示が図Bのように日付形式にならないときは、セルの表示形式を日付形式に設定します。図Bの例では表示形式は日付[yyyy"年"m"月"d"日"]になっています。
図A 図B

EX4A163Z EX4A164Z
月数や日数より大きい数値を指定すると、大きい分だけ日数を進めたシリアル値が求められます。たとえば、月数を入力するセルC4に13を入力すると、12月の次月にあたる1999年1月16日のシリアル値が返されます。
●TIME関数
数値で指定された時刻に対応するシリアル値を返します
書式 TIME(時, 分, 秒)
時 時を表す数値を0〜23の範囲で指定します。
分 分を表す数値を0〜59の範囲で指定します。
秒 秒を表す数値を0〜59の範囲で指定します。
時刻を表すシリアル値は、0〜0.99999999の範囲にある小数値で、0:00:00 (午前0時)から23:59:59 (午後11時59分59秒)までの時刻を表します。
使用例
@数式を入力する
[A]結果が時刻形式で表示される

EX4A464Z EX4A465Z
TIME関数は時刻のシリアル値を求めますが、セルに入力した内容により、セルの表示形式が自動的に設定されるので図[B]のように表示されます。これをシリアル値の表示にする場合は、セルの表示形式を[標準]に設定し直します。
◆セルE5の表示形式を[標準]に設定する
[B]シリアル値で表示される
[C]セル幅を調整して小数点以下の表示桁数を多くする
![]() |

EX4A468Z EX4A469Z
2.日時を文字列で指定する
年月日を表す文字列を指定してシリアル値を求めにはDATEVALUE関数、時分秒を表す文字列を指定してシリアル値を求めにはTIMEVALUE関数を使います。
●DATEVALUE関数
日付を表す文字列をシリアル値に変換します。
書式 DATEVALUE(日付文字列)
日付文字列 日付を表す文字列を日付表示形式で指定する
日付文字列の年の部分を省略すると、コンピュータの内蔵時計による現在の年が使用されます。また、日付文字列に時刻の情報が含まれていても無視されます。時刻はTIMEVALUE関数を使います。
使用例
@数式を入力する
[A]シリアル値が求められる

EX4A470Z EX4A471Z
A月日だけを指定した数式を入力する(月と日をピリオドで接続)
[B]月日の指定方法が不適当なのでエラーが表示される

EX4A472Z EX4A473Z
B月日だけを指定した数式を入力する
[C]現在の年数が採用されたシリアル値が返される

EX4A474Z EX4A475Z
●TIMEVALUE関数
時刻を表す文字列をシリアル値に変換します。
書式 TIMEVALUE(時刻文字列)
時刻文字列 時刻を表す文字列を時刻表示形式で指定する
使用例
@数式を入力する
[A]シリアル値が求められる
[B]セル幅を調整してすべての桁数を表示する
EX4A476Z EX4A477Z

EX4A478Z
AAM/PM形式の書式を使った数式を入力する
[C]シリアル値が求められる

EX4A479Z EX4A480Z
【まとめ】
●日付に対応するシリアル値はDATE関数を使う
●時刻に対応するシリアル値はTIME関数を使う
●指定する日付のシリアル値はDATEVALUE関数で求める
●指定する時刻のシリアル値はTIMEVALUE関数で求める

2−4 データの集計と集計表
ここでは、データの集計や日付関数の活用方法を解説します。データの集計には、指定するセル範囲を単純に集計する関数と、範囲内の特定のデータだけを集計するデータベース関数があります。
■曜日を表示する
曜日は日付のシリアル値から曜日を番号に置き換えた値で求められます。土や日など漢字で表示する場合は、番号でデータを検索する関数と組み合わせて求めます。
WEEKDAY シリアル値を曜日を表す番号に変換する
1.曜日と曜日番号
関数で日付を取り扱う場合の日時は日付のシリアル値で表す、ということはこれまでに解説したとおりですが、曜日についても同じような連続番号で表すことになります。曜日は日〜土の7種なので、連番は0〜6、あるいは1〜7で表されることになります。この曜日の番号を求めるのがWEEKDAY関数です。
●WEEKDAY関数
日付のシリアル値を曜日の番号に変換します。
書式 WEEKDAY(シリアル値,種類)
シリアル値 日付の連番を指定する
種類 戻り値の種類を数値で指定します
種類 戻り値
1/省略 1(日曜)〜7(土曜)の範囲の整数(旧バージョンのExcelと同じ)
2 1(月曜)〜7(日曜)の範囲の整数。
3 0(月曜)〜6(日曜)の範囲の整数。
種類別の戻り値一覧
種類 月 火 水 木 金 土 日
1 2 3 4 5 6 7 1
2 1 2 3 4 5 6 7
3 0 1 2 3 4 5 6
WEEKDAY関数を使うと、曜日を番号で求められることは先に解説している通りですが、番号を見て何曜日だな、と知る人はいませんね。ワークシート上に曜日を表示するには、求めた曜日に対応する番号を元に漢字などで曜日を表示するように工夫しなければなりません。WEEKDAY関数の引数[種類]に1あるいは省略を指定した場合、次のような番号を返します。種類の指定で番号の振り方が少し違いますが、ここでは、種類を省略したときの振り方(日曜日は1番)を使うことにします。
返される値
曜日番号 1 2 3 4 5 6 7
↓ ↓ ↓ ↓ ↓ ↓ ↓
対応する曜日 日 月 火 水 木 金 土
種類を省略する場合の関数の書き方は以下のようになります。この関数はシリアル値を指定しますが、関数内に日付を直接入力することも可能です。この場合は以下のように、日付をダブルクォーテイションで囲んで入力します。他の書き方(1998年4月16日など)で記述することはできません。
=WEEKDAY(”98/4/16”)
↑
カンマも省く
では、曜日番号を求めるところまでの数式を入力してみましょう。上記では日付を関数内に記述していますが、以下の例ではセル参照で記述することにします。つまり、日付を日付文字列の形式でセルC2に入力して、その日付の曜日番号をセルC3で求めることにします。
=WEEKDAY(C2)
r>操作
@セルC2に日付「98/4/16」を入力する
AセルC3に数式を入力する
[A]98年4月16日の曜日が番号で求められる
![]() |

EX4A373Z EX4A374Z
先に解説したように、種類を指定していないので1〜7の値で求められます。結果は5になっているので、1998年4月16日は木曜ということになります。この求めた番号を元にして、曜日を漢字で表示できるようにします。
1 2 3 4 5 6 7 ← 求められた値
日 月 火 水 木 金 土
↑
1998年4月16日の曜日
2.曜日を漢字で表示する
番号で求めた曜日を漢字で表示するには、CHOOSE関数あるいはVLOOKUP関数を使って実現することができます。VLOOKUP関数はP___で解説しているので参照してください。
●CHOOSE関数
引数リストの値の中から特定の値を1つ選択します。
書式 CHOOSE(インデックス, 値1, 値2, ...)
↑
引数リスト(最大29個)
インデックス 引数リストの何番目の値を選択するかを指定します。
値1、値2、... 選択される値を最大29個まで指定する
CHOOSE関数は並べたデータの順に振った番号で抽出するので、データの並べ方を以下のようにすれば、曜日の番号でそれぞれの漢字を抽出することができます。
=CHOOSE(曜日番号,”日”,”月”,”火”,”水”,”木”,”金”,”土”)
↑ ↑ ↑ ↑ ↑ ↑ ↑
1 2 3 4 5 6 7
操作例
実際に試して見ると次のようになります。曜日番号はセルC3で求められているので、CHOOSE関数の抽出条件(抽出番号)にセル番地を入力して以下のようになります。
=CHOOSE(C3,”日”,”月”,”火”,”水”,”木”,”金”,”土”)
r>操作
@セルC5に数式を入力する
[A]結果が表示される

EX4A370Z EX4A372Z
操作例2
もう一つの方法、VLOOKUP関数を使う方法は以下のようになります。曜日番号と曜日のテーブルを作成して、データの抽出を行います。先のCHOOSE関数とどちらを使っても同じ結果が得られます。伝票などの発行日として表示する程度なら1つの数式だけで使えるCHOOSE関数を使い、曜日表示を多く使う場合、データを入力するセル範囲(テーブルという)が必要になりますが、反面数式がコンパクトになるVLOOKUP関数を使えば良いでしょう。以下の操作で使う数式は以下のようになります。
=VLOOKUP(C3,E9:F15,2)
以下の操作は上記の続きとして操作しています。セルC2,C3に入力している値および数式は図EX4A373Zと同じです。
r>操作
@テーブルを作成する
A数式を入力する
[A]結果が求められる
EX4A371Z 
EX4B570Z
●英語の曜日
曜日表示を英語で行う場合、上記のVLOOKUP関数やCHOOSE関数を使わなくても、TEXT関数を使って表示させることができます。TEXT関数の引数[表示形式]に「dddd」を指定すれば、英語の曜日が返されます。
=TEXT("98/4/16","dddd") 結果は Thursday
↑
曜日を表示する記号(大文字でもよい、ただし半角であること)
以下の操作では、日付をセルC2に入力して、TEXT関数の日付をセル参照で指定しています。
r>操作
◆日付をセルC2に入力する
@数式を入力する
[A]日付に対する曜日が英字で求められる
EX4B568Z
EX4B569Z
3.参照データをセル参照する
リスト参照のCHOOSE関数もデータをセル参照で指定することができます。どのデータがリストとして指定されているのかを確かめながら番号指定するような場合に有効な手法です。また、データが長いときなどでもセル参照を使うことにより数式が見やすくなります。
=CHOOSE(B4,E8,E9,E10)
データをセル参照で記述する
次の例は、インデックスの未入力時に表示されるエラー表示をなくすために、IF関数とISERROR関数を組み合わせて以下のようにしています。
=IF(ISERROR(CHOOSE(B4,E8,E9,E10)),"",CHOOSE(B4,E8,E9,E10))
r>操作
@必要なデータを各セルに入力する
AセルC4にセル参照を使った数式を入力する
[A]抽出番号(インデックス)を入力していないので何も表示されない
B抽出番号(ここでは2)を入力する
[B]2つ目の「パンダ便」が表示される
![]() |
EX4B571Z

EX4B572Z EX4B573Z
【まとめ】
●指定する日付の曜日はWEEKDAY関数で求める
●WEEKDAY関数は曜日を番号で返すので、漢字表示する場合は、CHOOSE関数などを使って工夫する
●CHOOSE関数内部にデータを直接入力せずに、セル参照で指定することもできる
■週間集計表
図Aの集計表を作成するとき、日付はどのように処理するでしょうか。週間集計の場合、曜日に日を合わせる、それとも日に曜日を合わせる、どちらの方法で集計表を作成しますか。たとえば、曜日の位置を固定した集計表を考えてみましょう。(日付を固定して、日付に合わせて曜日を表示するには先に解説した曜日の表示方法で実現できます)
図A
EX4A360Z
これから作成する集計表が4月用で4月1日が水曜日だとすれば、セルE10に1を入力しますね。2日のセルE11はどうするでしょうか。2を入力しますか、それとも1日進めるのですから、=E10+1で計算しますか。よく考えてみてください。ここで、各日を数値で入力すると、当月専用になり汎用性がなくなるのではないでしょうか。次の5月分の集計表は新しく作成することになってしまいます。各日を数式で入力しておくと、1日の1を入力する場所によって任意の曜日を1にできるようになり、各月の集計表を新しく作り直さなくてもいいようになります。
|
|
E10 1
E11 =E10+1
E12 =E11+1
・
・
・
E16 =E14+1
・
・
・
EX4A362Z
この考え方を少し発展させて、次のように考えてみてください。集計表の先頭(ここではセルE8)に入力する日付を次のようにします。
[A]セルE8に1を入力すると月曜が1日
[B]セルE8に0を入力すると火曜が1日
[C]セルE8に−1を入力すると水曜が1日
[D]セルE8に−2を入力すると木曜が1日
[E]セルE8に−3を入力すると金曜が1日
[F]セルE8に−4を入力すると土曜が1日
[G]セルE8に−5を入力すると日曜が1日
A B C D E F G

EX4A363Z EX4A364Z EX4A365Z EX4A366Z EX4A367Z EX4A368Z EX4A369Z
このように先頭の月曜日の位置に1〜−5の値を入力すれば、1日の位置を月曜〜日曜の任意の位置に合わせることができるようになります。このままだと、月曜の位置(セルE8)に値を入力するといった手間が残ります。以下で、月曜の位置に入力する値を計算で求める方法を解説します。
2.指定日の曜日を求める
曜日と日を連動させるためには、まず、1日の曜日を求めることが必要です。ある日の曜日を求めるには、日のシリアル値を求めて、そのシリアル値から曜日を求めるようにします。数式は以下のようになることが分かるでしょうか。(DATE関数とWEEKDAY関数の詳細は該当ページ参照)
シリアル値 =DATE(年,月,日)
曜日 =WEEKDAY(シリアル値)
これを実際に入力して値を求めると次のようになります。
r>操作
◆目的の年数をセルB1に、月数をセルB2に入力する
ここでは1998年、4月を入力しています
@シリアル値を求める数式を入力する
1日の値を求めるので日数には1を入力します。
[A]1998年4月1日のシリアル値が求められる
A曜日を求める数式を入力する
[B]1998年4月1日の曜日が番号で求められる

EX4B051Z EX4B052Z EX4B053Z
ここで、関数で求める曜日を求める関数の求める値のスタイルを指定する引数に3を選んでいる理由について少し解説しておくことにします。先に解説したように、カレンダーの先頭を月曜にしているので曜日の番号が月曜から始まっていることが必要です。月曜から始まるスタイルは引数2と3です。1は日曜から始まります。WEEKDAY関数の詳細はパート2P___をご覧ください。引数2と3の曜日番号を並べると次のようになっています。
引数2の場合 1「月」 2「火」 3「水」 4「木」 5「金」 6「土」 7「日」
引数3の場合 0「月」 1「火」 2「水」 3「木」 4「金」 5「土」 6「日」
次に入力する数式により2と3のどちらを使うのかが決まります。詳しい解説は省きますが、先に解説したように(図A〜G)1日の位置を決めるために、各曜日の番号から負数を計算すればいいのです。セルE8に入力する値1〜−5を曜日の番号から計算する、ということです。これは、次の計算式で実現できます。
=1−曜日番号
実際に数式を入力して確かめてみましょう。
r>操作
@セルB5に数式を入力する
[A]月曜の位置を示す値が計算される
この値は先に解説した図A〜Gの値と同じになっています
Aカレンダーの最初の位置に参照式を入力する
[B]月初め1日の曜日の位置が1になる
年数(セルB1)と月数(セルB2)を変えると、その月の1日の曜日に正しく1日が表示されるかを確かめておいてください。
EX4B054Z EX4B055Z

EX4B056Z EX4B057Z
このままだと、−1や0などあり得ない日数も表示されるので、IF関数などを利用して、1以下は表示しない、31日以降も表示しない、など工夫してください。以下の図は非表示にした結果です。月末の処理も多少の工夫を加えれば、3月は31日まで、4月は30日まで、といった表示を自動化することもできます。ここでは解説しませんが、方法を考えてみてください。それほど複雑なものではありません。少しのアイデアと工夫で実現できます。
EX4A361Z
【まとめ】
●目的の処理を実現できる関数がないかを探す
●探し出した関数が期待した結果を返さない場合、目的の内容に加工(計算などで値を返る)できないかを検討する
■期間の計算
日付はシリアル値として連続番号で表現され、時刻は一日の一部として小数値で表現されることは、これまでに解説したとおりです。日付と時刻は数値と見なされるため、加算や減算などの計算を行うことができます。たとえば、日付を他の日付から引いて2つの日付の差を計算することができます。日付をシリアル値として表示したり、時刻を小数値として表示したりするには、セルの表示形式を [標準] 表示形式に変更します。このような期間の計算はワークシート関数で簡単に求めることができます。ある期間の年数や月数あるいは日数は、DATEDIF関数で求めることができます。ここでは、この関数を使って日数や月数、年数を求める方法を解説します。
1.期間の日数を計算する
指定された期間内の日数、月数、または年数を返すDATEDIF関数の使い方から解説することにします。書き方は次のように、期間の開始日と終了日を指定して、求める単位(年数、月数、日数)を単位記号で指定します。
●DATEDIF関数
指定期間(開始日〜終了日)の日数を指定する単位で求める
書式 DATEDIF(開始日,終了日,単位)
開始日 期間の開始日を指定します。
終了日 期間の終了日を指定します。
単位 戻り値の単位と種類を単位を表す文字列で指定します。
単位 戻り値の単位と種類
"Y" 期間内の満年数
"M" 期間内の満月数
"D" 期間内の満日数
"MD" 1か月未満の日数
"YM" 1年未満の月数
"YD" 1年未満の日数
使用例
次に、期間「1998年4月16日〜1999年8月20日」の年数、月数、日数、をそれぞれ求めてみましょう。セルB4に日付文字列「1998/4/16」、セルB6に日付文字列「1999/8/20」を入力して、関数の引数指定にセル参照を使って各値を求めてみましょう。
●期間内の満年数
関数は以下のようになります。関数内に日付を直接入力する場合は、yyyy/m/d形式でダブルクォーテイションで囲んだ日付を入力します。また、期間内の満年数を示す単位は文字になるので、これもダブルクォーテイションで囲んで入力します。
=DATEDIF(”1998/4/16”,”1999/8/20”,”Y”)
以下の例は、日付をセル参照で入力しているので、関数は次のようになります。絶対セル番地にしているのは、ここで入力した数式を以降の例(満月数など)で複写して単位文字を書き替えるだけで済ますためです。
=DATEDIF($B$4,$B$6,”Y”)
r>操作
@セルB4に1998/4/16を入力する
AセルB6に1999/8/20を入力する
BセルE7に期間の年数を求める数式を入力する
[A]年数が求められる
自1998/4/16〜至1999/8/20の間の年数は1(端数は切り捨て)だということが求められます。
![]() |

EX4A499Z EX4A500Z
●期間内の満月数
数式は次のようになります。この数式をセルE8に入力する、あるいはセルE7に入力している数式をドラッグアンドドロップでセルE8に複写して、単位記号をMに書き替えます。
=DATEDIF($B$4,$B$6,”M”)
r>操作
@セルE8に期間の月数を求める数式を入力する
[A]月数が求められる

EX4A501Z EX4A502Z
●期間内の満日数
数式は次のようになります。この数式をセルE8に入力する、あるいはセルE8に入力している数式をドラッグアンドドロップでセルE9に複写して、単位記号をDに書き替えます。
=DATEDIF($B$4,$B$6,”D”)
r>操作
@セルE9に期間の日数を求める数式を入力する
[A]日数が求められる

EX4A503Z EX4A504Z
●期間内の1年未満の月数
数式は次のようになります。この数式をセルE8に入力する、あるいはセルE9に入力している数式をセルE11に複写して、単位記号をYMに書き替えます。
=DATEDIF($B$4,$B$6,”YM”)
r>操作
@セルE11に期間の1年未満の月数を求める数式を入力する
[A]端数の月数が求められる
以上の求めた値から、自1998/4/16〜至1999/8/20の期間は1年(セルE7)と4月(セルE11)だということが求められました。

EX4A505Z EX4A506Z
2.使用年数を計算する
次の例は、登録年月日から現在の日付までの期間を使用年数として、年数と月数を求めるものです。使う関数はDATEDIF関数で、数式は次のようになります。
年数を求める =DATEDIF(E7,NOW(),”Y”)
月数を求める =DATEDIF(E7,NOW(),”YM”)
期間の開始日は[登録年月日](ワークシートI列)、終了日を現在の日付を表すNOW()関数にして、登録日から現在の使用年数(年数と月数)を求めます。
r>操作
@セルJ6に年数を求める数式を入力する
[A]年数が表示される
AセルK6に月数を求める数式を入力する
[B]月数が表示される
入力した2つの数式をドラッグアンドドロップで下へ続くセルに複写して車両台帳を完成させるのですが、この数式だと登録年月日が入力されていない場合、正しい年数や月数が求められません。開始日が0年0月になり現在が1999年なら年数は99年が求められます(図C)。このような現象を防ぐために、登録年月日の入力していないところは計算しないように工夫します。
EX4C167Z
EX4C168Z
EX4C169Z
EX4C170Z
図C
EX4C171Z
3.誤計算の結果を非表示にする
登録年月日の入力していないところが正しく計算されないので、結果を表示しないように工夫します。いくつかの方法が考えられますが、ここでは、登録年月日が入力されていないとき結果を表示しないようにしてみましょう。未入力の判断はIF関数を利用して、次のように行います。
IF(比較式,成立時の処理,不成立時の処理)
比較式のところで、登録年月日の入力が空白かを判断「E7=””」して、空白(成立時の処理)なら空白(””)を表示、入力されていれば不成立時の処理に年数を求める数式を入力します。
年数を求める =IF(E7=””,””,DATEDIF(E7,NOW(),”Y”))
↑ ↑ ↑
比較式 成立時の処理 不成立時の処理
↓ ↓ ↓
月数を求める =IF(E6=””,””,DATEDIF(E6,NOW(),”YM”))
では、セルF7とG7の数式を以上の数式に書き替えてみましょう。以下の例は、先に入力した数式を削除してから入力し直しています。
r>操作
@セルF7の数式を書き替える
AセルG7の数式を書き替える
BセルF7とG7をドラッグアンドドロップで下へ続くセルに複写する
[A]登録年月日が未入力のセルは表示されない
EX4C172Z
EX4C173Z
EX4C174Z
●ゼロ(0)年の表示
以上のIF関数では1年に満たない期間は0年が表示されます。月数についても同じように0月が表示されます(セルK9)。このような0表示を消す方法の1つに、表示形式で非表示にする、方法があります。この方法は関数操作ではありません(P___コラムで紹介)。IF関数の比較式(条件式ともいう)に値0の判断を付け加える、ことが考えられますが、非常に長い(無駄の多い)数式になってしまいます。参考程度ですが、IF関数で0を非表示にする数式を載せておきます。
無駄の多い数式(セルJ16用の数式)
=IF(OR(I16=””,DATEDIF(I16,$L$3,”Y”)=0),””,DATEDIF(I16,$L$3,”Y”))
【操作のまとめ】
●期間の日数はDATEDIF関数を使う
●セルの未入力を判断するときは、IF関数で空白を比較式する
「「コラム 数式を使わずにゼロ表示を消す」」
次の操作は、セルの表示形式を変更して0表示を消す方法です。セルの表示形式を次のように設定します。なお、表示形式の詳細は「関数ガイド」をご覧ください。
#,##0;[赤]−#,##0;””
↑ ↑ ↑
正数部 負数部 0値
r>操作
◆1年に満たない期間は0年が表示される
@セルを右クリックしてショートカットメニューを表示する
A[セルの書式設定]を選択する
[A]セルの書式設定ダイアログボックスが開く
B[表示形式]タブをクリックする
C[分類]は「ユーザー設定」を選択する
D[種類]は「#,##0;[赤]−#,##0」を選択する
[B]ここに種類が表示される
E後部に「;””」を付け加える
F[OK]をクリックする
[C]セルに表示される0値が空白に変わる
この方法では、表示形式を使って0の表示を空白(スペースではない)に置き換えたことになります。表示内容を置き換えたことにより、他のセルからセル参照でこのセルの値を参照したときも0ではなく、空白が返されるようになります。
![]() |
EX4C175Z

EX4C176Z EX4B322Z
EX4B323Z
EX4C180Z
●セル自身のゼロ(0)の非表示は、表示形式で0部を空白(””)を設定する
●DATEDIF関数 期間の日数を求める
作成手順
さて、どこから書き始めればいいのでしょう。
![]() |
||
![]() |
||

![線吹き出し 3: [C]](clip_image258.gif)



![線吹き出し 3: [B]](clip_image011.gif)
![線吹き出し 3: [B]](clip_image247.gif)




![線吹き出し 3: [C]](clip_image083.gif)
![線吹き出し 3: [D]](clip_image066.gif)

![線吹き出し 3: [C]](clip_image098.gif)

![線吹き出し 3: [D]](clip_image042.gif)

![線吹き出し 3: [A]](clip_image014.gif)

![線吹き出し 3: [A]](clip_image195.gif)
![線吹き出し 3: [B]](clip_image180.gif)
![線吹き出し 3: [B]](clip_image164.gif)



![線吹き出し 3: [B]](clip_image077.gif)







![線吹き出し 3: [B]](clip_image135.gif)

![線吹き出し 3: [A]](clip_image106.gif)
![線吹き出し 3: [B]](clip_image095.gif)

![線吹き出し 3: [B]](clip_image053.gif)

![線吹き出し 3: [A]](clip_image236.gif)

![線吹き出し 3: [A]](clip_image208.gif)
![線吹き出し 3: [A]](clip_image201.gif)
![線吹き出し 3: [A]](clip_image189.gif)
![線吹き出し 3: [A]](clip_image174.gif)
![線吹き出し 3: [A]](clip_image166.gif)

![線吹き出し 3: [A]](clip_image124.gif)
![線吹き出し 3: [A]](clip_image112.gif)

![線吹き出し 3: [A]](clip_image089.gif)
![線吹き出し 3: [A]](clip_image072.gif)
![線吹き出し 3: [A]](clip_image059.gif)
![線吹き出し 3: [A]](clip_image054.gif)
![線吹き出し 3: [B]](clip_image038.gif)
![線吹き出し 3: [A]](clip_image028.gif)
![線吹き出し 3: [A]](clip_image025.gif)













![線吹き出し 3: [A]](clip_image050.gif)





![線吹き出し 3: [A]](clip_image137.gif)
