Excel VBAでオブジェクトを代入する:Setステートメント

数値や文字列は特別なことをせずに代入できますが、オブジェクトを代入する際にはSetステートメントを使う必要があります。

変数に何かを代入する場合

Excel-VBAで変数に格納できるものとしては、

・数値、文字列、日付等のオブジェクトではないもの
・ワークシート、ファイル、セル範囲などのオブジェクト

の大きく分けて2種類があります。

このうち、オブジェクトではないものは特に何もつけずに

splNum = Cells(1, 1).Value

というように代入できますが、RangeやWorksheetのようなオブジェクトについては

Set splWsht = WorkSheets("Sheet1")

というように、Setステートメントを使用して代入します。

Setステートメントの使用例

Resizeプロパティのマクロ例

Dim celRange As Range
Set celRange = Range("B2:G9")

上記のように、Rangeというオブジェクト変数を定義してから、オブジェクトを代入します。

マクロ作成・実行時の注意点

Setステートメントで代入したオブジェクト変数は、下記ステートメントで必ずオブジェクト変数の使用領域を解放することを忘れてはいけません。

Set 変数名 = Nothing

たとえば、Resizeのマクロ例で上記を忘れると、カーソルがシート上の元々あった位置から動かなくなるという現象が発生することもあります。(カーソルをセルB2に合わせて、Set celRange = NothingとSet resRange = Nothingをコメントにして実行すると…)

通常の変数は、マクロが終了するとメモリ上から使用領域も合わせて自動的に解放されますが、Setステートメントで代入したオブジェクト変数については、変数がオブジェクトを参照するという情報が残っていることもあるので、Nothingという命令で完全に解除する必要があります。