オブジェクトとコレクション~ノンプロ研・VBA初心者講座・復習

ExcelVBA
ネコヲ
ネコヲ

こんにちは。ネコヲです。最近VBAを勉強し始めた40代事務員です。

2021年6月23日に行われた、ノンプロ研のVBA初心者講座第4回講義。

今回は「オブジェクトとコレクション」です。

ネコヲ
ネコヲ

めっちゃくちゃ内容盛りだくさんだったぞ!

さっそく、いってみましょう!

オブジェクトとコレクション

ネコヲ
ネコヲ

オブジェクトとコレクションを直訳すると「物体と集合」?

オブジェクトとは、例えば、

「Workbook」だったり、

「Worksheet」だったり、

一個一個のセルだったり、

VBAで操作できる対象のことをいいます。

ネコヲ
ネコヲ

ふむふむ、オブジェクトというのはVBAで操作できる対象物か。オブジェクトに対して色んな操作を行うんだな!

オブジェクトのプロパティとメソッド

オブジェクトは、プロパティとメソッドによって操作を行います。

プロパティとは、オブジェクトが持つデータのことです。

名前とか、サイズとか、色とか、画面上の位置、値などなどです。

一方メソッドは、オブジェクトが持つプロシージャ(手続き)です。

ネコヲ
ネコヲ

オブジェクトが持つプロシージャ(手続き)?

例えば、セルを選択したり、シートを追加したりなどなど、メソッドで動的な操作を行います。

ネコヲ
ネコヲ

ふむふむ、オブジェクトは、プロパティとメソッドで操作するんだな!

プロパティとメソッドはめちゃくちゃ種類があって、オブジェクトブラウザという画面で確認できます。

VBEの画面からF2キーを押すと、オブジェクトブラウザが登場し、

各オブジェクトに紐づくプロパティとメソッドを確認することができます。

アイコンでプロパティかメソッドかを区別できます。

画像引用:Microsoft

コレクションはオブジェクトの集合体

コレクションは複数のオブジェクトの集合体です。

例えば、一つ一つのWorkbookが集まると、Workbooksコレクションとなります。


引用画像:ノンプロ研講座資料より

ネコヲ
ネコヲ

ふむふむ。オブジェクトが複数集まるとコレクションなんだな!ザックリだけど理解したぞ!

オブジェクト式とオブジェクト変数

次に、オブジェクトを指定するためのオブジェクト式を見ていきましょう。

ネコヲ
ネコヲ

お!知ってるぞ!オブジェクト式って、

「Range(”A1”).value = 5」

こういうやつだろ?よく見るぞ~。

実はこの「Range(”A1”).value = 5」という式ですが、正確に書くとこうなります。

Application.Workbooks(〇).Worksheets(〇).Range(”A1”).value = 5
※〇にはインデックス番号や、ブック名、シート名が入ります。
ネコヲ
ネコヲ

ずいぶん長いな!

オブジェクトは階層構造が存在する!

VBAのオブジェクトは階層構造になっています。

ExcelというApplicationの配下にWorkbookがあり、Workbookの配下にWorksheetがあります。さらにWorksheetの配下にRangeがある、という階層構造です。

ネコヲ
ネコヲ

ん?下の階層に行けば行くほどドンドン数が増えていくな!

Rangeってセルのことだろ?セルはいっぱいあるぞ!

そうなんです。なので、例えばWorksheetが複数存在するWorkbookにおいて、Range(”A1″)(※A1のセル)の操作を行う場合、ちゃんとどのWorksheetのA1セルなのかを指定する必要があるんですね。

ネコヲ
ネコヲ

でも、実際色んなコードみてるけど、Application~から書いてる長ったらしい記述なんて見ないぞ!

上位のオブジェクトの指定を省略できる!

実はVBAでは、上位オブジェクトの指定を省略できるんです!


引用画像:ノンプロ研講座資料より

Application.Workbooks(〇).Worksheets(〇).Range(”A1”).value = 5の場合、いきなり上位オブジェクトをすっとばして、Rangeから書き始めることができるんですね。

ネコヲ
ネコヲ

