<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ||
MS-Access2000--VBAの小屋>例外と戦う |
誕生日から年齢を割り出すなら、”yyyy”で出せますかね。どうかな・・・友達の誕生日とか入力して、試してみてください。
・・・うーん、残念ながら、これだけじゃダメみたいですね・・・。一瞬、よさそうな感じもするんですけど・・・。
なぜなら、確かに表現するための単位は「年」ですが、判断するのは「日」ですよね。
単位が”yyyy”だと、西暦の部分だけを見て判断しているみたいです。これだと、誕生日過ぎても、年が明けないと年齢が変わらないってことになって、全員「数え年」になってしまう。数え年でいいのならこれで何とかなりますけど・・・。
勤続年数を表わす場合はどうでしょう。
これも考え方ですけど、入社月がいつかは別に関係なくて、4/1現在での経過年月日を計算するとか、一定の決まりがあれば、”yyyy”でもよさそうですけど、10月入社の人は翌年の10月が来たときに1年、11月になったら1年1ヶ月、っていう感じで数えたいときは、これじゃダメですよね。
いきなりダメなことばかり書いて申し訳ないんですが、これも目標達成の第一歩と思ってください。
んじゃ、勤続年数を、月で判断できるようにしてみましょうか。今月で、勤続何年何ヶ月か、って出せるように。
考え方として・・・
DateDiff関数で、「経過月数」を求めます。
たとえば14って出たら、1年2ヶ月ですよね。これを出すには・・・。12で割った答えが「年」で、あまりを「ヶ月」に割り当てればよいはず。
こういう処理をやるためのプロシージャを作ってみましょう。
せっかく入力していただいたんですけど、テキスト3の「コントロールソース」欄は全部消して空っぽにしておいてください。
で。。。テキスト0の「更新後処理」で、この計算がなされて、答えがテキスト3に代入されるようにしてみましょう。
細かいことは後回しにして、まずはこの辺のイメージを頭に思い浮かべてみてください。
だいたいイメージできました???
んじゃ、いきますよん。
わたしのフォームでは、日付を入力するテキストボックスの名前が「テキスト0」なので、プロシージャの名前は上のようになりました。
で、無理やり「○年△ヶ月」って捻出しちゃうこともできるかもしれないですけど・・・。「○年」と「△ヶ月」は別々に計算して出しますから、○と△をそれぞれ入れておく変数を定義しておきましょう。
3つ必要かな。
じゃ、さっき使ったDateDiff関数を使って、「テキスト0に入力した日から今日までで、何ヶ月たってるのか?」という答えを、Nengetsuという変数の中にゲットします。多分、相当なことがない限り、3万ヶ月を超えることはないと思うんで、整数型(Integer)という型にしときます。
で、とりあえずゲットした数を、テキスト3の方に出してみましょうか。
フォームビューに切り替えて、適当な日付をテキスト0に入力して、Enterキーを押してください。
なんでEnterキーを押さないとならんのか、は、・・・まさか、わかんないとか、そういうことはないですよね???
このプロシージャは、「テキスト0の更新後処理」に動かすつもりで書いてるから、ですよ。しっかりしてくださいよう。
何かしら答え出てきますよね。関が原の合戦から、まだ4800ヶ月くらいしかたってないんですね。
人間なんてちっぽけなもんですねぇ・・・。
・・・なんか湿っぽくなっちゃいましたね。すいません。続き、がんばりましょう!それでも地球は回ってるんだ!
4809を12で割った、答えの部分の「400」が「年」にあたり、変数Nenに入ります。
4809を12で割って割り切れた「4800」は置いといて、残りの「9」が、「ヶ月」にあたり、変数Getsuに入ります。
で、テキスト3には、「Nen年Getsuヶ月」と表示されるようにするわけです。
あーゆーれでぃ?
Modっていうのは、ちょっと特殊な演算子ですけど、これで、「ある数をある数で割ったあまり」を出すことができるんです。端数じゃなくて、あまり、です。つまり、「12に満たなかった分」ということで考えてくれます。
これ、結構便利なんですよ。いろいろ使えると思いますんで、別途チェックしておいてください。
とりあえずふたつの変数を横に並べて、出してみましょうか。
15、じゃないですよ↓、1が年で、5がヶ月ですね。ええと、1年5ヶ月。続けちゃってますからね、NenとGetsuを。
じゃ、それより1ヶ月前だと・・・。
・・・な、なんで2年6ヶ月になってるんだ???
???
割り算しているだけなのになんで???
謎は深まるばかりだ!