Categories: VBA

VBA│オブジェクトの基本を理解させる解説。イメージ図で分かる!

VBAでは、オブジェクトとコレクションの概念が極めて大切です。

プログラミングをVBAで覚えた方の中には、「シートを削除する」などのアクションをインターネットで調べて、解説コードをそのままコピーしてExcelに貼り付け、何とか自分の求める動作を実現させたご経験があるかもしれません。

VBAの構文を詳しく知らず、勘で仕上げるにはそれなりのスキルが必要になりますので、それはそれでスキルが高いのかもしれませんが、その方法にはどうしても限界があります。

なにより、正しい知識を持っていないプログラミングは大きなリスクを抱えてしまいます。

今回の記事で紹介するオブジェクトを正しく理解すれば、VBAのコードは飛躍的に書きやすくなります。また、(特定の)エラーが発生したときの原因もすぐに突き止めることができます。

VBAのオブジェクトとは?

この章では、VBAの基本知識『オブジェクト』についての概要を説明します。

オブジェクトの概要

オブジェクトについて、まずは現実社会の例で説明します。

現実社会のオブジェクト例

アナタは、会社の人から次の依頼を受けたとします。

依頼1_マウスをクリックして!

卓上には3つのマウスがあり、どのマウスをクリックすればよいのか分かりません。

勘の良い方はこの例でご理解いただけたかと思います。そうです。VBAでいうオブジェクトとは「処理の対象」のことです。この例では、マウスがオブジェクトになりますが、依頼内容のオブジェクトの定義があいまいなため、実行することができないのです。

では、次の例はいかがでしょうか。

依頼2_急いでいるから早くして!そこの緑のマウスだよ

緑のマウスということは分かりましたが、左クリックなのか右クリックなのかが分かりません。

先ほどの依頼よりはオブジェクトが明確になりましたが、まだ最終的なオブジェクト(左クリック・右クリック)の定義があいまいです。やはり実行することはできません。

正しい依頼_緑色のマウスの右ボタンをクリックして!

ようやく依頼内容がはっきりしました。緑色のマウスの右ボタンをクリックして欲しかったのですね。

現実的な例は以上にしておきます。次は、実際のVBAのオブジェクトについて説明します。その前に具体的には後述しますが、オブジェクトは[ マウス-色-ボタン ]のように『階層構造』になっていることをイメージで捉えていてください。

オブジェクトは階層構造

VBA(Excel)におけるオブジェクト

これまでに、VBAにおけるオブジェクトとは「処理の対象」と説明しました。

では、実際にVBAを実行するExcel上にはどのようなオブジェクトが存在するか考えてみましょう。ここは非常に大切な箇所です。

Excelにおけるオブジェクト

Excelにおけるオブジェクトは多数ありますが、分かりやすいものは「ブック」「シート」「セル」の3つでしょう。

普段、Excelで事務作業をするときにも、主にこの3つのオブジェクトに対して処理を行っているはずです。

Excelの主要オブジェクト

VBAでも同じく、下記のような操作を行うことが多いです。

  • ブックを開く
  • ブックを保存して閉じる
  • シートを指定して開く
  • シートを追加する
  • セルに値を入力する
  • セルの値を取得する
  • セルを検索する等

VBAでこれらの処理のコードを書くときには、「オブジェクト」としてブック・シート・セルなどを指定する必要があるのです。

コードでは処理対象となるオブジェクトを記述

そして、「現実社会のオブジェクト例」と同じく、Excelのオブジェクトも下記のような階層構造となります。

Excelの階層構造

オブジェクトの階層構造

ここまでにオブジェクトの概要と階層構造について説明しました。この節では、階層構造についてもう少し詳しく説明します。

階層構造は特に難しい内容ではありません。現実社会でも階層構造を持つ情報は数えきれないほどあります。

  • 共有フォルダ
    C:\共有\経理部\2022年・・
  • 住所
    東京都 千代田区 丸の内
  • 小学生(個人)
    〇〇小学校 2年 3組 △△くん
  • 会社の組織
    〇〇会社 メディア運営部 VBA課

