こんにちは!かいけつマクロです。
全5回に渡って連載してきた電卓の作成も、残り2回となりました。
結構あっという間だったねー
今回と、次回は、前回までに作成した電卓に、入力規制を追加していきます。
前回の電卓で、こんなことを思われた方はいらっしゃらないでしょうか?
もし数字や四則演算以外を入力したらどうなるんだろう??
1桁の整数同士の計算しかしてないけど、小数点が出てきてもいいのかな??
実は、数字や四則演算以外を入力すると、こんな感じで、エラーになってしまいますし、(;・∀・)
小数点が出てくると、こんな感じで計算結果が間違ってしまいます。
今回と、次回のブログを通して、こんな「イマイチ」なところを改善するため、適切な値しか入力させない仕組み(=入力規制)を実装していきます。
より素晴らしい電卓に仕上げるため、今回も張り切っていきましょう!
変数の型を理解する
上で見た、2つのイマイチな例ですが、どちらも共通点があります。
それは、、、変数の型が誤っている、という点です。
例えばこちらの図をご覧ください。変数a、b、operatorを定義している箇所ですが、この「Long」や「String」というのが、「変数の型」です。
そして、「変数の型」を定義すると、その型にあったもの以外は、代入できなくなります。
第2項で出てきた、「代入」のイメージでいうと、
- 果物用のダンボール箱 ⇒ 果物しか入れられない
- 洋服用のダンボール箱 ⇒ 洋服しか入れられない
ということになります。
少々余談ではありますが、、、
現実世界で考えると、決まった型の箱にしかものを入れられないって、少し不便な感じがしますよね。ただ、今回作っている電卓もそうなのですが、システムの世界では、「ここには絶対に、数字を入力してほしい!」とか、「これは当然文字列だよね」といったことが、とてもよくあります。
そのような場合に、「なんでもござれ!」みたいな箱を用意してしまうと、VBA(システム)が求めていない「型」が入力されてしまい、全く意味のない計算・処理を行うことになってしまいます。(最悪の場合、システムが壊れます。)
そういったことを防ぐため、この「変数の型」を定義しておくことは、非常ーーーに重要になります。
さて、ここでは、代表的な変数の型を見ておきましょう。これだけ知っていれば、ほぼ困ることありません!(忘れても全然OK。ここに戻ってきてください。)
型 | 正確な定義 | ここを覚えよう! |
Boolean | TrueまたはFalse | TrueまたはFalse |
Long | -2,147,483,648~2,147,483,647の整数 | 整数 |
Double | 負の値:約-1.8×10(308乗)~-4.0×10(-324乗) 正の値:約4.9×10(-324乗)~1.8×10(308乗) | 小数点を含む数字 |
String | 任意の長さの文字列 | 文字列 |
Date | 西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻 | 日付と時刻 |
Variant | すべてのデータ | なんでもござれ |
Workbook | エクセルのブック | エクセルのブック |
Worksheet | エクセルのシート | エクセルのシート |
変数a、bの型をDouble型に変更する
それでは、具体的に、VBAを修正していきましょう。まずは、変数a、bです。
上で見てきたように、小数点以下を含むような数字を扱いたい場合は、「Double型」を使います。
それでは、変数a、bの定義を、以下の通り書き換えていきましょう。
Dim a As Double
Dim b As Double
また、変数operatorは、元々、String型(文字列)になっていたので、修正は不要です。
インプットボックスで入力した値を、Variant型の変数に代入する
ここからは、インプットボックスで入力した値の、変数への代入方法を変更していきます。
元々は、インプットボックスで入力した値は、変数a、b、operetorに直接代入していました。ただ、この場合、1つ大きな問題があります。それは、
「インプットボックスで入力された型」と「変数a、b、operetorの型」が一致していない場合、エラーが発生してしまう、ということです。(こちらの図ですね。)
そこで、エラーが発生しないように、以下のようにして、VBAを作り替えていきます。(変数aの場合)
- インプットボックスで入力した値を、Variant型(なんでもござれ)の変数buf_aに代入する
- buf_aの中身が数値であれば、buf_aの中身をaに代入する
- buf_aの中身が数値でなければ、buf_aの中身はaに代入せず、もう一度入力してもらうよう、インプットボックスを再度表示する
この2点目、3点目は、次回のブログで記述方法を解説していきますので、今回は、1点目「インプットボックスで入力した値を、Variant型の変数buf_aに代入する」の部分について、実装していきましょう!
といっても、ここまで読んでいただいている皆さんなら、きっと何も解説無くても、できてるかもしれません。もし、
忘れちゃったなー
という方は、こちらの「3.セルの内容を、変数に代入する」を参考にしてください。
さて、実際の記述はこんな感じです。
'変数定義--------------
Dim a As Double
Dim b As Double
Dim operator As String
Dim buf_a As Variant
Dim buf_b As Variant
Dim buf_operator As Variant
'インプットボックスの入力値をVariant型変数に代入--------------
buf_a = InputBox("1つ目の数字を入力")
buf_b = InputBox("やりたい計算の種類(+、-、×、÷)を入力")
buf_operator = InputBox("2つ目の数字を入力")
お疲れさまでした!これで、インプットボックスで入力した値を、bufに代入できるようになりました。
本日のまとめ
今回は、「変数の型」というものを中心に見てきました。
実は、この「変数の型」、VBAだけでなく、結構多くの開発言語で使われている概念であり、多くのITエンジニア達を苦しめている、超憎いヤツなのです。(私もその苦しめられている一人です笑)
ただ、途中の余談にも書きましたが、この「型」という概念があることによって、へんてこりんな処理をしてしまうリスクを最小限に抑えてくれる、という、大きな大きなメリットがあります。なので、
いちいち型の定義なんて面倒くさいよー
と思われるかもしれませんが、少しだけガマンして、「変数の型」に慣れていってもらえればうれしいです!
次回はいよいよ、電卓の作成、最終回です。ぜひ最終回もお楽しみにしてください!それでは!
コメント