【VBA】オブジェクト変数とSetステートメントの使い方と種類~Variant Object~

VBA

変数の中でも少し用途の異なるオブジェクト変数の使い方と種類について紹介していきます

オブジェクト変数とは

通常の変数が文字列や数値を扱うのに対してオブジェクト変数はその名の通りオブジェクトを格納して利用することができます。

主な種類は下記の5種類があります

  • Range
  • Workbook
  • Worksheet
  • Object
  • Variant

Range、Worksheet、Workbookはそれぞれ固有のオブジェクト変数でそのオブジェクトのみ格納することができますがObject、Variantは上記の3つのデータ型とは異なり以下の特性があります。

Object・・・すべてのオブジェクトを格納することができるデータ型
Variant・・・なんでも格納可能な汎用的なデータ型

Object、Variantともに利用できる範囲が広く使いやすいですが、プログラミングの世界ではあまりこのようなデータ型は好まれません。

理由としては3点ほどあります

  • コードの可読性が下がる(第三者が見たときに格納されているものがわかりにくい)
  • 処理能力の低下(大量のデータを処理しないなら問題ないかも)
  • 想定しないデータを投入してもエラーにならない(バグの発生要因になる)

上記の理由からあまり多用は厳禁です。

開発途上でどのデータ型か明確でない時の暫定的な場合、またはデバック用として試験的な利用であれば問題ないかと思います。

特別な理由がなければ固有のオブジェクト変数を利用するように心がけましょう

オブジェクト変数の利用方法

オブジェクト変数の利用には通常の変数とは多少異なるので、宣言方法や初期化、実際のサンプルコードをそれぞれ紹介していきます。

オブジェクト変数の宣言

オブジェクト変数を利用するには前述した5つのデータ型で変数を宣言する必要がある。

Dim Work As Worksheet

ワークシートを格納するためデータ型はWorksheetとしてオブジェクト変数Workを宣言する。

基本的な記述方法は通常の変数の宣言同様になります。また利用範囲の指定もPublic、Private、Dimなど自由に設定することができます

Setステートメントについて

オブジェクト変数を使用するにはSetステートメントが必要になります。

オブジェクトは単なる値ではなく、プロパティやメソッドなど複数集まった集合体です。そんな大容量な情報を変数に格納することはできません。

そこで、オブジェクトのある場所(住所のようなもの)を変数に格納しておきます。そうすることで住所の入った変数を参照すればオブジェクトのある場所が分かり、結果的にオブジェクトにアクセスできるという仕組みです。

このようなロジックをしっかり覚えておくのは大変なので最初のうちは慣例的にオブジェクト変数を初期化する際には先頭にSetステートメントを付けるということだけを覚えておきましょう。

余談ですが参照場所を変数には格納するのは別のプログラミング言語でもよく利用されている仕組みです。

オブジェクト変数の初期化

オブジェクト変数は作成したら通常の変数とは異なる初期化方法が必要になります。

Set Work = Worksheets("sheet1")

先頭にSetステートメントを付けてそのあとに宣言した変数を記述して、格納するオブジェクトを指定します。

ほかの言語ではnewなどを利用してインスタンス化したりしますが、それに似ているかもしれません。

上記ではワークシートのシート1をWork変数に格納しています。そうすることでこのシート1を操作することができます。

オブジェクト変数を利用したサンプル

実際に使用して確認してみましょう

Sub test()
 Dim Work As Worksheet
 Set Work = Worksheets("sheet1")
 Work.Range("A2").Value = "パグ"
End Sub

上記コードでは宣言したWork変数にsheet1を格納して、A2セルに文字列”パグ”を入力しています。

出力結果

指定した場所に文字列を代入することができました。このようにオブジェクト変数を利用すると長文になりやすいオブジェクトの指定を短い変数名のみで利用できるようなります。

タイトルとURLをコピーしました