Setを使うケース


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

Sub Sample13()
    Dim tmp As String
    tmp = "tanaka"
    MsgBox tmp
End Sub

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

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

Sub Sample14()
    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を使わなければなりません

オブジェクト変数については、下記のページで詳しく解説しています。

オブジェクトを入れる変数