「オブジェクトの説明」を読んでも意味わからん・・・→分かる言葉で説明します。

VBAのオブジェクトって言葉、分かりにくいですよね。「なんなんオブジェクトって?」って思いますよね。

初めてVBAでプログラミングをやる人が「意味わからん・・・」と嫌になる言葉の1つが「オブジェクト」でしょう。

説明を読んでも、「物」とか「物体」とか「対象」とか「オブジェクト変数」とか、はっきりしない言葉ばかりでうんざりするものが多いですが、ここではそういう分かりにくい用語は使わず、誰もが知っている言葉で説明します

途中で分からない言葉があっても気にせず読み進めてください。

なお、一番大事なことですが、別にオブジェクトが分からなくてもVBAは使えますのでそんなに気にしなくてもいいです


.(ドット)の左側がオブジェクト

答えから先に書きます。一言で言うと、オブジェクトとは「.(ドット)の左側のことです。意味わからなくても気にしないでください。あと、右側のことは後述しますので今は忘れてください。

VBAでは以下のような書き方をすることがあります。

左側(ここがオブジェクト).右側 = 値

このコードの意味が分からなくても問題ありません。VBAではこういう書き方をすることがある、ってことだけで大丈夫です。

.(ドット)の、左側にある「Range(“A1”)」が「オブジェクト」になります。繰り返しますが、ドットの左側が「オブジェクト」です。

実際にプログラムで使うときは6文字での「オブジェクト」という言い方はしません。上の例で言うと「Rangeオブジェクト」と言います。「Rangeオブジェクト」がなんなのかは今は気にしなくていいです。

このように全ての「オブジェクト」は「〇〇オブジェクト」と名前が付けられます。これらの「総称」をひとくくりにして「オブジェクト」と言います。

「オブジェクト」という何か具体的なものがあるわけではなく、VBAで出てくるいろんな「.(ドット)の左側のこと」をひっくるめた言い方に過ぎません。そのため「オブジェクト」という6文字だけで何かを説明することはほとんどありません。概念を説明すること以外には使うことは無いと言ってもいいです。

例えば、自家用車とタクシーとバスをひっくるめて「自動車」と言ってるようなものです。でも実際に使うときは「タクシーに乗る」のように具体的な言い方をします。この具体的な言い方が「〇〇オブジェクト」の部分になり、上の例では「Rangeオブジェクト」になります。


オブジェクトとはセルやシートなどの「操作したい部品」を指す

Excelで作業をする際に扱っているものとして、セルやシートがあります。これらの「オブジェクト」が用意されています。セルの操作をしたいときは「Rangeオブジェクト」を使い、シートの操作をしたいときは「Worksheetオブジェクト」を使います。はい、覚えなくていいです

他にも用途に応じた「オブジェクト」があります。

セルとかシートのように、オブジェクトは「操作したい部品」を表します。厳密には、どういう用途に使うものかという「分類」を表します。

そのため、マクロで何をしたいかによって利用する「オブジェクト」は変わってきます。

Excelの操作を自動化するためのマクロを作る場合は何かしらの「オブジェクト」を利用することになりますが、一番使う頻度が多いのはセル操作用の「Rangeオブジェクト」と思われます。あとは、シート操作用の「Worksheetオブジェクト」とブック操作用の「Workbookオブジェクト」の3つでほとんどの場合は事足ります。


.(ドット)はなんなの?

コードの途中にある.(ドット)は、親子関係があることを示しています。.(ドット)の左側が親のオブジェクトで、右側がその子供になります。

親オブジェクト.子

例えば、A1セルに”abc”を入力する場合の手順は、A1セルを選択してキーボードで「abc」と入力します。そのままですね。

「A1セルの値を”abc”にする」というのは、「〇〇の、××を、**にする」という文章の構成になります。これがそのままVBAのコードになります。

これを日本語と併記すると、「A1セル(Range(“A1”)) の(.) 値(Value) を(=) ”abc”にする」のようになります。

このように、.(ドット)は左のオブジェクトを示す「~~の」という意味で使われます。

.(ドット)は1行のコードの中に複数使われることもあります。

例えば、「B2セルのフォントの色を青にする場合」は以下のようになります。

「親.子.孫」の関係です。

ここでは挙げませんが、さらにドットの数が多いものもあります。

このように、前後の親子関係を示すものが.(ドット)の役割です。


.(ドット)の右側は?

.(ドット)の右側は3種類あります。上の説明の親子関係にある「子供側のオブジェクト」か「プロパティ」か「メソッド」のいずれかになります。

「子供側のオブジェクト」かどうかは、.(ドット)を付けて入力候補が出るかどうかで判断できます。入力候補が出れば「オブジェクト」です。

「プロパティ」か「メソッド」かを見分けたい場合は、単語(ActivateやValueなど)を選択して、右クリックをして「定義」を選択するとオブジェクトブラウザが表示されます。

そこで、説明欄に「Property」から始まっていれば「プロパティ」で、「Function」か「Sub」から始まっていれば「メソッド」とみなせます。


よく使うオブジェクト

VBAで扱える「オブジェクト」の種類はたくさんありますが、実際に使用頻度が高いものは数個です。

ここでは使用頻度が多いと思われる順に紹介します。

オブジェクト名 用途
Range セルの操作を行います。複数の説明記事を「セル」に書いています。
Worksheet シートの操作を行います。複数の説明記事を「シート」に書いています。
Workbook ブックの操作を行います。複数の説明記事を「ブック」に書いています。
FileSystemObject ファイル操作を行います。参照設定「Microsoft Scripting Runtime」もしくはCreateObject関数を使う必要があります。

詳細を「VBAでのFileSystemObjectとTextStreamの使い方」や「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」に書いています。

Dictionary ハッシュマップとして利用します。参照設定「Microsoft Scripting Runtime」もしくはCreateObject関数を使う必要があります。

詳細を「VBAのDictionaryの使い方(全メソッドとプロパティ網羅)」に書いています。

RegExp 正規表現での文字列操作を行います。参照設定「Microsoft VBScript Regular Expressions 5.5」もしくはCreateObject関数を使う必要があります。

詳細を「VBAで正規表現(RegExp)を利用する」に書いています。



技術的な説明

VBAでの「オブジェクト」という言葉はそもそもプログラミング言語の説明としては不十分です。

オブジェクト指向のクラスとインスタンスを分けずにひっくるめた言葉として「オブジェクト」が使われており、それがむしろ分かりにくくしている面もあります。

VBAではなぜか「クラス」という言葉を使いたがらない傾向があります。「インスタンス」という言葉はほとんど使いません。そして「クラス」や「インスタンス」の代わりに「オブジェクト」と言い換えをします。

クラスもインスタンスもオブジェクトの一種ですので間違いではないですが、技術者が使うプログラミング言語の言葉としてはふさわしいとは言えません。とにかく、VBAでは慣例なのかなんなのか分かりませんが、こうなってます。

コードとしてはVBAもちゃんと「クラス」と「インスタンス」は区別できるのですが、どちらも「オブジェクト」と呼びます。

こういうところがVBAのダメなところですね。