LoginSignup
2
3

【Excel VBA】ワークシートに対するActivateとSelectの違い

Posted at

イントロダクション

Excel VBAでコーディングする際、似たような効果のある書き方というのはたくさんあります。

その中で今回はWorksheetオブジェクトにある Activate と Select に注目しました。

Worksheet の Activate と Select

Worksheets("Sheet1").ActivateWorksheets("Sheet1").Select が混在しているソースコードはよく見かけます。
両方ともそのシートを手前に表示させる効果がありますが、細かい仕様は当然違いがあります。
そして、その違いをはっきりと言える人は少ないのではないでしょうか?

私が認識している範囲で違いを以下に書き出します。

Activate

  • アクティベート:活性化
  • 表示させたいワークブックが一番手前に表示されていなくても、ワークブックごと一番手前に表示します。
  • 一番手前に表示できるのは一つのシートのみ
  • 複数シートに対して実行はできない(Worksheetsコレクションには存在しない)
  • 単純に手前に表示したい場合はこちらの記述

使用例

Sheet1を前面に表示する

Worksheets("Sheet1").Activate

この書き方はエラー

Worksheets(Array("Sheet1", "Sheet2")).Activate

次の場合は最終的にBook2が手前に表示される

Workbooks("Book1.xlsx").Activate
Workbooks("Book2.xlsx").Worksheets("Sheet2").Activate

Select

  • セレクト:選択
  • ワークシートを選択します。
  • おまけで、そのシートを表示させます。
  • 複数シートの選択ができます
  • 複数シートに対して同じ操作を行う必要がある場合に使用します。
  • 複数のワークブックが立ち上がっている状態で、Selectしたシートの親ワークブックが裏に隠れている(最前面ではない)場合、エラーになります
  • 上記エラーの恐れがあるため、表示だけの場合はActivateを使用するほうが良い

記載例

Sheet1を前面に表示する

 Worksheets("Sheet1").Select

Sheet1とSheet2を選択する(+ 追加処理)

Worksheets(Array("Sheet1", "Sheet2")).Select
Selection.Copy            ' 2つのシート間で関数が参照されている場合、計算式の変化がない
Selection.PrintOut        ' まとめて印刷:ページ番号が共通になる

ただし下記の書き方ができるため、シートに対しSelectする機会は少ない

Worksheets(Array("Sheet1", "Sheet2")).Copy
Worksheets(Array("Sheet1", "Sheet2")).PrintOut

' 複数の処理を同時に行うなら下記
With Worksheets(Array("Sheet1", "Sheet2"))
    .Copy
    .PrintOut
End With

次の場合はBook2.xlsxのところでエラーになる

 Workbooks("Book1.xlsx").Activate
 Workbooks("Book2.xlsx").Worksheets("Sheet2").Select

結論

  • 基本的にはActivateを使用
  • 複数選択する場合のみSelectが有効
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3