【Excel VBA】ThisWorkBookとActiveWorkBookの違いは?使い分け方まとめ!

Excel VBAでセルを指定したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAでセルを指定したいが方法がわからない
・Excel VBAでRange/Cellsを使い分ける方法がわからない

ですよね。

今回はそんなお悩みを解決する

・Excel VBAでセルを指定する方法
・Excel VBAのRange/Cellsを使い分ける基準

についてまとめます!

Excel VBAでブックを指定する方法は4種類

Excel VBAでブックを指定する方法は4種類あります。Workbooksコレクション、そのOpenメソッド、ThisWorkbook とActiveWorkBookですでに開かれているブックかこれから開きたいブックで使い分けする形になります。

構文 説明
Workbooks(<インデックス または ブック名> ) ブック名またはインデックスでブックを指定します。
インデックスで指定:数値で指定します。
ブック名:既に開いているブック名を指定します。存在しない場合はエラーとなります。
Workbooks.Open “<ブックパス>” WorkbooksコレクションのOpenメソッドでブックを開きます。
ブックパス:開きたいブックパスを指定します。存在しない場合はエラーとなります。
ThisWorkbook マクロが組み込まれているワークブックを指します。
ActiveWorkBook 現在表示されているワークブックを指します。

すでに開かれているブックを対象にするオブジェクトはWorkbooksコレクション、ThisWorkbook とActiveWorkBookとなり、引数がないのがThisWorkbook とActiveWorkBookとなります。

ThisWorkBookとActiveWorkBookの違い

次に引数がないタイプのThisWorkBookとActiveWorkBookの違いについて説明をします。

ThisWorkBookはマクロが組み込まれているブックを対象にしていますが、ActiveWorkBookはいま表示されているブックが対象となりますので、マクロが組み込まれているかは関係なく選択が可能です。

また、マクロにThisWorkBookを指定するとマクロがない他のブックを開いたとしても対象にはなりません。

ThisWorkBookとActiveWorkBookの違いをまとめますと、マクロを実行する対象範囲が異なるということになります。

ThisWorkBookとActiveWorkBookを使い分ける基準

ThisWorkBookとActiveWorkBookを使い分ける基準について説明をします。

ThisWorkBookはマクロを実装したブックのみ対象

マクロを実装したブックのみ対象とする場合はThisWorkBookを選択します。
VBAではブックの表記を省略してRangeとCellsなど指定できますが、その場合にはActiveWorkBookが選択されます。

以下サンプルコードです。

Sub RangeとCellsテスト()
    range("A10") = 10
    Cells(11, 1) = 11
End Sub

他のブックに影響をさせたくない場合はThisWorkBookとSheetsを付け加えた方がよいでしょう。

Sub RangeとCellsテスト2()
    ThisWorkbook.Sheets("Sheet1").range("A10") = 10
    ThisWorkbook.Sheets("Sheet1").Cells(11, 1) = 11
End Sub

ActiveWorkBookは今開いているブックを対象

今開いているブックを対象とする場合はActiveWorkBookを選択します。
マクロを実装していないブックを対象にすることで汎用的に使うことができます。
ブックを切り替える場合は以下のようにブック名やインデックス指定しActivateメソッドでアクティブにします。
Workbooks(<インデックス または ブック名> ).Activate

タカヒロ
タカヒロ
実はエク短ではActiveWorkBookを多用しています。
一つのVBAで他のブックの操作ができるので、効率面を優先しているためです。

マクロを実装したブックの情報を表示させる

VBAでマクロを実装したブックの情報を表示させてみましょう。
使うオブジェクトはThisWorkBookですね。

サンプルブックを用意します。

VBAコード

サンプルコードは以下の通りです。

Sub ThisWorkbookの情報を表示()
    'ブックのパスを表示します。
    Debug.Print ThisWorkbook.Path
    'ブックの名前を表示します。
    Debug.Print ThisWorkbook.Name
End Sub

VBAを実装する

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

はい、マクロが実装されているブックの情報が表示されましたね。

念のため、別のブックをアクティブにしてみましょう。
結果は変わりませんね。

VBAの説明

‘ブックのパスを表示します。

Debug.Print ThisWorkbook.Path

‘ブックの名前を表示します。

今開いているブックの情報を表示させる

今開いているブックの情報を表示させてみましょう。
使うオブジェクトはActiveWorkBookですね。

サンプルブックを前と別のフォルダに用意します。

VBAコード

サンプルコードは以下の通りです。

Sub ActiveWorkbookの情報を表示()
    '別のブックを指定します。
    Workbooks("ブック2.xlsm").Activate
    'ブックのパスを表示します。
    Debug.Print ActiveWorkbook.Path
    'ブックの名前を表示します。
    Debug.Print ActiveWorkbook.Name

End Sub

VBAを実行する

VBAを実行してみましょう。

はい、マクロが実装されているブックの情報が表示されましたね。

前のブックをアクティブにしてみましょう。
結果が変わりましたね。

VBAの説明

‘別のブックを指定します。

Workbooks("ブック2.xlsm").Activate

‘ブックのパスを表示します。

Debug.Print ActiveWorkbook.Path

‘ブックの名前を表示します。

Debug.Print ActiveWorkbook.Name

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Excel VBAでセルを指定する方法
・Excel VBAのRange/Cellsを使い分ける基準

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です