Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » RangeからWorkbookを取得する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excel range オブジェクトからワークブックオブジェクトを得る方法」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

どういう状況なのかはわかりませんが、Excel VBA(Visual Basic for Applications)で、RangeオブジェクトからWorkbookオブジェクトを取得するには、どのようなコードを書けばいいのかを探している方による検索です。

[スポンサードリンク]

RangeオブジェクトからWorkbookオブジェクトを取得するサンプル

「excel range オブジェクトからワークブックオブジェクトを得る方法」
という検索にまずはお答えすると、以下のようなParentプロパティを2つ使ったオブジェクト式で、RangeオブジェクトからWorkbookオブジェクトを取得することができます。

Sub RangeオブジェクトからWorkbookオブジェクトを取得する()
 Dim bk As Workbook
 Set bk = ActiveCell.Parent.Parent
 Stop
End Sub

上記のマクロを実行すると、Workbook型のオブジェクト変数・bkに、アクティブセルを表すRangeオブジェクトの親オブジェクトであるWorksheetオブジェクトの、更に親オブジェクトであるWorkbookオブジェクトがセットされます。

Stop文の箇所でステップ実行モードになりますから、ローカルウィンドウを開いて、オブジェクト変数・bkがどんな情報を持っているかを確認してみてください。

RangeオブジェクトからWorksheetオブジェクトとWorkbookオブジェクトを取得するサンプル

「excel range オブジェクトからワークブックオブジェクトを得る方法」
という検索をなさった方は、オブジェクトの階層関係をあまり意識したことがなく、Parentプロパティもご存じなかったはずですから、以下のマクロも是非ご確認ください。

Sub RangeオブジェクトからWoksheetオブジェクトとWorkbookオブジェクトを取得する()
 Dim sh As Worksheet
 Set sh = ActiveCell.Parent

 Dim bk As Workbook
 Set bk = sh.Parent
 Stop
End Sub

先のマクロでご紹介した「ActiveCell.Parent.Parent」というオブジェクト式を、
 Set sh = ActiveCell.Parent
 Set bk = sh.Parent
と、2つのオブジェクト変数を使って分割したコードです。

Worksheet型のオブジェクト変数・shに、アクティブなセルを表すRangeオブジェクトであるWorksheetオブジェクトをセットしてから、(これは、Rangeオブジェクトからシート名を取得するサンプルコードで使っているのと同じオブジェクト式です)
 Set sh = ActiveCell.Parent

Workbook型のオブジェクト変数・bkに、オブジェクト変数・shにセットされたWorksheetオブジェクトの親オブジェクトであるWorkbookオブジェクトをセットしています。
 Set bk = sh.Parent

こちらもStop文の箇所でステップ実行モードになりますから、ローカルウィンドウを開いて、オブジェクト変数・bkとshが、それぞれどんな情報を抱えているかを確認してみてください。

Parentプロパティも使ってオブジェクトの階層関係・親子関係を意識しましょう

オブジェクト式を書く際には、オブジェクトの階層関係・親子関係をしっかり意識する必要が本当はあります。

しかし、よく使われるプロパティなどが上位のオブジェクト式を省略できるグローバルメンバーになっているために、オブジェクトの階層関係を理解しないままExcelマクロを作っている経験者の方は少なくありません。

Excelマクロを自分の力で書けるようになりたいという方は、オブジェクトの階層関係を意識するようにしましょう。

オブジェクトの階層関係を理解するときに、今回ご紹介したParentプロパティはとても便利です。
Excel VBAの多くのオブジェクトが、階層の上位に該当する親オブジェクトを取得するParentプロパティを持っています。

Excelマクロを自分の力で書けるようになりたいという方には、よく知らないオブジェクトを利用したサンプルコードを見つけた際に、Parentプロパティを使ってその上位のオブジェクトを確認して、階層関係を意識するクセをつけることをおすすめします。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » RangeからWorkbookを取得する

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.