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