今回は、VBAを勉強していると必ず出てくるSetステートメントについて解説します。”オブジェクトを扱うときは必ず必要”といった説明がなされることが多いですが、なぜ必要なのか、も後半で説明しています。
なお、前提知識となる変数については以下を参照ください。
Setとは何か
Setは、オブジェクト変数にオブジェクトの参照を割り当てるステートメントです。ステートメントというのはプログラムが特定の動作を行うための”指令”です。Dimというステートメントを使うことで使用する変数を宣言できるように、Setというステートメントを使うことでオブジェクト、つまりファイル・シート・セル範囲やフォルダーなどを扱うことができるのです。
Setステートメントは、事前に宣言されているオブジェクト変数(以下ではワークシートws)を使って以下のように記述されます。
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
Setの使用例
以下に、Excel VBAにおける`Set`ステートメントの使用例を挙げます。これらの例では、さまざまなオブジェクトタイプ(ファイルシステム、ワークブック、ワークシート、リストオブジェクト、ピボットテーブル、範囲)についての参照の割り当てを示しています。
FileSystemObject(ファイルやフォルダを操作するためのオブジェクト)の例:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Workbookの例:
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Path\To\File.xlsx")
Worksheetの例:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ListObjectの例(テーブル)
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("Table1")
PivotTableの例
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables("PivotTable1")
Rangeの例
Dim rng As Range
Set rng = ActiveSheet.Range("A1:B10")
これらの例は、VBAでオブジェクトを扱う基本的な方法を示しており、`Set`ステートメントを使って様々なタイプのオブジェクトへの参照を安全に割り当てる方法を説明しています。これにより、これらのオブジェクトのプロパティやメソッドにプログラムからアクセスし、操作することが可能になります。
なぜsetが必要なのか
ではそもそも、なぜSetステートメントが必要なのでしょうか。それを理解するためにはプログラミングにおける、値型と参照型という概念を理解することが重要です。VBAにおける変数は、値型と参照型が存在します。
値型(基本データ型、プリミティブ型)の変数は、我々にとってより身近な、整数(Integer, Long)、文字列(String)、日付(Date)、ブール値(True/False)などが該当します。これらの変数は、直接その値自体を変数という箱に格納します。
一方今回扱っているようなオブジェクトの場合、参照型(オブジェクト型)と呼ばれ、これは何等かの値を格納するのではなく、オブジェクトのアドレス情報を格納するのです。
もし仮にワークシートを設定しようとして、以下のようにSetなしで記述してしまったら、プログラム側はこれを値型と認識してしまい、何の値を格納すればいいのか判断できなくなる、とイメージしたら、理解しやすいのではないでしょうか。
コメント