足し算でうまくいかないのはなぜ?
さきほどのようにInputBoxで2つの値を入力し、その値を元に計算して、結果を画面に出す、というプログラムはかけ算、割り算、引き算ではうまくいきます。しかし、足し算ではうまくいきません。num1 = InputBox("値を入力してください") num2 = InputBox("値を入力してください") MsgBox num1 + num2
このプログラムで、例えば最初の入力で3を、次に5を入力したとします。すると答えは8ではなく、35になってしまいます。これはなぜでしょうか?
それは、InputBoxから返されるデータは、数値ではなく文字列だからです。
文字列であるデータを数式に書いているわけです。
しかし、それでもかけ算や割り算の時にはうまくいっていました。これはなぜでしょうか? それは、「文字列のかけ算」というものはありませんので、コンピュータが「あ、これは文字列を数値に変換してかけ算をやれということだな」と勝手に解釈してくれるからです。割り算や引き算の場合も同様です。
しかし、足し算のときだけは事情が違います。なぜなら文字列には足し算があるからです。VBScriptでは文字列同士を足し算していると文字列の連結とみなします。ですから、「3」と「5」という文字を連結して「35」となるわけです。
では、どうしたらよいでしょうか? 正しく足し算するためには、文字列として入力された値を数値データに変換してやる必要があります。以前、逆のことをする関数が出てきました。数値を文字列に変換する関数 CStr というものです。CStrと逆に文字列を数値に変換する関数として CInt (Change Integerの略)というものがあります。
str1 = InputBox("値を入力してください") str2 = InputBox("値を入力してください") num1 = CInt(str1) num2 = CInt(str2) MsgBox num1 + num2
いったん str1とstr2 に入力された文字列をCInt関数を使って数値に変換し、num1とnum2に入れています。こうするとnum1とnum2が数値になるので、うまく足し算できるわけです。
また、CIntを使う行とInputBoxを使う行をまとめることも出来ます。CInt関数の中にInputBox関数を書きます。
num1 = CInt(InputBox("値を入力してください")) num2 = CInt(InputBox("値を入力してください")) MsgBox num1 + num2
CIntの括弧の中にInputBoxを書いています。このように書くと、まず括弧の中のInputBoxから処理の実行が行われます。つまり、「値を入力してください」という画面が出て、値を入力する処理が行われます。そして、InputBoxが返すデータ(文字列)を今度はCInt関数が処理をして、数値データとしてnum1に返すわけです。
このようにInputBoxで入力した変数は常に「文字列」になるため、数値を入力してもらう場合には気をつける必要があります。数値を入力する際にはCIntを忘れないようにしましょう。
問題5-3:
値を入力し、その値に2を足した値を表示しよう。