Excelで年齢を求める方法
Excelで年齢や経過年数を求める場面があります。
DATEDIFという関数を使えば求められますが、なぜかExcelはこれを標準の関数とはしていないようです。
以下、A1セルに生年月日、B1セルに基準日が入力されているとします。
このとき、C1セルに数式を入力します。
DATEDIFを使う
次のようにします。
=DATEDIF(A1,B1,"y")
最も簡単です。
ただし標準の関数ではないので私はなるべく使わないようにしています。
年数を求め月日で調整する方法
DATEDIFを使わずに年齢を求める方法を考えます。
=YEAR(B1)-YEAR(A1)-IF(MONTH(B1)>MONTH(A1),0,IF(MONTH(B1)<MONTH(A1),1,IF(DAY(B1)<DAY(A1),1,0)))
適当に改行を入れると次の通りです。
-IF(MONTH(B1)>MONTH(A1),
0,
IF(MONTH(B1)<MONTH(A1),
1,
IF(DAY(B1)<DAY(A1),
1,
0
)
)
)
まず「YEAR(B1)-YEAR(A1)」で年数を計算します。
ただし誕生日が到来していない場合は1をマイナスする必要があります。
「MONTH(B1)>MONTH(A1)」ならば誕生月が到来しているのでマイナスしません。
「MONTH(B1)<MONTH(A1)」ならば誕生月が到来していないので1をマイナスします。
これら以外のケース(「MONTH(B1)=MONTH(A1)」)のとき「DAY(B1)<DAY(A1)」ならば誕生日が到来していないので1をマイナスします。
8桁表示の年月日の差をとる方法
ここからが本題です。
要するに年未満の月日が到来しているかどうかなので次のような数式が考えられます。
=INT((TEXT(B1,"yyyymmdd")-TEXT(A1,"yyyymmdd"))/10000)
年月日を8桁の数で表わし、差を求め、10000で割って、端数を切り捨てます。
例えば2000年6月15日から2015年3月1日までの年数を求めるとすると、年の差は15ですが月日が到来していないので14になります。
8桁で計算すると20150301-20000615=149686となり10000で割って端数を切り捨てると14となります。
元々、年月日を8桁で表示しているケースなどでは、そのまま使えます。
=INT((B1-A1)/10000)
これが最も簡単な手法だと思います。Excel以外でも使える手法です。
ユーザー定義関数
VBAでユーザー定義関数を作ってみます。
「年数を求め月日で調整する方法」でユーザー定義関数を作ると次のとおりです。
age = Year(date_to) - Year(date_from)
If Month(date_from) > Month(date_to) Then
age = age - 1
ElseIf Month(date_from) = Month(date_to) And Day(date_from) > Day(date_to) Then
age = age - 1
End If
End Function
「8桁表示の年月日の差をとる方法」で作ると次のとおりです。
age = Int((Format(date_to, "yyyymmdd") - Format(date_from, "yyyymmdd")) / 10000)
End Function
[ 2015年2月16日 | カテゴリー: Excel | タグ: tips , VBA , 関数 ]
« ピグノーズギターを購入 | アクティブシートの数式を削除して値にするマクロ »
コメントを残す