前回日付による足し算の中でDateDiffの紹介をしましたが、
このDateDiffを使って年齢を出す際には注意が必要です。
といいますのもDateInterval.Yearを使いますと
対象の年の引き算を行うので誕生日を迎えているかのチェックが必要となります。
参考になるサンプルを作成しました。
Dim vdBIRTHDAY As Date '対象者の誕生日
Dim vdDAY As Date '対象日時
Dim liAge As Integer '年齢
'対象者の誕生日と対象日時の年の差を計算します
liAge = DateDiff(DateInterval.Year, vdBIRTHDAY, vdDAY)
'誕生日を迎えているかチェック
If CType(vdDAY.ToString("MMdd"),Integer) < CType(vdBIRTHDAY.ToString("MMdd"),Integer) Then
'まだ誕生日が来ていないので1歳減らす
liAge = liAge - 1
End If
※If文で比較する際は一度CType関数を使用して明示的に変換しておきましょう。
これでその日の年齢を計算できます。
コメント (2)
Excel関数には、ソースコードに記述する「VBA関数」と
セルに埋め込む「表計算関数」の2種類があります。
それぞれ、日付間隔を求める関数は以下のとおりです。
VBA関数:DATEDIFF関数
表計算関数:DATEDIF関数(最後の「F」が1つ少ない)
VBA関数と表計算関数は「似て非なるもの」であり、
年齢計算に関して言えば、表計算関数を使うと非常に楽です。
以下、表計算関数を使う場合の例です。
セル A1:1979/06/24
セル B1:2004/06/23
セル C1:=DATEDIF(A1,B1,"y")
このような場合、セル C1 の値は「24」となり、
セル B1 を1日増やして「2004/06/24」にすると
「25」になり、さらりと満年齢が出ます。
年齢計算は、表計算関数を使ったほうが簡単です。
ただし、複雑な処理をする場合、Excelでも
ソースコードに記述することが多くなるので、
VBA関数を使わざるを得ないのが現状です。
長文失礼。
投稿者: きり | 2004年10月21日 17:38
いっぺんにやっちゃうのじゃダメかしら?(なぜか c#)
DateTime d基準日= new DateTime(1968,7,12);
DateTime d評価日= new DateTime(2004,10,21);
System.Console.WriteLine(
Decimal.Floor(Decimal.Parse(d評価日.ToString("yyyy.MMdd"))-Decimal.Parse(d基準日.ToString("yyyy.MMdd")))
);
投稿者: 市川 | 2004年10月21日 22:05