<HOME  <お願い事項  <Access2000 TOP   <Access97 TOP   <サイト内検索
  Ac2002--VBAの沼 > 「値の代入」の練習
   1 2 3 4



「値の代入」の練習_4

では次に、積み残しの宿題をやりましょうか。

ほれ、さっき、2回クリックしたらなんで200にならないの?って、あれです。
なんでなのかは、もうだいたい見えてきてますよね。わたしは皆さんを信じてます。
では、どうしたら、「どんどん加算していく」ようになるのか。というと?

一番最初に作った式に戻りますよ。

こうじゃなくて、

こうです。
テキスト2に既に入っている値に、100を足すのです。
「値を代入」しているだけですからね。ボタンクリックするたびに100加算しているのではなくて、その都度100を代入しなおしてるわけですから、足してやらないと増えるわけないんです。ほんとにもう、コンピュータって気が利かないですよね。
んでは、いったんフォームを保存しつつ閉じて、一息入れてから、再度フォームを開いて、コマンドボタンをクリック!

ありー???
今度は何も起こらないじゃん???

これはですねぇ・・・。ボタンをクリックしたときの、テキストボックスの内容によります。
テキストボックスの中見てくださいよ。空っぽでしょ。未入力の状態。
コンピュータはバカなので、空っぽ=0とは、思わないんです。空っぽに何を足しても、空っぽなんです。

こういう場合の考え方はふたつあります。
ひとつは、テキストボックスに何らかの方法で0(ゼロ)を入れておく、という考え方です。例えば、テキストボックスの「規定値」プロパティに0を入れておくとか。こうしておけば、フォームを開いたとき必ずテキストボックスにはゼロが入っているので、ゼロに100を足した結果が、テキストボックスに帰ってくるはずですよね。

でもここは、VBAの作り方の入門講座なので、コードの中での対応についてお話します。
もうひとつの考え方の方ですが、プロシージャの中で、「空っぽ対策」をしておくことです。
つまり、テキストボックスの中身が空っぽだからといってあきらめないで何とかしてくれ、という命令を加えます。
手っ取り早い方法としては、Nz関数というのがあります。
「空っぽ」(コンピュータではNullという言葉を使ったりもしますが)というものの扱いは、わたしたち人間とコンピュータではちょいと感覚が違うので、こういう関数の用法などを抑えておくとよいかもしれないですね。

ほら、計算するようになったでございましょう。

さて、こういう処理を作ったとき、頭が痛いのが、「押しすぎ」の場合です。
まあ、何千回クリックしてもらってもいいんですけどね。でもねぇ・・・。
そこで、ある程度の数字に達したら、クリックしても数字が増えないようにしましょうか。

こういうときに登場するのが「条件分岐」という処理です。
今回は、If…. Than….
というのを使ってみます。いわゆる2択ですね。「Yesのときと、Yesじゃないときと」で、処理を二つに分けたいときによく使います。

基本構造は、

If なになにがどうだったら then
       どうするこうする
End If

という構文になります。
じゃあー・・・テキストボックスの中の値が、1000以下だったら、まだ足し算してってもいいことにしましょうか。
「なになにがどうだったら」の部分に、「テキストボックスの中の値が1000以下だったら」という意味の式を入力します。
で、「どうするこうする」のところに、テキストボックスに100足す式を書きます。

こんな感じかな。

書き方としては、

こんな感じ↑ですね。
IFとEnd IFの間に、今まで書いてあった足し算の計算式が入るようにしてやるわけです。
これで、Ifの後ろの条件式(テキスト1が1000以下だったら)に合わない場合は、End IFのところまで処理がすっ飛ばされるので、足し算は行われません。

あ、でも、これだけじゃダメか・・・。
テキスト1が空っぽの場合は、「空っぽ」は数字じゃないので、「1000以下」とはみなされないはず・・・。
条件がふたついるな・・・。
テキストボックスとかフィールドの中身が空っぽだったら(空っぽだったらというか、未使用の場合、という意味になるんですが)、という調査をするための関数があるので、そいつを使ってみましょうか。IsNull関数という関数です。詳しい用法は、ヘルプを見といてください。

このふたつの↑条件式をIfのところに並べてやれば、いけるはずです。
並べ方なんですけど、「両方の条件を満たした場合」か「どっちか一方の条件を満たした場合か」を考えます。
今回の場合は、「どっちか一方の条件を満たした場合」ですよね。
その場合は、下のように、ふたつの式を Or という文字で結びます。

できたら、VBEのウィンドウを閉じ、フォームを保存して、いったん閉じて・・・。一呼吸置きましょう。
再度フォームを開いて、クリックし続けてみましょう!

あり?1100まで増えちゃうな・・・。
そうか。1000以下ってことは1000も含まれるんだから、テキストボックスの中身が1000の時は、100足すんだな。まだ。
1000以下じゃなくて、1000未満っていう条件にすれば、1000より大きくはならないはずです。

こういうことも、細かく考えていかないといけないですね。
ふう、ほんとにもう、いろいろ気をつけなくちゃいけないことが多いなぁ。

VBAというものは、基本的に、ソースの1行目から順番に仕事を進めていきます。
なので、2行目に書いた処理は、1行目の処理の次に、着手されます。
If ….. End If の間に書いた処理は、 Ifの後ろの条件によって、実行される場合とされない場合に分かれるわけですね。
テキストボックスの中に今何が入っているかによって、100足されるかどうかが決まるわけです。



でもこれだと、「なんで100増えないのかしら?」って思う人がいるかもしれない。
そこで、「テキストボックスの中の値が1000以下じゃなかったら」、つまり、1行目の条件を満たなさい場合にも、何かアクションを起こしたいときに使う構文をご紹介しましょう。

If なになにがどうだったら then
       どうするこうする
Else
       こうこうこうする
End If
If なになにがどうだったら then
       どうするこうする
End If

この2つの構文を比べてみて、違いを確認してくださいね。
今度はElse(そうじゃなかったら)という単語が入ってますよね。
たとえば・・・そうだな、MsgBoxを出しますかね。

こんな感じでどうでしょう。



VBAを使いこなすためには、このIf … End に慣れないといけませんね。
プログラムを作るということは、「こういうときはどうする、こういうときはどうする・・・」と、条件分岐の連続です。
ただし、闇雲に覚えるのではいけません。
今回いろいろ見てきて、既に皆さんお感じになっていると思いますが、VBAは英文を書いているのと同じようなものです。作文です。
何か伝えたい事柄があって、それをどういう順番でどう書き綴ったらいいのか・・・を考えるのが、VBAのプログラミングです。っていうか、プログラミング言語ってものはたいていそうなんですけどね。。。。後は、何語で書くかによって文法やら気をつけるべきことが代わるだけのことです。プログラミング言語の中ではVBAはわりかし「人間の会話」に近い構造を持っていますので、他のプログラミング言語に詳しい人にとっては肩透かしな感じがするかもしれません。うーんでも、「他の言語に慣れているからVBAはとっつきにくい」なんて言う人は、ちょっと眉唾な感じもするかな・・・。手法や用法は違っても、「プログラミング」という面では、どの言語でも考えるべきところは同じはずなんですけどね。

心がけておくことはただひとつ。「なんかわかんないけどすごいことができるみたい」みたいな妄想をいだかないこと。
書かないことは、やらないし、逆にいろいろ気遣ってやらないとまともな仕事はしないです。コンピュータって奴は。