Excelオブジェクトモデルの理解
メニューを表示するにはスワイプしてください
Excelで記述するすべてのVBAコードは、オブジェクトに関する文です。何か(Application、Workbook、Worksheet、Range)が存在し、そのプロパティを読み取るか、メソッドの実行を依頼します。この階層構造を理解すれば、あとは主に語彙の問題となります。
階層構造の読み方
- Application — Excelの実行中の全体インスタンス。すべての階層の最上位。
- Workbooks — 開いているすべてのファイルのコレクション。単体はWorkbook(例:
Section_1_VBA_Intro.xlsm)。 - Worksheets — ワークブック内のタブのコレクション。単体はWorksheet(例: "Employees")。
- Range — 1つのセル、セルのブロック、行全体、または列全体。
- Cells / Value — Range内に格納されている実際のデータ。
Applicationから下位への完全なチェーンを入力する必要はほとんどありません。VBAは特に指定しない限り、アクティブなワークブックとシートを前提とします。しかし、オブジェクトを明示的に指定することが、脆弱なコードと信頼性の高いコードを分けます。同じ命令を記述する2つの方法を比較してください:
' Fragile — depends on whatever sheet happens to be active
Range("F2").Value = 65000
' Reliable — states exactly which workbook and sheet, no matter what's on screen
ThisWorkbook.Worksheets("Employees").Range("F2").Value = 65000
2番目のバージョンは、ユーザーが他に3つのブックを開いていて別のシートを選択している場合でも動作します。これは、マクロが数行を超える規模になると非常に重要な習慣です。今後のコースでも ThisWorkbook.Worksheets("SheetName") をこの方法で頻繁に使用します。
イミディエイトウィンドウでのオブジェクト関係のナビゲーション
イミディエイトウィンドウ(表示 → イミディエイトウィンドウ または VBE 内で Ctrl+G;Mac では ^ ⌘ G)を使うと、Sub で囲まずに1行のコードをテストできます。


行の先頭にクエスチョンマークを付けて入力し、Enter を押すとすぐに結果が表示されます。Section_1_VBA_Intro.xlsm で次の例を試してください:
?ThisWorkbook.Name
?ThisWorkbook.Worksheets("Employees").Range("B3").Value
?ThisWorkbook.Worksheets("Employees").Range("A1").CurrentRegion.Address
?ThisWorkbook.Worksheets.Count
3行目では、CurrentRegion というプロパティが登場します。これは、単一セルからその周囲の連続したデータブロック全体に拡張されます。
課題
- イミディエイトウィンドウで、セルをクリックせずにオブジェクト階層を通じて直接
Olivia Brown(4行目)の役職を出力する1行を書いてください。 CurrentRegion.Rows.Countを使って、Employees テーブルに何行あるかを出力する2行目を書いてください。
ThisWorkbook.Worksheets("Employees").Range("D4").Value と参照します — 4行目は Olivia Brown、D列は Position です。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください