次図のように値型とオブジェクト型の2つに分けるとができる。
最も適用範囲が広いのがバリアント/Variant型。Variant型は動的に変数のメモリ領域を割り当てる。しかも、Variant型はどんな型にも対応できるのでメモリは大きめに用意されている。最近流行りのRubyやPythonなどのント/Variant型。Variant型は動的に変数のメモリ領域を割り当てる。しかも、Variant型はどんな型にも対応できるのでメモリは大きめに用意されている。最近流行りのRubyやPythonなどのスクリプト言語は変数宣言しないVariant型みたいなもんです。
Letステートメントは、頻繁に現れるステートメントなのだが普通は省略する。
x = 1 + 2
=は代入演算子で、次が正確な構文になる。
Let x = 1 + 2
Letステートメントを使う変数とSetステートメントを使う変数という分類になる。
Letは日本語では「入れる」という意味。例ではxには数値3が入る。値型の変数はLetを使う。これに対してSetでは値を扱うのではなく右辺(=の右側)のメモリ上のアドレスを入れる。Object型の変数には、オブジェクトのインスタンス(Instance、実体)がロードしている先頭アドレスが入る。Setは「オブジェクトへの参照」と言う。
- オブジェクト変数には、オブジェクトを指すアドレスが入っていると解釈する。
- オブジェクト変数には、参照先のアドレスが入っている。
オブジェクト変数は、操作するためのハンドルのようなもの。
以下を標準モジュールかSheet1などに書いて実行します。shがオブジェクト変数です。sh変数は、WorkSheetクラスとして振る舞う。インスタンス/実体は作らないが、実体Shee1とSheet2をSetしてSheet1とSheet2の機能(Rangeプロパティ)を使ってデータを入れる。
Sub aa()
Dim sh As Worksheet
Set sh = Sheet1
sh.Range("a1") = 123
Set sh = Sheet2
sh.Range("a1") = 456
End Sub