物理的な世界で、みかん箱にバナナを入れる。さらに、みかん箱にリンゴを入れるとみかん箱にはバナナとリンゴがある。メモリの世界ではバナナは無くなります。みかん箱は変数のような入れ物です。実際は、コンピュータの記憶装置/メモリはアドレス/番地で管理するが数字だとわかりにくにのでプログラムでは変数という文字を使う。
変数の機能は、入れ物と入れ物に入る値がある。=は同じという意味でも使えるが、ここでは代入を意味する。右辺から左辺へ入る。右辺は値。左辺は箱として機能する。
入れ物はメモリ上のアドレス(番地)として指定でき、その番地に値が入る。番地は、英語でアドレス、メモリの空間の中の番地という意味。64ビットWindowなら2の64乗(数字にして20桁)のアドレス、メモリ空間がある。この番地の数字の代わりに変数というわかりやすい文字でアドレスの中身を操作できるようにしたもの。
次のDimステートメントで、Long型(型は、メモリ上の大きさと中身性質を意味する)の変数aを宣言する。
Dim a As Long
変数aに変数bの値を入れる式は、「a=b」となる。
Dim a As Long, b As Long
b=1
a = b
aには、Longサイズまでの大きさの入れ物で数値が入る。左辺の箱に右辺の値を入れる。左は箱、入れ物。その入れ物はメモリにあり、メモリ上のアドレス(番地)を変数aという名前で使う。
「a=b」は、変数bは、値を右辺に渡す。左辺の変数bは、入れ物として動いている。
「1=b」はできない。この式はありえない。1は値だけで、変数のように入れ物として扱えない。1は計算するまでの一時的なメモリの領域に作られるが、1をプログラム上ではメモリの場所(箱、アドレス)としては扱えない。
右辺のa+bは、a変数の値とb変数の値を加算する。
a = a + b
値型の変数は、「箱=値」の考えでいいが、オブジェクト変数になるとあるオブジェクトを参照している変数なので次図の値は参照先のメモリアドレス値が入っているのでオブジェクト変数.Valueなどのプロパティやメソッドは、オブジェクト変数に「.」ドットを付けて使う。次図はイメージの図。
Publicにしてイミディエイトウィンドウから使えるようにする。標準モジュールに書く。
Public sh As Sheet1, ra As Range
以下はイミディエイトウィンドウに書く。
Set sh=Sheet1
Set ra=Sheet1.Range("a1")
ra.Value=123
?ra
234