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



「値の代入」の練習_3

んでは続きです。もうちょっと慣れていきましょう。
そしたら今度は、テキストボックスに入力したポンドをグラムに換算してみましょう。


1ポンドは453.59237gだそうです。細かい〜。
そこで、式はこんな感じかな。

うむ、4ポンドは1814.36948gか。

グラムじゃなくてKgで表示させてみましょうか。
1kgは1000kgですから、出た答えを1000で割ります。
足し算や引き算が混じってるわけじゃないので、先頭から順番に計算されますし、これでも出るんですけど、いちおう気分的には、

こんなふうに、先に計算してもらいたい式をカッコでくくっといたほうがいいかもしれないですね。

しかし、こんなに細かく出されてもなぁ・・・。ある程度の桁で、切り捨てしたほうがいいかもしれないですね。
切捨てをするための関数っていうのがあるんですよ。これ使ってみましょう。

Int関数かFix関数という関数を使います。Intの方がわりと有名かな・・・。
正の数の場合はどっちでも同じなんですが、負の数(つまりマイナスの値)の場合だと、IntとFixでは切り捨て方が違うんです。
マイナスの数値をよく扱う可能性の高い人は、ヘルプで確認しておかれたほうがいいかもしれないですね。
今回はIntを使ってみようかな。使い方としてはこうです。

ギャハハ。1kgだって。切り捨てすぎ?

そう、int関数もFix関数も小数点以下を切り捨てる関数なので、こうなります。
これじゃ極端すぎますか?
んじゃあ、小数点以下第2位で切り捨てますか。これがねー今の段階ですと、意外と難しいんです。

考え方の基本としては、小数点の位置をずらしてやればいいわけです。Int関数は、小数点の位置で切り捨てるんですからね。
ずらすって言っても、そう簡単にはずれません。
どうするかというと、一番手っ取り早い方法としては、100を掛けるのです。100掛けると、小数点の位置は2桁ずれますよね。
その状態で、Int関数で切捨てをし、出た答えを100で割ればいいわけです。

1.81436948 × 100 = 181.436948 
181.436948 を、小数点以下で切り捨てると、 181
181 ÷ 100 = 1.81

案外俗っぽい考え方でしょ?理系より文系っぽい発想が必要なんです。
(プログラミングに理系とか文系とかはあんまし関係ないと思うんだけども)

うしろの100を(100を掛けて100で割ってるところ)、それぞれ1000にすれば、小数点以下三桁で切り捨てします。
1行の式の中に、物語がありますよね。この式の中から、物語の流れを読み取ることができるようになると、VBAっていうものが一段と身近な存在になると思います。

こういう式を理解していくには、まず一番内側のカッコから見ていくのがコツです。左端から見てっても、理解は深まらないと思いますよ。
結果はこんなふうになりました。



え?四捨五入はどうやるのかって?
これはね、できません。四捨五入する関数ってないんですよ。
Round関数っていうのがあるにはあるんですが、場合によっては若干、四捨五入とは言いがたいこともあるので(数字を指定桁位置で丸める関数なので)、今回は、Int関数を応用して手作りします。実は(VBAに限らず)コンピュータで「小数点以下の数字を扱う」のって、かなり難しいんです。小数点の扱いの難しさはプログラミングの初心者だろうが上級者だろうが同じことで、プログラム開発にかかわる人なら誰でもみんな苦労しているところなんです。だから、できるだけきちんと答えが出る方法を考えていく必要があるんですね。
いろんなやり方が考えられるとは思いますが、よく使われている方法をひとつご紹介します。

やってみます?
考え方は、たとえば、小数点2桁で切り捨てたいなら、100掛けて、0.5足して、Intで切り捨てて、100で割ります。

1.81436948 × 100 = 181.436948
181.436948 + 0.5 = 181.936948 <この時点で、小数点第1位は、4。切捨ての対象ですね)
181.936948 を、小数点以下で切り捨てると、 181
181 ÷ 100 = 1.81


小数点第4位で切り捨てたい場合は、
1.81436948 × 10000 = 18143.6948
18143.6948 + 0.5 = 18144.1948 <この時点で、小数点第1位は、6。切り上げの対象ですね)
18144.1948 を、小数点以下で切り捨てると、 18144
18144 ÷ 10000 = 1.8144

四捨か五入かを、小数点をずらした後に0.5を足すことでやりくりしてるわけです。
ほんとに四捨五入しているかどうか、小数点第4位の四捨五入にしてみないとわからないと思うんで(第3位や第2位だと切り捨てのときと同じ結果になるし)、桁をずらしたりして結果を確認してみてください。

こういう式を作ると、慣れないうちにつまずくところがあります。カッコの数です。
カッコも含めてその他の記号も、無作為に並んでいるわけではありません。存在する意味があります。
カッコは必ず、対になってますから、かたっぽ足りなかったりすると赤くなって怒られちゃいますからね。

ちゃんと対応するカッコをつけてあげれば、怒らなくなります。
式が複雑になると、カッコの数を間違えがちなので、こうやって徐々に式を複雑にしていくといいですね。
いきなり左端から一文字ずつ入力してしまわずに、一番内側のカッコから少しずつ肉付けして考えていくようにしましょう。

こんな感じで、右辺(式の右側。つまりイコール記号の右側)で何かしら出した答えを、左辺に代入する、っていうのが、VBAの基本中の基本なのです。
左側の式の作り方が間違ってれば当然正しい答えは出ないし、代入する先が間違っててもいけません。
VBAは、こうした小さな式がたくさん積み重なって、ひとつの処理を織り成すように作っていくプログラミング言語なので、まず1行1行丁寧に式を作るところからはじめないとなりません。
現実はこんなもんですよ。何かすごいことをやってくれる超便利な機能とかじゃないんです。手作り。それもすごい地味な作業。
ちょっと間違えただけでエラーになるし、そんな便利なもんでもすごいもんでもありませんよ。
ね、そう考えて、焦らずちょっとずつ理解をしてってください。VBAなんて、そんなたいしたもんじゃないんですから。