Excel VBA

Set

 変数に値を入れるには「=」記号を使います。次のマクロは、文字列型の変数 tmp に "yugien" という文字列を格納します。


Sub Sample1()
	Dim tmp As String
	tmp = "yugien"
	MsgBox tmp
End Sub

 このように、変数に値を格納するときは「変数名 = 値」とします。これは、右辺を左辺に代入するという意味で「変数名 ← 値」のようなイメージです。

 ところが、ときおり「Set 変数名 = 値」のように、Setという命令を使って変数に"何か"を代入しているコードがあります。


Sub Sample2()
	Dim ws As Worksheet
	Set ws = Sheets("Sheet1")
	MsgBox ws.Name
End Sub

 Set ws = Sheets("Sheet1") は、変数wsにシート[Sheet1]を代入する命令です。この変数wsの型は、宣言時に「As Worksheet」と指定されています。長整数型(Long)や文字列型(String)とは違い、この変数wsはオブジェクトを格納するオブジェクト変数です。オブジェクト変数は「As オブジェクト名」のように、オブジェクト名を使って型指定をします。ワークシート(Worksheetオブジェクト)を格納する変数なら「As Worksheet」、ブック(Workbookオブジェクト)を格納する変数なら「As Workbook」、セル(Rangeオブジェクト)を格納する変数では「As Range」のように型指定をします。また、すべてのタイプのオブジェクトを表す総称Objectを使って、どんなオブジェクトでも格納できるオブジェクトの変数は「As Object」と指定します。

 オブジェクト型で宣言したオブジェクト変数に、オブジェクトを格納するときは、Setを使わなければなりません。