今回はVBAで用いるオブジェクト変数について説明します。
まずはVBAでオブジェクト変数をどのように宣言して、どのように使用するのか基礎的な内容を書いていきます。
また、オブジェクト変数と一緒に用いられるSetステートメントにも焦点を当てていきたいと思います。
変数の基礎については以下の記事をぜひ参考にしてみてください。
【エクセルVBA初心者講座】変数の利用方法|モジュールレベル変数とパブリック変数とは
続きを見る
それでは早速オブジェクト変数について見ていきましょう!
Contents
オブジェクト変数の基礎
オブジェクト変数とは一言で表すと「オブジェクトを参照できる変数」です。
これだけ聞いてもイメージできないですね・・・
まずは通常の変数とオブジェクト変数の違いを理解しましょう。
通常の変数
VBAで用いる通常の変数は文字列や数値を格納します。
例えば数値を格納する変数に「10」という数値を格納すると、変数は「10」と同じ性質を持ちます。
そして、その変数を計算に使用する場合「10」という値が適用されます。
これは文字列型等の変数についても同様のことが言えます。
オブジェクト変数
一方オブジェクト変数は文字列や数値を格納するのではなく、オブジェクトそのものを格納します。
例えば、変数にRangeオブジェクトを格納すると、Rangeオブジェクトが持つValueプロパティやDeleteメソッドなどが使用できます。
このようにオブジェクト変数はオブジェクトと同じようにプロパティやメソッドを使えます。
オブジェクト変数の宣言
オブジェクト変数には「総称オブジェクト型変数」と「固有オブジェクト型変数」があります。
総称オブジェクト型変数
総称オブジェクト型変数は下記のように宣言します。
Dim 変数名 As Object
「As Object」で宣言したオブジェクト型変数には、RangeやWorkbookなどあらゆる種類のオブジェクトを格納することができます。
オブジェクトの種類がわからない場合は、総称オブジェクト型変数を用いるのが良いでしょう。
固有オブジェクト型変数
固有オブジェクト型変数は下記のように宣言します。
Dim 変数名 As 固有オブジェクト名
この場合は、「固有オブジェクト名」で指定した特定のオブジェクトだけを格納できます。
Dim A as Range | セルを格納する型 |
Dim A as Worksheet | ワークシートを格納する型 |
Dim A as Workbook | ブックを格納する型 |
固有オブジェクト型変数には実行速度が向上するなどのメリットがあるので、オブジェクトの種類がわかっている場合は、固有オブジェクト型変数を用いるのが良いでしょう。
オブジェクト変数にオブジェクトを格納する
オブジェクト変数にオブジェクトを代入するためにはSetステートメントを使用します。
Set オブジェクト変数 = オブジェクト
例えば、固有オブジェクト型変数を宣言し、セルA1の背景色を水色に設定するVBAは次のように作成します。
Sub Test1()
Dim A As Range
Set A = Range("A1")
A.Interior.Color = vbCyan
End Sub
上のコードでは、オブジェクト変数Aを宣言した後に、そこへセルA1を代入しています。
そしてオブジェクト変数Aを使って、背景色を水色に設定しているという流れになります。
オブジェクト変数の初期化
オブジェクト変数へ格納したオブジェクトを解除して初期化するためには、オブジェクト変数にNothingキーワードを代入します。
Set オブジェクト変数 = Nothing
通常だとプロシージャの終了とともにオブジェクト変数は自動的に解除されますが、変数が破棄されないとオブジェクト変数がメモリ上に残ってしまします。
そのような事態を避けるために、オブジェクト変数を初期化したことを明らかにする意味で、Nothingキーワードを用いて明示的に解除するようにします。
Sub Test1()
Dim A As Range
Set A = Range("A1")
A.Interior.Color = vbCyan
Set A = Nothing
End Sub
オブジェクト変数のおさらい
今回はオブジェクト変数の基礎について説明しました。
オブジェクト変数の一番の特徴は、オブジェクトと同じようにプロパティやメソッドを使用できることです。
複雑なVBAになるほど、オブジェクト変数を活用するタイミングが出てくると思うので、今回説明した基礎的な内容は覚えておいて損はないはずです!
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る