dポイントプレゼントキャンペーン実施中!

VBで生年月日からの年齢換算の方法が分からず困っています;;

やりたいことは
1886/01/22 などの生年月日文字列 → 23歳3ヶ月26日のように年齢に換算するという内容です。

うるう年や各月の日数の違いなどを考慮し始めるとどんどんこんがらがってきて大変困っています。
だれか詳しい方がおりましたらご教授いただけないでしょうか?

A 回答 (3件)

年齢というのは、ふつうは「歳」までで、「月数・日数」が必要なことは非常に稀です。

「歳」までなら、極めて簡単なのですが、ご質問の趣旨は「月数・日数」を必要とされるのですね。この場合は、#1さんが言われるように、多少のドロ臭さは我慢します。

今日がy/m/dで、生年月日がy0/m0/d0とします。
m>=m0、d>=d0 なら「超簡単」ですよね。
次に、m<m0なら、y0に1を加え、m0から12を引きます。
さらに、d<d0なら、m0に1を加え、d0から「月内日数」を引きます。

この「月内日数」は、y0、m0によって28~31の間で変動します。この値を求めるための非常に簡単なアルゴリズムがあるのですが、ご自分で工夫してもできるでしょう。2000年が「うるう年」でしたから「グレゴリオ補正」は、してもしなくてもいいでしょう。

上記の処理ができれば、あとは(y-y0)歳(m-m0)月(d-d0)日で求められます。
    • good
    • 1

質問はVB6(VBA)かVB.NET系統か書いてありますか。

コードを左右するのでは。VBは今はVB2008などに決まっていると言えるのかな。
ーーーーー
Googleで「b.net 年齢計算」で照会すれば、記事がそこそこ出るじゃない。それさえやってないのでは。
http://7ujm.net/etc/age.html
参考
http://www5b.biglobe.ne.jp/~yone-ken/VB/Func/vbT …
http://homepage1.nifty.com/rucio/main/dotnet/Sam …
http://jeanne.wankuma.com/tips/vb.net/datetime/
    • good
    • 0

まず、基本と例外をごちゃ混ぜにしていっぺんに考えるとややこしくて仕方ないと思います。


まずは基本的なやりかた(たとえば2008年10月2日生まれで2009年11月1日なら・・とか、9/10なら・・とか)ではどう計算するのか考えます。

次に例外となる状態を一つずつ整理してリストアップしていきます。
多分面倒なのは月末の処理ですよね?
10月31日生まれで11月30日なら一ヶ月なのか30日なのか
10月31日生まれで12月1日なら一ヶ月+1日とみなすのかどうか
9月30日生まれで10月30日なら一ヶ月なのか31日なのか
9月30日生まれで10月31日なら一ヶ月なのか一ヶ月と1日なのか

思いつくパターンを全部拾い上げて、どうするのが良いのかを決めていくことでしょう。面倒臭がらずにとにかく思いつくものをきちんとリストアップして対処方法を決めていくことです。なるべくシンプルになるように決めるほうが良いでしょうね。
これが決まったら、先ほどの基本プログラムの中で「例外処理」として埋め込んでいけば良いわけですね。多少泥臭い判定方法でも良いと思いますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!