変数は代入演算子?(4)::システムトレード完全攻略(エクセル活用術)

システムトレードのトップへ > VBA > VBA入門  >変数は代入演算子?(4)

変数は代入演算子?(4)

変数はデータを格納するためのもので、代入演算子と呼ぶ。数学の「=」とは違うらしい。では数学の等号(=)とはどう違うのか?という話です。



変数を説明する時によく用いるのが変数は「箱」とう概念を用います。また、変数という名前から「変化する箱」というイメージが湧きますが、どちらかというと、「使い回す箱」の方がプログラム(VBA)の変数の説明にはぴったりかもしれません。例えば・・・

今あなたは大きなフルーツ店の店員とします。先ほど顧客の山本様から電話があり、フルーツの詰め合わせを箱詰めする作業を始めるとします。最初の最初にこの作業に名前をつけましょう。題して「山本様用の箱詰め作業」です。コードで全体イメージを書くと


Sub 山本様用の箱詰め作業()

宣言文

箱詰め作業の内容(本文)

End Sub


となります。

まず、箱詰め用の箱を取り出し他のお客様の箱と区別するために箱に山本様というのし紙を付けます。この行為が変数の宣言に相当します。コードで書くなら


Dim 山本様

となります。


次に箱を持ってリンゴのコーナーに行きリンゴ3個を山本様用の箱に入れます。ここで分かってほしいのは山本様=リンゴ3個ではないということです。イメージ的には山本様の箱にリンゴ3個入れるのですから、山本様←リンゴ3個の方が近いのですが、そのようなルールはないのでコードは、


山本様 = リンゴ3個

となります。


そして、その箱を持ってメロンコーナーに行き最高級のメロンを一つ加えます(箱を移動させる、つまり使い回す)。

山本様 = リンゴ3個+メロン1個

と書きたいところですが、リンゴ3個は先に箱に入っているので、

山本様 = 山本様 + メロン1個

と書くのがVBAのルールになります。イメージだと

山本様 = 山本様 ← メロン1個

になります。式左側(赤い山本様)の「山本様」の中身はリンゴ3つとメロン1つで、右側の「山本様」の中身はリンゴ3つだけなのが理解できるでしょうか?ここも、山本様の箱を左から右へと使い回す箱のイメージです。


この点に違和感を感じるのは、数式の等号とは明らかに違うからです。数式では左辺の山本様と右辺の山本様が打ち消しあって、この数式の解は「なし」になります。


0 = メロン1個

となり解なしになります。しかし、VBAでは、「山本様 = 山本様 + メロン1個」の山本様どうしは打ち消し合いません。箱が左から右に移動して使い回されたイメージになります。


最後にバナナ1房を「山本様」の箱に入れ、包装して完成です。後は山本様にお届けするだけです。

山本様 = 山本様 + バナナ1房

とコードでは書いて完成です。確認ですが左側の山本様の中身はリンゴ3つ、メロン1つ、バナナ1房で、左側が山本様が注文した物です。右側の状態で山本様を渡すと、リンゴ3つ、メロン1つで注文とは違う商品となり、店長に叱られます。

これで、山本様の商品が完成しました。あなたは又別の作業に取り掛かります。コードで書くと


End Sub

となります。この時点で変数「山本様」は消えてなくなります。当然中身の情報もです。実際にEnd Subの時点で変数「山本様」というメモリーが解放されます。パソコンに詳しいのなら、変数とは習得した計算結果やプロパティなどを収納しておくためのメモリー領域と言った方が分かりやすいかもしれません。変数のイメージが掴めたでしょうか?

ここまでの一連のコーディングをまとめます。


Sub 山本様用の箱詰め作業()

Dim 山本様

山本様 = リンゴ3個


山本様 = 山本様 + メロン1個


山本様 = 山本様 + バナナ1房

End Sub


となります。ここで実際に1つのプロシージャとして機能するためにちょっとだけ書き直します。

Sub 山本様用の箱詰め作業()

Dim 山本様

リンゴ3個 = 900

メロン1個 = 3000

バナナ1房 = 500

山本様 = リンゴ3個


山本様 = 山本様 + メロン1個


山本様 = 山本様 + バナナ1房

MsgBox "山本様のお会計は" & 山本様 & "円です。"

End Sub

上記のプロシージャをVBEの編集画面にコピペして実行してみてください。山本様分の代金がメッセージボックスに表示されます。

補足ですが、数学的な「=」の定義は以下4つの条件を必ず満たします。

反射律: 対象 a が何であっても a = a は常に成り立つ。
対称律: 対象 a, b について a = b が成り立っているときはいつでも b = a も同時に成り立つ。
推移律: 対象 a, b, c に対して a = b と b = c が同時に成り立っているときには常に a = c も同時に成り立つ。
代入原理: 対象 a, b が a = b であるときには、一つの自由変数 x を含むどんな式(あるいは命題関数) P(x) についても P(a) = P(b) が(両辺ともに一意的な意味を持つ限りにおいて)常に成り立つ。

と深く考えずにざっと見ただけでも、なんとなくVBAプログラムで使う、「=」、代入演算子の使われ方とは違うと気づくはずです。


まず、「山本様=山本様+メロン1つ」が成り立つという理由から、プログラム変数では等号であるための4つの条件の内、最初のa=aは絶対a=aと矛盾しているのがよく分かる。よって等号ではない


また、対象律の条件も満たさない。山本様=リンゴ3つはあるが、リンゴ3つ=山本様だとリンゴ3つが変数で山本様が値になる。VBAでは左辺と右辺を入れ替えると全く違ったプログラムになるか、エラーになる。

最後の最後に、VBAでは、どれが数学的等号に該当するかといえば、If a = c then の中の 「a = c」 が数学の等号にあたります。ちなみにJAVAでは、等号を「a==b」と表わし区別します。


セルレーダー最新版ダウンロードした(^▽^)?

人気ブログランキングへ





1位取れたら未公開プログラム沢山吐き出すので応援のポチ2つしてね(≧ω≦)

投稿者 システムトレーダー壱式 : 2008年04月14日 23:51



トラックバック

このエントリーのトラックバックURL:
http://systemtrader.info/cgi/mt/mt-tb.cgi/18

コメント

コメントしてください




保存しますか?


//-->