<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>例外と戦う
   1 2 3 4 5 6



誕生日から年齢を割り出すなら、”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には、「NenGetsuヶ月」と表示されるようにするわけです。

あーゆーれでぃ?

Modっていうのは、ちょっと特殊な演算子ですけど、これで、「ある数をある数で割ったあまり」を出すことができるんです。端数じゃなくて、あまり、です。つまり、「12に満たなかった分」ということで考えてくれます。
これ、結構便利なんですよ。いろいろ使えると思いますんで、別途チェックしておいてください。

とりあえずふたつの変数を横に並べて、出してみましょうか。

15、じゃないですよ↓、1が年で、5がヶ月ですね。ええと、1年5ヶ月。続けちゃってますからね、NenとGetsuを。

じゃ、それより1ヶ月前だと・・・。

・・・な、なんで2年6ヶ月になってるんだ???
???
割り算しているだけなのになんで???

謎は深まるばかりだ!