「excel range オブジェクトからワークブックオブジェクトを得る方法」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
どういう状況なのかはわかりませんが、Excel VBA(Visual Basic for Applications)で、RangeオブジェクトからWorkbookオブジェクトを取得するには、どのようなコードを書けばいいのかを探している方による検索です。
RangeオブジェクトからWorkbookオブジェクトを取得するサンプル
「excel range オブジェクトからワークブックオブジェクトを得る方法」
という検索にまずはお答えすると、以下のようなParentプロパティを2つ使ったオブジェクト式で、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プロパティもご存じなかったはずですから、以下のマクロも是非ご確認ください。
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プロパティを使ってその上位のオブジェクトを確認して、階層関係を意識するクセをつけることをおすすめします。
- Newer:ショートカットキーやアクセスキーを踏まえた講義で助かった
- Older:VBAで文書の末尾・最後にカーソルを移動する
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » RangeからWorkbookを取得する