「set worksheets.add 括弧」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excel VBA(Visual Basic for Applications)で、ワークシートを挿入するオブジェクト式について、調べていた方による検索です。
Woksheets.Addで括弧が必要な場合と不要な場合
以下のようなマクロで、アクティブブックの先頭にワークシートを挿入できます。
Worksheets.Add Before:=Worksheets(1)
End SubWorksheets.Addメソッドの、引数・BeforeにWorksheets(1)を指定することで、先頭のワークシート(Worksheets(1))の前(Before)に、ワークシートが挿入されます。
この引数・Before:=Worksheets(1)は、カッコで括られていません。
一方、オブジェクト変数を使って、挿入したばかりのワークシート名を変更する場合は以下のようなマクロです。
Dim sh As Worksheet
Set sh = Worksheets.Add(Before:=Worksheets(1))
sh.Name = "新規に挿入したワークシート"
先のワークシートを挿入するだけのマクロでは、
Worksheets.Add Before:=Worksheets(1)
でしたが、オブジェクト変数に戻りをセットするマクロでは、
Set sh = Worksheets.Add(Before:=Worksheets(1))
となっています。
同じWorksheetsコレクションオブジェクトのAddメソッドであるにも関わらず、引数・Before:=Worksheets(1) が、今度はカッコで括られています。
「set worksheets.add 括弧」
という検索をした方は、この違いについて調べていらしたのでしょう。
VBAでは戻りを使わないときにカッコは不要
VBAで、引数を括るカッコのルールは以下のとおりです。戻りを使う場合、カッコが必要
戻りを使わない場合、カッコは不要
このルールをしっかりと身につけましょう。
いきなりWorksheets.Addの引数について理解するよりも、まずはMsgBox関数のカッコについて理解することをおすすめします。
MsgBox関数は、戻りが単なるデータですから、Worksheets.Addよりも理解しやすいはずです。
Worksheets.Addの場合も、ルール自体は同じです。
ワークシートを挿入するだけならば、戻りを使いませんからカッコは不要で、
Worksheets.Add Before:=Worksheets(1)
でOKです。カッコをつけて、
Worksheets.Add(Before:=Worksheets(1))
と書いても、VBAの文法としては間違っているので、コンパイルエラーが発生します。
Worksheets.Addは挿入されたばかりのWorksheetを返すタイプのメソッドで、その戻りを変数にセットするという形で使う場合は、
Set sh = Worksheets.Add(Before:=Worksheets(1))
とカッコが必要です。こちらも、
Set sh = Worksheets.Add Before:=Worksheets(1)
としても、やっぱりVBAの文法としては間違っているので、コンパイルエラーが発生します。
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » Worksheets.Addに括弧は