【簡単】VBAコードの書き方2つの型を覚えると基礎の9割はカバー出来る

お知らせこの記事は初心者用マクロ学習講座|勉強範囲を限定&12本の動画で早く効果を実感の関連記事です

オブジェクト、プロパティ、メソッドについて考えます

「オブジェクトは操作の対象です」・・・色々なテキストに書かれている一般的な説明です。勉強が進むと納得できるキーワードですが最初の頃は抽象的過ぎて分かりません。

Microsoftさんの解説にはこのような記載もあります。

コードを記述することは謎の多い難解な作業に思われることもありますが、その基本原理は日常的論理に基づいていて理解しやすいものです。 Microsoft Office アプリケーションは “オブジェクト” という概念を公開するように開発されており、各オブジェクトは命令を受け取ることができます。 ・・・続く

Office VBA の基礎知識

もはや哲学のような書き方がされておりなんの事なのか良く分かりません。これでは困ってしまいます。代わりにこの記事ではコードの書き方を出来るだけ簡単に説明していきます。

勉強初期の難解なポイント1位のオブジェクト、プロパティ、メソッドの理解について限りなく無駄を取り除いて必要なところだけ解説してみます。

マクロ
マクロ

簡潔にポイントから提示します 画像をご覧ください

コードをシンプルに考えるとこの2つの型に収束します

基本この2つの型だけ覚えるとほとんどの事はカバー出来るのですがそもそもオブジェクト、プロパティ、メソッドが何なのか説明していません。

しかし私が先に型を提示したのは着地点を見ていただきたかった為です。オブジェクト、プロパティ、メソッドを全部理解するのは不可能です。

型で理解する事から始める

そこで出来るだけ覚える範囲を少なくしつつコードを書ける様にする為には勉強する範囲を限定する必要があります。範囲を限定した結果覚える型は2つという事で画像を提示しました。

このあとオブジェクト、プロパティ、メソッドとは何かをふわっと説明してから実際にコードを使って勉強を進めていきます。

最後に何故オブジェクト、プロパティ、メソッドの考え方を覚えないといけないのかを説明していきます。

記事の難易度

本当は2.5をつけたいところです。

記事の難易度
易しい
1
2
3
4
5
難しい

オンラインミーティング

私オンラインでVBAの講師をしております。記事には動画も用意しています。動画や説明記事を見ても分からない時はオンラインでミーティングする事も可能です。記事以外の質問もOKですよ。

全国可リモートワークで効果大エクセルVBA(マクロ)をオンラインで勉強してみませんかお友達との参加も可能です。 (VBAで定時に帰ろう) 広島のWindows総合の生徒募集・教室・スクールの広告掲示板|ジモティー
【ジモティー】投稿ご覧いただきありがとうございます。エクセルVBAに興味を持たれている様ですね。*****************************… (VBAで定時に帰ろう) 広島のWindows総合の生徒募集・教室・スクールの広告...

前回記事

前の記事マクロの書き方標準モジュール内にSubプロシージャは複数書けるのか

標準モジュールとプロシージャの関係について解説しています

この記事を読むとわかる事

オブジェクト、プロパティ、メソッドの理解が進みます。

記事からわかる事
  1. オブジェクトとは何か?
  2. プロパティとは何か?
  3. メソッドとは何か?
  4. 何故オブジェクト等の要素を理解する必要があるのか?
型で覚えよう

マクロ

コードは最終的には2つの型でほとんどの事が出来るという事も解説します。最後に何故オブジェクト、プロパティ、メソッドの考え方を覚える必要があるのかを説明します。

2分動画

動画はシリーズ内の動画と合わせて500円で販売しています。詳しくはこちらをご覧ください。

マクロ
マクロ

今回はオブジェクト、プロパティ、メソッドについて解説しています

オブジェクトとは何かが分かる動画を用意しました

動画の中からさらに要点を絞って解説していきます。

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

まずは画像をご覧ください。

オブジェクト、プロパティ、メソッドについて説明しています

オブジェクト

ワークブックやワークシート、セルなど指示を与えたい要素です。文章で言うところの主語ですね。

回答:オブジェクトとは?

アプリケーションを構成している要素です

プロパティ

オブジェクトの属性です。文章でいうとセル(オブジェクト)の背景色(プロパティ)という形で使います。

回答:プロパティとは?

オブジェクトに紐付く属性です

各オブジェクトは属性を持っています。(詳細は省略)オブジェクト毎に持っている属性の種類や値が違います。

例えば私をオブジェクトとすると名前、年齢、出身地、電話番号、メールアドレスというのは私に紐付く属性です。

これと同じようにエクセルはブックやシート、セルにそれぞれ属性を持っています。

セルは背景色という属性を持っているのでセル(オブジェクト)の背景色(プロパティ)という文章が成り立ちます。

メソッド

オブジェクトが自身が実行出来る動的な命令です。

回答:メソッドとは?

オブジェクトが実行出来る処理です

コピーや削除等オブジェクト自身が動的な行動をする為の要素です。

使用する際は必要に応じて引数を用意します。今回動画で紹介しているのはオートフィル、コピー、クリア(値の削除)です。

オートフィルはオートフィルを仕掛ける範囲、コピーについては貼り付け先を引数として与えます。値の削除は引数を使用しない為ClearContentsメソッドのみとなります。

コードの要素が分からない時はどうするのか?

使いたいコードがオブジェクトなのかプロパティ、メソッドなのかは都度テキストやネットで調べましょう。VBEの中でも確認出来ますが複雑で混乱するのでここでは控えます。

