VBAでは、オブジェクトとコレクションの概念が極めて大切です。
プログラミングをVBAで覚えた方の中には、「シートを削除する」などのアクションをインターネットで調べて、解説コードをそのままコピーしてExcelに貼り付け、何とか自分の求める動作を実現させたご経験があるかもしれません。
VBAの構文を詳しく知らず、勘で仕上げるにはそれなりのスキルが必要になりますので、それはそれでスキルが高いのかもしれませんが、その方法にはどうしても限界があります。
なにより、正しい知識を持っていないプログラミングは大きなリスクを抱えてしまいます。
今回の記事で紹介するオブジェクトを正しく理解すれば、VBAのコードは飛躍的に書きやすくなります。また、(特定の)エラーが発生したときの原因もすぐに突き止めることができます。
VBAのオブジェクトとは?
この章では、VBAの基本知識『オブジェクト』についての概要を説明します。
オブジェクトの概要
オブジェクトについて、まずは現実社会の例で説明します。
現実社会のオブジェクト例
アナタは、会社の人から次の依頼を受けたとします。
卓上には3つのマウスがあり、どのマウスをクリックすればよいのか分かりません。
勘の良い方はこの例でご理解いただけたかと思います。そうです。VBAでいうオブジェクトとは「処理の対象」のことです。この例では、マウスがオブジェクトになりますが、依頼内容のオブジェクトの定義があいまいなため、実行することができないのです。
では、次の例はいかがでしょうか。
緑のマウスということは分かりましたが、左クリックなのか右クリックなのかが分かりません。
先ほどの依頼よりはオブジェクトが明確になりましたが、まだ最終的なオブジェクト(左クリック・右クリック)の定義があいまいです。やはり実行することはできません。
ようやく依頼内容がはっきりしました。緑色のマウスの右ボタンをクリックして欲しかったのですね。
現実的な例は以上にしておきます。次は、実際のVBAのオブジェクトについて説明します。その前に具体的には後述しますが、オブジェクトは[ マウス-色-ボタン ]のように『階層構造』になっていることをイメージで捉えていてください。
VBA(Excel)におけるオブジェクト
これまでに、VBAにおけるオブジェクトとは「処理の対象」と説明しました。
では、実際にVBAを実行するExcel上にはどのようなオブジェクトが存在するか考えてみましょう。ここは非常に大切な箇所です。
Excelにおけるオブジェクトは多数ありますが、分かりやすいものは「ブック」「シート」「セル」の3つでしょう。
普段、Excelで事務作業をするときにも、主にこの3つのオブジェクトに対して処理を行っているはずです。
VBAでも同じく、下記のような操作を行うことが多いです。
- ブックを開く
- ブックを保存して閉じる
- シートを指定して開く
- シートを追加する
- セルに値を入力する
- セルの値を取得する
- セルを検索する等
VBAでこれらの処理のコードを書くときには、「オブジェクト」としてブック・シート・セルなどを指定する必要があるのです。
そして、「現実社会のオブジェクト例」と同じく、Excelのオブジェクトも下記のような階層構造となります。
オブジェクトの階層構造
ここまでにオブジェクトの概要と階層構造について説明しました。この節では、階層構造についてもう少し詳しく説明します。
階層構造は特に難しい内容ではありません。現実社会でも階層構造を持つ情報は数えきれないほどあります。
- 共有フォルダ
C:\共有\経理部\2022年・・ - 住所
東京都 千代田区 丸の内 - 小学生(個人)
〇〇小学校 2年 3組 △△くん - 会社の組織
〇〇会社 メディア運営部 VBA課
上記の例でも挙げているように、多くの会社で使っているパソコンの共有フォルダも階層構造になっているはずです。日常的に触れている内容ですね。
では、Excelのオブジェクトの具体例を見てみましょう。
Excelのある特定のブックに入力されている情報を誰かに伝えたいとき、ブック名も伝えずに「セルB2を見て!」と伝えることはありません。
また、「セルB2の10月シートの階層構造Sampleというブックだよ!」とも伝えないはずです。順序が逆ですよね。
普通、「階層構造Sampleというブックの10月シートのセルB2を見て」と伝えるはずで、この順番・説明内容であれば客観的に理解することができます。
つまり、オブジェクトには「階層」という上位・下位の関係があり、上位層から下位層に流れるという構造になっているのです。
これが、オブジェクトの階層構造です。
階層構造では、親階層のことを「コンテナ」と呼びます。「セル」のコンテナは「シート」、「シート」のコンテナは「ブック」です。
オブジェクトの詳細と具体例
前章でVBAのオブジェクトの概要、階層構造について、イメージ図を使って説明しました。ただし、オブジェクトの初歩的な概要を理解するための部分的な範囲に留めています。
実際のVBA(Excel)には、もう少し多くのオブジェクトがあります。とは言え、概要さえ理解できれば難しい内容ではありません。
この章で見ていきましょう。
VBA(Excel)におけるオブジェクト
オブジェクトは、「ブック」「シート」「セル」も含め、下記のようなものがあります。なお、これまでの説明では「ブック」「シート」「セル」と簡略的に書きましたが、正確なVBA構文はそれぞれ「Workbook」「Worksheet」「Range」です。
オブジェクト名 | 意味 |
---|---|
Application | Excelアプリケーション |
Workbook | Excelブック(ファイル) |
Worksheet | シート |
Range | セル |
Chart | グラフシート |
Window | ウィンドウ |
Border | 罫線 |
Font | フォント属性 |
AutoFilter | オートフィルタ |
Hyperlink | ハイパーリンク |
Shape | オートシェイプ(図形) |
上記もオブジェクトの一部です。罫線(Border)やフォント(Font)まで含まれていることに意外に感じたかもしれませんが、それらの機能的なものもオブジェクトとして含まれます。
下記のように考えれば理解しやすいです。
例:「罫線を消して」
罫線は『処理の対象』ですね。これがオブジェクトの根拠です。
オブジェクトについて補足
オブジェクトは階層構造になっており、セルを指定するときは「Workbook」-「Worksheet」-「Range」の順番になるのですが、実際には下記のようにコードを書く場合があります。
Range("B2").Value = "ここだよ"
この書き方は誤りではありません。VBAの構文では、階層を省略して記述することができます。省略した場合は、それぞれ「アクティブなブックの」「アクティブなシートの」が補完されます。つまり、上記の例ではアクティブシートのセルB2に対して、処理が行われます。
あとがき
今回は、VBAのオブジェクトの基本的な概念を記事にしました。本来は、オブジェクトの集合体であるコレクションの説明も含めたかったのですが、文字量が多くなるため、今記事ではオブジェクトの説明のみにします。
「オブジェクトって簡単なのね!」と感じた方もいらっしゃるかと思いますが、実は、もう少しややこしいです。
同じくVBAの基本であるコレクションやメソッド、プロパティの概念が入ってくると一気に複雑になってきます。
これらは別記事で投稿することにします。VBAを活用できる日まで、がんばりましょう。