おお、ラクチンだぞ!

ただし、この場合注意が必要です。すっ飛ばして書くと、今現在使用しているアクティブなシート上で処理が行なわれます。

シート1のRange(”A1”)に5と代入したかったのに、シート2を選択した状態で、プログラムを実行すると、シート2のRange(”A1”)に5が代入されてしまいます。

ネコヲ
ネコヲ

え!そうなのか、それは危険だな!

また、例えば、「Worksheets(”4月”).Range(”A1”).value = 5」という記述があったとします。

ネコヲ
ネコヲ

シート名「4月」のA1セルに5を代入する、という意味だな。

でも、もしもユーザーが勝手にシート名を「4月」から「5月」にかえたとしたら・・・

当然、エラーとなってしまいます!

ネコヲ
ネコヲ

なんと・・・じゃあどうすればいいんだ?

オブジェクト名を使って式をかく!

解決策は、オブジェクト名にあります。

ネコヲ
ネコヲ

オブジェクト名?なんだそれは?

オブジェクト名とは、コード内で使えるオブジェクトの名前で、シート名とは別物になります。

オブジェクト名を変えるにはVBEの画面を開かないといけないので、シート名と違ってユーザーの干渉を受けにくくなります。

先ほどの記述ではシート名で指定しているので、当然ながらシート名を変えてしまうとエラーとなってしまいます。

そこで「Worksheets(”4月”)」の部分を、オブジェクト名の「Sheet1」に変更して実行すると、

シート名が変更されたとしても、ちゃんとA1セルに「5」が入力されております!

オブジェクトも変数として使いまわせる!

オブジェクトは変数に格納して使いまわすことができます。

変数の宣言は、「Dim 変数 As 型」です。

講座1回目で習った文字列や整数値の変数宣言と同じですが、型については、オブジェクト固有の型になります。

Workbooksコレクションを変数に格納 Workbooks型
Workbookを変数に格納 Workbook型
Worksheetを変数に格納 Worksheet型
Rangeを変数に格納 Range型
ネコヲ
ネコヲ

そのまんまだから覚えやすいな!

オブジェクトを変数に格納するときは「Set」を付ける必要があります。

Set 変数名 = オブジェクト

サンプルコード

オブジェクトを省略できる便利なWithステートメント

ネコヲ
ネコヲ

とにかく書くのだるいんだよな~。

そんなときに便利なのが「Withステートメント」です。

書き方はこちら!

With オブジェクト
 .メンバー(プロパティorメソッド)
End With
ネコヲ
ネコヲ

なんだこれは?

サンプルコードを見てみましょう。

ネコヲ
ネコヲ

なるほど、with~End With間は、「.メンバー(プロパティorメソッド)」から書けていけばいいのか!

コレクションのループ

複数のオブジェクトの集合体であるコレクション。

コレクションに対して、一つ一つのオブジェクトを取り出してループさせるやり方があります。

For Each~Next文

For Each~Next文の書き方は、次の通り。

For Each 変数 In コレクション
 ’処理
Next 変数 

サンプルコード

シートがたくさん存在するので、シート名をすべて取り出しています。

ネコヲ
ネコヲ

これは実務でめちゃくちゃ使えそうだぞ!

第4回の講義を追えて

ネコヲ
ネコヲ

いや~、今回もかなりボリューミーな講義でした!

生講義1回目参加時→五感をつかい情報を浴びている状態。聞くのと写経で必死。

動画2回目視聴時→宿題に取り組むことで、なんとなく感覚をつかむ

動画3回目視聴時→この段階でやっとブログに落とし込める

ネコヲ
ネコヲ

ほんと、1回だけでは40代の脳みそおっつかねえでげす!

ですが、復習を重ねると、「おお!そういうことか!」と気がつくことが増えてくる。

やっぱり、アウトプット前提だと学習効果が高いなと実感しております!ほんと、アウトプットは偉大です。

ネコヲ
ネコヲ

インプット→アウトプット→実務用ツールを作る。ホップステップジャンプの3段階でVBAを習得してくど~!

 

タイトルとURLをコピーしました