講義用スタイル
印刷用スタイル
(開いてから、ページを再度更新してください)
さて、ここで変数という考え方が無いと、プログラムを書くときに少し困った ことがあります。プログラムとしては、
10000 / 5のような記述になりますが、これでは費用が10000円で参加人数が5人のときの 計算しかできません。割り勘を計算するプログラムで「費用が10000円で参加人 数が5人」のときだけ使えますと言われても、そんなプログラムは使わないです (よね?)要するに、費用と人数は時と場合によって変わるので、それらに対 応できないと使い勝手が悪い(ほぼ使えない?)ということです。
そこでプログラムを書く際には「変数」というものを用意し、プログラムが実 行され、入力が指定されるまで値がわからないものを扱えるようにしています。 実際に書くと以下のようになります。ここではプログラム上で、hiyou と ninzu の値を指定していますが、Range() でセルからとってきたり、 InputBox() でユーザから対話的に入力される値を受け取れるようにできます。
Dim hiyou as Integer Dim ninzu as Integer Dim warikan as Integer hiyou = 10000 ninzu = 5 warikan = hiyou / ninzuここで、元の
10000 / 5という記述に対して、変数を使用したプログラムでは
warikan = hiyou / ninzuとなっていて、10000という数字の代わりに「hiyou」という変数を、5という 数字の代わりに「ninzu」という変数で記述します。また、結果を表現する変 数として「warikan」を用意し、ここに値を格納しています。
このように変数という仕組みを導入することで融通の効く、つまり使い勝手の よいプログラムを記述することができるようになるのです。
10000 / 5にしても、10000 とか 5 とかいう数はコンピュータの中の 「どこか」 に保存されて、計算されるわけです。今のコンピュータは、計算対象は かならず 「どこか」=「メモリ」 という電気回路で構成された実 在のもの、に置かれていて、それに対して CPU が事前にプログラミングされた 指示にしたがって処理をするわけですが、その結果も 「どこか」=「メ モリ」 の どこか に置かれて、それを出力したり様々な処 理を行なうわけです。
どうせ「どこか」に置かれるのであれば、それをプログラムの中から直接指示 できたほうが便利ですし、いろいろな数値が必要な複雑な処理をこなそうとす ると、きちんと指示してコントロールしないとちゃんと計算できません。じゃ、 そうしましょう=変数という枠組みを用意しましょう、ということです。
…なんとなくは理解できましたか?
なぜ変数に型は必要か?
教科書に書いてあるように、変数には データ型 という 格納
する種類 を事前に指定することができます。実は VBA では指定しない
こともでき、その場合はVariant という、なんでも扱える変数になるのですが、
C, Java のようなプログラミング言語ではデータ型の指定は必須です。ここで
は、データ型はなぜ必要なのかを考えます。
逆に、ある変数の内容が、2進数表現で
01000001だったとき、これが何を意味するかは文脈によってかわります。これを数値と してみれば (10進数での) 65 という整数ですが、文字としてみ ると (大文字の) A になります(文字コードの説明は略)。なの で、そのデータが何を表しているかが分かっていないと、つまり 型を指 定しない とプログラムは動けない、ということです。
エラーになるのは必ずしも悪いことではなく、プログラムが論理的に 間 違っている(バグがある) ことを教えてくれているわけですので、その 間違ったプログラムを直すきっかけになるわけです。授業での練習プログラム ならいざ知らず、業務で使う本番プログラムではバグはあってはならないもの なので、事前に間違いを指摘してもらえるのはありがたいことなのです。
warikan = hiyou / ninzuとなにげなく(?)書いていますが、この書き方に不自然さを感じる人がいる かもしれません。実は、見方によっては不自然に感じるほうが真っ当とも言え るのです。
数学で、変数を扱うときに「=」が出てくると、その左右の値が等しいことを 意味しています。しかし、プログラミングの世界では
warikan = hiyou / ninzuとかくと、 「=」は代入 、すなわち右の値を左に入れることを意 味します。例えば変数 a の値を1増やしたいときには、
a = a + 1と書きますが、これを高校の数学的に見ると a と a+1 が等しいことになって しまって意味不明です。繰り返しになりますが、
a = a + 1は、あくまでも「=」の右側の 「値」 すなわち変数 a の 中身の値に1を加えた値 を、「=」の左側 の 「変数」(データの入る器) に入れなおす、とい うことですので、最初のうちは慣れないかもしれませんが、気をつけてくださ い。
VBA は比較のための 演算子も「=」 なので、さらにややこしくて 文脈に依存します。ちなみに C,Java 等では、代入は「=」で、比較は 「==」 です。さらにちなみに、Rという統計処理・データマイニ ング用のプログラミング言語では、代入を 「 <- 」 で表すのが個 人的には気に入ってて、2年次配当の「先端技術論」(2021年度からは「AI・ データサイエンス基礎1,2」)ではRを使ったデータサイエンスの授業をしてい ます。興味ある人は履修してみてください。