エクセル実践塾 > エクセル実践塾2007

マクロのコードを、見た目にわかりやすく、簡潔に記述したい

 

With ステートメントを使えば、作業の対象となるオブジェクトの記述が1回で済みます

前号では、次のようなコードを記述しました。

ActiveSheet.Name = ActiveSheet.Range("B2")

「ActiveSheet.Name」と「ActiveSheet.Range("B2")」は、どちらも編集中のシートのプロパティを表すものなので、「ActiveSheet」というコードが重複して記述されています。Withステートメントを使うと、この重複コードを省略することができるようになります。

With ActiveSheet
  .Name = .Range("B2")
End With

「With」の後に、共通するオブジェクトの名前を記すと、「End With」行までの間では、オブジェクト名の記述を省略できるようになります。

なお、オブジェクト名の記述は省略できますが、オブジェクト名とプロパティをつなぐピリオド(.)の記述は省略できません。たとえば、「ActiveSheet.Name」なら、「ActiveSheet」だけを省略でき、それ以降の「.Name」を記述することになります。

メソッドの記述も省略できます

たとえば、同じ「ActiveSheet」オブジェクトに対するコードなら、Worksheet.Copy メソッドの記述も、次のように省略できます。

Sub SheetNameWith()
  With ActiveSheet
    .Name = .Range("B2")
    .Copy
  End With
End Sub

このマクロを実行すると、編集中のシートの名前が、B2セルのデータと同じになってから、そのシートが新しいブックにコピーされます。