『いちばんやさしいExcel VBAの教本』p.190より
拙著『いちばんやさしいExcel VBAの教本』のLesson 51「オブジェクトの階層関係を理解しましょう」で、Excelのもっとも基本的なオブジェクトの階層構造、Application-Workbook-Worksheet-Rangeについて触れています(この階層構造については、拙著に限らず多くのExcel VBA書籍で言及されています)。
Excelにはその他にも、大量のオブジェクトと、それに伴って多くの階層構造が存在しています。
階層構造Application-Workbook-Worksheet-Rangeが何となく理解できたと感じた方に、もっと知られて欲しいと私が考えるオブジェクトとプロパティをご紹介しておきます。
作りたいマクロがあるならもちろん関連するオブジェクト
もちろん、具体的に作りたいExcelマクロが存在するのなら、それらに関係するオブジェクトについて学習すべきであることは言うまでもありません。
グラフを操作するマクロを作りたいのならChart系のオブジェクトについ理解する必要があります。
図形を操作するマクロを作りたいのなら、Shapes・Shape・ShapeRange等について理解する必要があります。
作りたいマクロがないならWindowオブジェクトとActiveWindowプロパティ
具体的に作りたいマクロは無いけれど、もう少しExcel VBAについて詳しくなりたいのなら、私はWindowオブジェクトと、Windowオブジェクトを取得するためのActiveWindowプロパティについて学習することをおすすめします。
Workbook-Worksheet-Rangeはデータの階層構造を表す
Excelのデータに注目すると、ブックの中にワークシートが、ワークシートの中にはセルが存在しています。
Excelのデータは、ブック-ワークシート-セルという階層構造になっているわけです。
この階層構造をVBA側から見たのが、Workbook-Worksheet-Rangeというオブジェクトの階層構造です。
Workbook-Worksheet-Rangeという階層構造を理解することで、複数のブックの複数のワークシートの大量データをVBAで一括処理することはできるようになります。
ユーザーの操作や表示状態に関係するのがWindowオブジェクト
一方Excelマクロでは、ユーザーが選択しているものだけを処理したいという場合が、かなりあります。
例えば、選択されているシートだけを処理したい、選択されているセルだけを処理したいというケースです。
これらに関係しているのは、実はWorkbook-Worksheet-Rangeとは別のオブジェクト、Windowオブジェクトです。
特にアクティブなExcelのウィンドウを表すWindowオブジェクトを取得するActiveWindowプロパティが、ユーザーの操作や表示状態に深く関係しています。
拙著でご紹介しているオブジェクトを取得するためのプロパティのうちSelection、ActiveCell、ActiveSheetは、ユーザーによって選択されている何らかのオブジェクトを取得するプロパティです。
これらのプロパティは、上位のオブジェクトを取得するコードを省略して書き始められるプロパティですが、実はWindowオブジェクトに用意されているプロパティでもあります。
コードウィンドウで「ActiveWindow.active」まで入力すると、下図のように「Active〇〇」といった、ユーザーによってアクティブにされた何らかのオブジェクトを取得するためのプロパティが、自動メンバー表示されます。
データの階層構造とは別の、ユーザー操作・表示状態に関係するWindowオブジェクトについて学習すると、Excel VBAに対する理解が深まります。
そして、特にユーザー操作に関わるマクロを作る場合に、拙著では書かなかったエラー処理がかなり必要になることを知っておいてください。
Windowオブジェクトを利用したサンプル
ActiveWindowプロパティを使った、見た目にわかりやすいSubプロシージャをステップ実行する様子を動画にしていますので、よろしければご覧ください → YouTube「ExcelVBAのActiveWindowとは」
こちらの動画ではWindowsコレクションに対するループ処理の中でWindowオブジェクトを利用する様子をご覧いただけます → YouTube「ExcelVBAのWindowsコレクションをループ処理しよう」
Windowオブジェクトでおすすめのプロパティ
Windowオブジェクトに用意されているプロパティで、特に習得をおすすめしたいのは、SelectedSheetsプロパティと、RangeSelectionプロパティです。
知名度はどうも低いようなのですが、WindowオブジェクトのSelectedSheetsプロパティで、選択されているシートだけを含むSheetsコレクションを取得できます。
選択されているセルを取得するにはSelectionプロパティを使う方が多い印象を持っていますが、コーディング時に「Selection.」では自動メンバー表示されないのに対し自動メンバー表示されるなどの利点もある、
WindowオブジェクトのRangeSelectionプロパティも、もっと知られていいのではないかと思っています。最終更新日時:2021-11-30 15:17
Home » いちばんやさしいExcel VBAの教本 » WindowオブジェクトとActiveWindowプロパティはもっと知られて欲しい