ExcelVBA
講座
ExcelVBAにおけるFunctionプロシージャ、Subプロシージャの作成方法
マクロの記録機能と利用方法、セルのハンドリング、ループ構文などについて学びます。
エクセルVBA:オブジェクトの親子関係
ExcelVBA
で操作(
プログラミング
)対象のものに、
セル
や
シート
や
ブック
等が挙げられます。一般的にそれら対象物のことを「
オブジェクト
」と言います。
オブジェクトには親子関係があります
。ここでは、その親子関係と、それがもつ意味合いについて学びます。
ExcelVBA
で
オブジェクト
を指定するには、基本的に階層構造の最上位の
Applicationオブジェクト
から指定し、目的のオブジェクトまで階層をたどっていきます。
以前に学んで頂いた
Sheets("Sheet1").Range("A1").Value = "テスト1"
上記のような記述は、実は
Application.ActiveWorkbook. Sheets("Sheet1").Range("A1").Value = "テスト1" (注1
上記のように
Applicationオブジェクト
から順次階層をたどって記述することも出来ます。
しかしながら常時フルに階層をたどりながら
プログラミング
するのは面倒ですし、
可読性
も損なうことになります。
上記でも判るように、記述する
オブジェクト
を
省略
することが出来ます。どういうことなのでしょうか?答えは簡単です。
アクティブな状態にあるオブジェクトは省略出来る!のです。
ということは
上記の「Sheets("Sheet1").Range("A1").Value = "テスト1"」は「Range("A1").Value = "テスト1"」と記述することも出来るのです。
プログラム
を実行する際に、「Sheet1」が
アクティブ(選択されている)
であれば「Sheet1のセルA1」に文字列を代入しますが、
「Sheet2」が
アクティブ(選択されている)
であれば「Sheet2のセルA1」に文字列を代入することになります。
要するに、
オブジェクト
を
省略
する場合は
「アクティブになっている上位オブジェクト」を想定しておかなければならない!
ということになります。
アクティブ
な
上位オブジェクト
が想定出来ない場合は、
オブジェクト
を
省略
せずに記述しましょう。
しかしながら、
プログラム
を記述後、「Sheet1」上に「ボタン」を配置して運用する場合は、
アクティブ
な
シート
が特定出来ます。
これにより、
オブジェクト
を
省略
した記述(
プログラム
)が出来ます。
ということは
プログラムを記述する以前に運用方法(どのシートにボタンを配置するか等)を明確にしておく必要があります。
それによってプログラムの記述内容が変化します。
※
Value
は、正式には「
Rangeオブジェクト
の
プロパティ
」ですが、
プロパティ(=属性)
とは
オブジェクト
を操作する為の手足になるもの!とお考え下さい。
ExcelVBA講座概要