Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » Worksheets.Addに括弧は

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

Worksheets.Addに括弧は

「set worksheets.add 括弧」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)で、ワークシートを挿入するオブジェクト式について、調べていた方による検索です。

[スポンサードリンク]

Woksheets.Addで括弧が必要な場合と不要な場合

以下のようなマクロで、アクティブブックの先頭にワークシートを挿入できます。

Sub ワークシートを先頭に挿入する()

 Worksheets.Add Before:=Worksheets(1)

End Sub

Worksheets.Addメソッドの、引数・BeforeにWorksheets(1)を指定することで、先頭のワークシート(Worksheets(1))の前(Before)に、ワークシートが挿入されます。

この引数・Before:=Worksheets(1)は、カッコで括られていません。

一方、オブジェクト変数を使って、挿入したばかりのワークシート名を変更する場合は以下のようなマクロです。

Sub ワークシートを先頭に挿入して名前を変更する()

 Dim sh As Worksheet

 Set sh = Worksheets.Add(Before:=Worksheets(1))
 sh.Name = "新規に挿入したワークシート"

End Sub

先のワークシートを挿入するだけのマクロでは、
  Worksheets.Add Before:=Worksheets(1)
でしたが、オブジェクト変数に戻りをセットするマクロでは、
  Set sh = Worksheets.Add(Before:=Worksheets(1))
となっています。

同じWorksheetsコレクションオブジェクトのAddメソッドであるにも関わらず、引数・Before:=Worksheets(1) が、今度はカッコで括られています。

「set worksheets.add 括弧」
という検索をした方は、この違いについて調べていらしたのでしょう。

VBAでは戻りを使わないときにカッコは不要

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に括弧は

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.