上記の例でも挙げているように、多くの会社で使っているパソコンの共有フォルダも階層構造になっているはずです。日常的に触れている内容ですね。

では、Excelのオブジェクトの具体例を見てみましょう。

例:Excelの入力箇所

Excelのある特定のブックに入力されている情報を誰かに伝えたいとき、ブック名も伝えずに「セルB2を見て!」と伝えることはありません。

また、「セルB210月シート階層構造Sampleというブックだよ!」とも伝えないはずです。順序が逆ですよね。

普通、「階層構造Sampleというブック10月シートセルB2を見て」と伝えるはずで、この順番・説明内容であれば客観的に理解することができます。

〇〇ブックの△△シートのセルB2

つまり、オブジェクトには「階層」という上位・下位の関係があり、上位層から下位層に流れるという構造になっているのです。

これが、オブジェクトの階層構造です。

階層構造では、親階層のことを「コンテナ」と呼びます。「セル」のコンテナは「シート」「シート」のコンテナは「ブック」です。

オブジェクトの詳細と具体例

前章でVBAのオブジェクトの概要、階層構造について、イメージ図を使って説明しました。ただし、オブジェクトの初歩的な概要を理解するための部分的な範囲に留めています。

実際のVBA(Excel)には、もう少し多くのオブジェクトがあります。とは言え、概要さえ理解できれば難しい内容ではありません。

この章で見ていきましょう。

VBA(Excel)におけるオブジェクト

オブジェクトは、「ブック」「シート」「セル」も含め、下記のようなものがあります。なお、これまでの説明では「ブック」「シート」「セル」と簡略的に書きましたが、正確なVBA構文はそれぞれ「Workbook」「Worksheet」「Range」です。

オブジェクト(英字表記)
オブジェクト名意味
ApplicationExcelアプリケーション
WorkbookExcelブック(ファイル)
Worksheetシート
Rangeセル
Chartグラフシート
Windowウィンドウ
Border罫線
Fontフォント属性
AutoFilterオートフィルタ
Hyperlinkハイパーリンク
Shapeオートシェイプ(図形)
オブジェクト一覧

上記もオブジェクトの一部です。罫線(Border)やフォント(Font)まで含まれていることに意外に感じたかもしれませんが、それらの機能的なものもオブジェクトとして含まれます。

下記のように考えれば理解しやすいです。

例:「罫線を消して」

罫線は『処理の対象』ですね。これがオブジェクトの根拠です。

上表の中に「Chart(グラフシート)」というオブジェクトが含まれていますが、これはExcelの機能でシートとは区別される「グラフシート」のことです。通常、VBAで使う機会は少ないと思いますので、使ったご経験のない方は流し読みしてください。

オブジェクトについて補足

オブジェクトは階層構造になっており、セルを指定するときは「Workbook」-「Worksheet」-「Range」の順番になるのですが、実際には下記のようにコードを書く場合があります。

Range("B2").Value = "ここだよ"

この書き方は誤りではありません。VBAの構文では、階層を省略して記述することができます。省略した場合は、それぞれ「アクティブなブックの」「アクティブなシートの」が補完されます。つまり、上記の例ではアクティブシートのセルB2に対して、処理が行われます。

あとがき

今回は、VBAのオブジェクトの基本的な概念を記事にしました。本来は、オブジェクトの集合体であるコレクションの説明も含めたかったのですが、文字量が多くなるため、今記事ではオブジェクトの説明のみにします。

「オブジェクトって簡単なのね!」と感じた方もいらっしゃるかと思いますが、実は、もう少しややこしいです。

同じくVBAの基本であるコレクションやメソッド、プロパティの概念が入ってくると一気に複雑になってきます。

これらは別記事で投稿することにします。VBAを活用できる日まで、がんばりましょう。

Webs

元事務処理担当者として、プログラミングを活用した業務改善を推進している。プログラマ出身ではない事務職の現場目線で情報を発信。 その他、webs-studio.jpをメインに、複数のブログサイトを立ち上げており、合計で月間10万PVのメディア運営を行っている。 姉妹サイト一覧