OfficeType

VBA~アクティブシートを取得しよう~Excel

複数のワークブックのアクティブシートを操作したい場合、Workbooks("Book1.xlsx").ActiveSheetのように指定していると見にくいコードになってしまいます。そんなときはオブジェクトを変数に格納すると見やすいコードになります。

下のコードを実行するとBook1とBook2のアクティブシートであるSheet1のセルA1にそれぞれBook1、Book2と入力されます。

Sub test1()

Dim Bk1AcSh As Worksheet
Dim Bk2AcSh As Worksheet

Set Bk1AcSh = Workbooks("Book1.xlsx").ActiveSheet
Set Bk2AcSh = Workbooks("Book2.xlsx").ActiveSheet

Bk1AcSh.Range("A1") = "Book1"
Bk2AcSh.Range("A1") = "Book2"

End Sub

コードの説明

Dim Bk1AcSh As Worksheet

Bk1AcShと言う変数はワークシートであると定義しています。

Dim Bk2AcSh As Worksheet

Bk2AcShと言う変数はワークシートであると定義しています。

Set Bk1AcSh = Workbooks("Book1.xlsx").ActiveSheet

先ほど定義したBk1AcShという変数にWorkbooks("Book1.xlsx").ActiveSheetを格納しています。

Set Bk2AcSh = Workbooks("Book2.xlsx").ActiveSheet

先ほど定義したBk2AcShという変数にWorkbooks("Book2.xlsx").ActiveSheetを格納しています。

Bk1AcSh.Range("A1") = "Book1"

Book1のセルA1にBook1と入力しています。

Bk2AcSh.Range("A1") = "Book2"

Book2のセルA1にBook2と入力しています。

変数なしのコード

上のコードを変数なしで書くと下のコードになります。これくらい短い場合はこちらの方が見やすいですが、長いコードになると最初にWorkbooks("Book1.xlsx").ActiveSheet部分を変数に格納しておいた方が見やすい場合もあります。

Sub test2()

Workbooks("Book1.xlsx").ActiveSheet.Range("A1") = "Book1"
Workbooks("Book2.xlsx").ActiveSheet.Range("A1") = "Book2"

End Sub