第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
ExcelマクロVBAを書いて実行すると、
何やら難しい日本語らしきメッセージが表示されることがあります。
何を言っているのかを理解してあげなければエクセルがかわいそうです。
かわいそうと言うのはともかくとして、
エクセルが表示するエラーメッセージの言葉の意味くらいは知っておきたいところです。
VBAが表示するメッセージ


メッセージの、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
プロパティ ???
メソッド ???
オブジェクト、プロパティ、メソッド
これらの意味くらいは覚えておかないと、エクセルが何を言っているのか理解出来ません。
valeuこれが間違いで、正しくはValueとなります。
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
とは、
Range("A1")は、このvaleuをサポートしていません。
という意味になります。
では、順にオブジェクト、プロパティ、メソッドについて説明します。
オブジェクトとは
VBAで何か操作をしようとする対象となるものがオブシェクトです。
ブックやシート、そしてセルなどを指します。
セル(RangeやCells)はRangeオブジェクトと言います。
プロパティとは
オブジェクトの持つ財産・資産のことであり、オブジェクトの性質を表すデータです。
セルの持つ値や書式は全て、セルのプロパティです。
プロパティは、値の取得と、値の設定、この二つの機能があります。
メソッドとは
オブジェクトに対する動作・操作を指定します。
セルを選択する、セルを削除する等です。
メソッドには、値を取得する機能もあります。
プロパティとメソッドの違い
このような記述なら、
○○○はオブジェクト、□□□はプロパティまたはメソッドです。
Range("A1").valeu = "おはよう"
これに対し、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
これはつまり、
Range("A1")はオブジェクト、valeuはプロパティまたはメソッドだとエクセルは認識しているという事です。
VBAとしては、プロパティかメソッドの区別がついていないという事です。
プロパティとメソッドの違いはあまりなく、主に記述方法の違いになります。
○○○.□□□ = 値
この場合の□□□はプロパティです。
なので、=で値を入れていればそれはプロパティという事です。
この□□□は、プロパティの場合もあるし、メソッドの場合もあります。
これを見た目で区別することはできません。
オブジェクトの階層(親子構造)
このような記述なら、
○○○.△△△はオブジェクト、
□□□はプロパティまたはメソッドです。
親オブジェクト.子オブジェクト.プロパティまたはメソッド
という事になります。
ボールペンというオブジェクトには、キャップと言う子供のオブジェクトが含まれます。
ボールペンの色が何色かと考えたとき、
ボールペンのどこの色・・・と言う事の指定が必要です。
ボールペンのキャップの色
これをVBA風に書けば、
ボールペン.キャップ.色
ボールペン.キャップがオブジェクトで、色がプロパティになります。
プロパティの省略
Cells(1, 1) = "おはよう"
どれがオブジェクト?どれがプロパティ?
すると、
オブジェクト = 値
という事になってしまいます。
といいますか、オブジェクトの何に値を入れるのか・・・
上のボールペンの例なら、
ボールペン = 赤
これでは、ボールペンのどの部分を赤にするのか・・・
ボールペン.キャップ.色 = 赤
ボールペン.インク.色 = 赤
ここまで書いて初めて他人(つまりはエクセル)に理解してもらえます。
Range("A1") = "おはよう"
Cells(1, 1) = "おはよう"
これはどういう事でしょうか。
Range("A1").Value = "おはよう"
Cells(1, 1).Value = "おはよう"
これらの省略形だったのです。
Valueは価値や値打ちの意味の英単語ですが、ここでは値と訳しましょう。
.Value
が省略されていることになります、そういう決まりになっていると理解してください。
エクセルの言葉であるVBAを日本語に翻訳する
これは、
○○○の△△△の□□□
または、
○○○の△△△を□□□する
と訳します。
.(ピリオド)は「の」か「を」と訳します。
少なくとも、途中の.(ピリオド)は「の」と訳します。
最後の.(ピリオド)が、
プロパティなら「の」、メソッドなら「を」と訳してください。
○○○.△△△.□□□ = ☆☆☆
→ ○○○の△△△の□□□に☆☆☆を入れる
○○○.△△△.□□□
→ ○○○の△△△を□□□する
最終行取得のコードを訳してみる
これは、
Rowsオブジェクト.Countプロパティ
Rowsオブジェクトとは、シートの行を表すオブジェクトで、その件数(Count)です。
つまり、シートの行数を取得しています。
これは、そのセルから指定方向にCtrl+方向キーで移動した終端セルのRangeオブジェクトになります。
上記を理解して、訳してみると、
セル(シートの行数, 1).上方向の終端セル
ここまでがオブジェクトで、シートの最終行のセルから上方向の終端セルのオブジェクト
そして、そのセルの行(セルの行位置)を表すプロパティがRowという事です。
VBA用語を覚えることについて
これらの言葉を知らなくても、マクロVBAは書けます。
これらの言葉の詳細、深い理解は、通常は必要ありません。
これらの言葉が理解しきれていなくてもVBAを書くことはできますし、とりたてて不自由はないでしょう。
とはいえ、最低限の理解はしておいた方が良いです。
こういう事を言っているのか…くらいが理解できれば十分です。
マクロVBAを書くことを続けていれば、少しずつ自然と覚えていくはずのものです。
ExcelマクロVBA入門等の対応ページ
オブジェクト式について
VBAの構文|VBAエキスパート対策
VBAの省略可能な記述について
同じテーマ「マクロVBA再入門」の記事
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)
第15回.手作業で出来なければマクロは書けない
第16回.エクセルの機能を上手に使う
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
新着記事NEW ・・・新着記事一覧を見る
列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
シートのActiveXチェックボックスの指定方法|ツイッター出題回答 (2023-09-24)
ByRef引数の型が一致しません。|ツイッター出題回答 (2023-09-22)
シートコピー後のアクティブシートは何か|ツイッター出題回答 (2023-09-19)
Excel関数の引数を省略した場合について|ツイッター出題回答 (2023-09-14)
セル個数を返すRange.CountLargeプロパティとは|VBA技術解説(2023-09-08)
記号を繰り返してグラフ作成(10単位で折り返す)|ツイッター出題回答 (2023-08-28)
シートを削除:不定数のシート名に対応|VBAサンプル集(2023-08-24)
ランクによりボイントを付ける(同順位はポイントを分割)|ツイッター出題回答 (2023-08-22)
OneDrive使用時のThisWorkbook.Pathの扱い方|VBA技術解説(2023-07-26)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロとは?VBAとは?VBAでできること|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
10.条件分岐(IF)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。