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



こういうテーブルがあったとします。みんなの「入社年月日」を記した日付時刻型のフィールドがあります。
このフィールドを基に、「何年何ヶ月目」ということを、随時知るためにはどうしたらいいんでしょう。
できれば、横に並べたいんですけど・・・。

こういうことはみなさんご承知とは思いますけど、日が変われば、数値が変動するような、動的な値は、テーブルではなくてクエリで取得します。
こういうクエリを作って、DateDiff関数を使ってやれば、

こうやって結果を得ることができますよね。

つまり、DateDiff関数にとってかわる「今日で勤続何年何ヶ月目かを取得する関数」があればよいのです。でも、ないので、自分で作ろうと思うのです。
原理は今さっきフォーム上で作ってもらったのと同じです。でもでも、あれって、このクエリの中では動かせないですよね。

なぜなら、Privateプロシージャだから・・・。あのフォームの中だけで動かすことのできるものなんですよね。このクエリの中に、テキスト0_AfterUpdate()なんていうプロシージャ名入力したって、クエリにはこのプロシージャの名前が見つからないんです。
このクエリは、フォームの「外」ですもんね。
ここが、PrivateプロシージャとPublicプロシージャの違いが出るところです。


じゃあ、作ってみましょうか。クエリでも使える、Publicなプロシージャを。

作り方は、オッケーでしょうか?いろいろな始め方がありますけど、今回は、「モジュールを新規作成」して、「プロシージャを追加」してみてください。モジュールの名前はModule1でよいです。

プロシージャの追加のダイアログで、なんか適当なプロシージャ名を決めます。なんでもいいですよ。でも、使わない方がよい記号とか、後でわけがわからなくなりそうな長い名前とかは避けて、わかりやすい名前を付けてくださいね。あ、あと、既存の関数名としてありがちな名前(NowとかDateとか)もさけるべし。こういうことはみなさんオッケーですよね。

で、今回の処理の内容は、というと、指定した値(入社年月日)から、勤続年数を計算して算出するのですから、このプロシージャによって何かしら「答え」を返すことになりますよね。こういう処理のときは、SubではなくFunctionプロシージャという記述の仕方になります。

これも繰り返しくどくどになっちゃいますけど、「どういうときSubでどういうときFunctionを選べばいいの???」なんて、焦って覚えようとなさらず、サンプルコードとか見ながら、ゆっくり納得していってくださいね。

今回は、クエリ上で「=NenG([入社年月日])」ってやったら勤続年数が出るようにするので、こういうときはFunctionプロシージャってことになります。

後は、だいたいさっきのと考え方同じなんですけど、Privateプロシージャじゃないので、フォーム内のテキストボックスをMe!って指示できるわけじゃないですよね。
どうやって「入社年月日」の値の入ってるところをこのプロシージャに教えてやるか、というのがポイントになるんですが・・・。
プロシージャ名の後ろに、カッコがついてますよね。これ、いわゆる「引数」ってやつを入力するための場所なんですけど、このカッコの中に、「入社年月日」の値を入れるようにしましょう。

とりあえずここは、変数名を指定しておきます。カッコの中に、入社年月日が入力されてきたら、それはItsuという名前の変数に代入してプロシージャ内では使っていくよ、という感じになりますね。Itsuというのはわたしが考えた変数名ですので、別にHeboでもAhoでも、なんでもいいですよ。

で、あとは、おんなじ計算をするんで、使う変数も同じ数だけ・・・めんどくさいんで変数名もそのまんま使っちゃいます。
計算の仕方も同じなんですけど、DateDiff関数の引数がちょっと違いますね。

今までのでは、フォームのテキストボックス名をそのまま書いてましたけど、今度は、Itsuという変数の中に入ってくる値がそれに該当しますんで、Itsuという変数名を書いておきます。

とりあえずこんな感じかな。いちおうコンパイルして記述間違いがないかどうか確認して、上書き保存しておいてください。
これで、NenGという名前のプロシージャは、このdbの中で自由に使うことができるようになりました。

たとえばクエリの中はで、こんなふうに書き込んでやります。

ちょっと、「式1」ってのはかっこ悪いですけど・・・まあ、今日は練習だからいいか。気になる〜という方は、書き換えちゃってください。
どうでしょう。結果、出ますか?

で、もし、「9年0ヶ月」とか、0って出ちゃうのがいやだなーと思ったら、ちょっと複雑なIf文を使って書き方を分けてやります。

If文も慣れないといろいろ難しいですから、焦らないでゆっくり理解していってくださいね。
後は、いろいろ書いてみて、いろいろ試してみるのがベストだと思いますよ。
これで、0ヶ月のときは、年の部分だけ表示するようになると思います。