関数は自分で作る

左辺=右辺(箱=値) アドレスの話も

左辺=右辺(箱=値)。値型の変数とオブジェクト変数の深い話し。プログラムの変数のお話し。

物理的な世界で、みかん箱にバナナを入れる。さらに、みかん箱にリンゴを入れるとみかん箱にはバナナとリンゴがある。メモリの世界ではバナナは無くなります。みかん箱は変数のような入れ物です。実際は、コンピュータの記憶装置/メモリはアドレス/番地で管理するが数字だとわかりにくにのでプログラムでは変数という文字を使う。

変数の機能は、入れ物と入れ物に入るがある。=は同じという意味でも使えるが、ここでは代入を意味する。右辺から左辺へ入る。右辺は値左辺は箱として機能する。

古くからある値型の変数は「入れ物」と「値」だけを理解すれば良かった

入れ物はメモリ上のアドレス(番地)として指定でき、その番地に値が入る。番地は、英語でアドレス、メモリの空間の中の番地という意味。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
モバイルバージョンを終了