Rangeオブジェクトにはどんなプロパティが居るのか?などを自身で調べる事で知識の積み上げになります。

型でコードを覚える

コードの書き方に移ります。基本的には2種類です。この型でほとんどのコードの説明がつきます。事例を使って解説していきます。

オブジェクト.プロパティ=代入する値

動画内で紹介しているコードです。

マクロ
マクロ

コードはWクリックで選択出来ます。その後「Ctrl+C」でコピー、「Ctrl+V」で貼付けです。

Sub test()

'オブジェクト.プロパティ=代入する値 の書き方
Range("A1").Value = "おはよう"
Range("A1").Interior.ColorIndex = 3
Range("A1").Interior.ColorIndex = 0
Range("A1").Value = ""

End Sub

この型の基本は「左辺に右辺を代入」です。ここでの左辺はオブジェクトが持つ属性(プロパティ)です。右辺は代入する値ですね。

プロパティは値を持つことが出来ますが初期値は何もない状態です。そこに右辺で指示した値を代入しようというコードです。

例えばRange(“A1”).Value=”おはよう” は「セルA1が持っているValueという属性におはようを代入して」というコードです。

つまりRangeオブジェクトのValueプロパティを書き換えることでセルに値を入力する事が出来ます。

オブジェクト.メソッド(状況によって引数)

動画内で紹介しているコードです。

Sub test()

'オートフィル用の値を使用
Range("B2") = "月曜日"  'このコードだけオブジェクト.プロパティ=代入する値 の書き方


'オブジェクト.メソッド(状況によって引き数) の書き方
Range("B2").AutoFill Range("B2:B8")
Range("B2:B8").Copy Range("C2:C8")
Range("B2:B8").ClearContents
Range("C2:C8").ClearContents

End Sub

この型の基本はオブジェクトの直後にメソッドを書く事でオブジェクト自体に動的な指示を与えているところです。その後状況に応じて引数を与えています。

動画の中ではオートフィル、コピペ、クリア(値の削除)を使っていますが引数を使っているのはオートフィルとコピペです。

オートフィルではオートフィルを仕掛ける範囲、コピペはペースト先です。オブジェクト.メソッドだけでは足りない情報がある時は引数で情報を補っています。

手作業する時をイメージしてください。オートフィルはマウス等で範囲を指定しますね。コピペもペースト先で貼付けを実行します。ここで指定している内容はVBAに置き換えると引数の要素です。

何故オブジェクト等の要素を理解する必要があるのか

気になるのはここですよね。なんでこんなややこしい作りにしているのか?ひとまず回答を用意します。

回答:何故オブジェクト等の要素を理解する必要があるのか?

コードは機能毎にブロック状になっている事を理解する為

個々のコードは決められた機能を持っています。そのうえで複雑な命令にも対応出来る様に細分化された状態で用意されています。

具体例

では具体例を見ていきます。

記事中段でオブジェクト.プロパティ=代入する値というプロパティを使ったコードを紹介しました。

対象のコード

Range(“A1”).Interior.ColorIndex = 3

背景色を変えるというコードですが最初に紹介した型と少し違います。

オブジェクト.プロパティという関係ではないですね。Range.Interior.ColorIndexという様に要素が3つ連なっています。なぜコードが成立するのか考えてみましょう。

やりたい事はセルの背景色を変えたいという事です。ただしRangeオブジェクトはColorIndexプロパティを持ってないので自身の力だけでは背景色を変えられません。

InteriorオブジェクトならColorIndexプロパティを持っています。どうしたら良いでしょうか?

オブジェクトを繋いでコードを生成します

まずは環境を整理しましょう。オブジェクトはプロパティを持っているのですが自身から見て1レベルまでの情報しか持てません。親子関係までしか属性を構築出来ないという事です。

この環境の中でRange.Interior.ColorIndexと3つのワードが繋がっています。なぜエラーにならないのでしょうか?これはRangeオブジェクトとInteriorオブジェクトが連携している為です。

イメージ先行で話すとRangeオブジェクトが持っているInteriorプロパティとInteriorオブジェクトが互いに接着剤の役割をして2つの親子関係があるモジュールを繋いでいます。

以下少し詳しく書いてみましたが分かりにくい時は飛ばして下さい。(記事をたたんでおきます)

  1. RangeオブジェクトのInteriorプロパティはInteriorオブジェクトを返します。
  2. 返ってきたInteriorオブジェクトはColorIndexプロパティを持っています。
  3. ColorIndexに値を代入する事でRangeオブジェクトを指定しつつColorIndexプロパティに値を用意する事ができます。

これでRangeオブジェクトからColorIndexを指示する事が出来る様になりました。こうやって要素毎に機能を持っているコード達が連携しあって命令を構築してExcelを動かしています。

オブジェクト、プロパティ、メソッドを理解するのはこうしたコードの組み合わせでコードが成り立っているという事を理解する為です。

まとめ

少し難しくなりましたがいかがだったでしょうか。

本日勉強したこと
  1. オブジェクトとは何か
  2. プロパティとは何か
  3. メソッドとは何か
  4. コードは機能毎にブロック状に繋がっている
前半の山場です!

マクロ

オブジェクト、プロパティ、メソッド自体を理解する事も重要なのですがなぜこんな構造になっているのかも同じぐらい重要です。

一通り知識は提供したので自身で型に合わせてコードを書いてみましょう。ここは回数と慣れが必要なところです。量をこなして知識を自身に落とし込んでください。

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