★★★★★★★★★★★★Access2000VBA・Excel2000VBA独学~用語:新:プロパティ、メソッド、の新しい説明~今までの「プロパティ=性質」「メソッド=動作」のような説明だと結局わからない。理解できない。「もれなく」「挫折する」ので。~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
※↓イメージ図
※図の中の「階層構造」という言葉は、
「階層構造上下自由往来機能」とか、あるいは、
「上下階層のオブジェクトの機能を流用する機能」
などという風に思ってください。
★ 結論01(省略だらけの、「ひとこと」だけの結論。)
◎オブジェクト(単一、コレクション、ともに)とは?
『 各種の機能の複合体(小さくても。目に見えなくても。)、部品、パーツ、
ユニット、ミニミニロボット、3D的・立体的なもの、形あるもの。』
※Excelという工場で働く「ミニミニロボットたち」というイメージです。
◎プロパティとは?
『 オブジェクトの「色んな設定の値」を、読み取ったり・設定したりする「機能」』
or (設定系の命令)
◎メソッドとは?
『 オブジェクトの「実際の各種動作」の、その「実行」をする「機能」』
or (動作系の命令)
◎イベントとは?
『 そのオブジェクトと関係のある「ある特定の・あらかじめ決められたタイミング」で
「プログラムを自動実行させる」「機能」』
or (自動実行ポイント、自動実行できるよ信号)
※ そして、プロパティもメソッドも、「値やオブジェクトを返す自作関数(あるいは返さないモノ)」などと似た感じ・似た仕組みで処理をしてくれています。動いています。処理を実現してくれています。(イベントは異なります)
逆に言うと、プロパティやメソッドは、『「値やオブジェクトを返す自作関数(または返さないソレ)」等々と似た、同じような動きをする「機能」たちだ 』、ということになります。
★ 結論02(すこし詳しく補足。)
◎オブジェクト(単一、コレクション、ともに)とは?
結論01と同じ。
◎プロパティとは?
『 オブジェクトの「各種設定項目」の値を、
読み取ったり・設定したりする「機能(命令)」。』
or
(オブジェクトに対してあらかじめ決められた「各種設定項目」について、
その「設定関連のみの命令(読取・設定)」を「実行」する「機能」。)
or
(設定系の命令)
◎メソッドとは?
『 オブジェクトの「実際の各種動作」の、
その「実行」をする「機能(命令)」。』
or
(オブジェクトに対してあらかじめ決められた「各種動作」について、
その「実際の動作関連のみの命令」を「実行」する「機能」。)
or
(動作系の命令)
◎イベントとは?
『 そのオブジェクトと関係のある「ある特定の・あらかじめ決められたタイミング」で
「プログラムを自動実行させる」「機能」。』
or
(自動実行ポイント、自動実行できるよ信号)
※ そして、プロパティもメソッドも、「値やオブジェクトを返す自作関数(あるいは返さないモノ)」などと似た感じ・似た仕組みで処理をしてくれています。動いています。処理を実現してくれています。(イベントは異なります)
逆に言うと、プロパティやメソッドは、『「値やオブジェクトを返す自作関数(または返さないソレ)」等々と似た、同じような動きをする「機能」たちだ 』、ということになります。
※「プロパティもメソッドもイベントも」、すべて、「機能」、と、捉えて
しまったほうが、独学しやすいです。
3つとも、オブジェクトが「保持・保有・内包」する、「機能」たち、です。
(だからこの3つは「オブジェクト」の「メンバー」と呼ばれます。
「3つとも」「全部」「同じように」「機能」「だから」、
「メンバー」「なんだ」と理解しても差し支えないと思います。
そのうち、「プロパティとメソッド」は更に、「機能でもあるけれど」、
でも場合によっては、どちらも同じように「命令」と捉えてしまっても全然OK!、
・・・とも思います。
逆に、巷でよく教えられている・・・、「プロパティ=性質・設定」だとか、
「メソッド=動作」だとか、だけの、簡易な(ある意味テキトーな)覚え方だと、
とってもマズイです。
(当サイトでもそう書いてしまっている記事がたくさんあります!m( _ _ )m
本当にゴメンナサイ!!!最低の教え方でした!!m( _ _ )mm( _ _ )m
その覚え方だと、特に、オブジェクトブラウザやヘルプを読みこなすときに
意味が通じなくなって、まず「もれなく」、挫折してしまいます。
(理由は、プロパティもイベントも「自作関数」と同じような動きをするからです。
基本、プロパティもイベントも「値やオブジェクトを返す自作関数(あるいは返さ
ないそれ)」と同じような仕組みで、その機能・動作が実現されています。)
なお、「プロパティもメソッドもイベントも」、すべて、
1つのオブジェクトだけに紐ついた、そのオブジェクト「独自の」機能です。
異なるオブジェクトのあいだで、同名の「プロパティ・メソッド・イベント」が
ありますけど、でも、微妙に動きがちがいますので、それぞれ「似て非なるもの」、
となります。
★ 「スチームオーブンレンジ」を「オブジェクト」に見立てると・・・
「スチームオーブンレンジ」を「オブジェクト」に見立てた場合、プロパティやメソッド、イベント、は次のようなイメージになります。
◎「スチームオーブンレンジ」における「プロパティ」
・「スチームする温度」を読取・設定するタッチボタン(=機能)
・「スチームする時間」を読取・設定するタッチボタン(=機能)
・「オーブンする温度」を読取・設定するタッチボタン(=機能)
・「オーブンする時間」を読取・設定するタッチボタン(=機能)
・「オーブン←→スチーム←→レンジ」を切り替えるタッチボタン(=機能)
・「レンジする時間」を読取・設定するタッチボタン(=機能)
・「解凍設定」を読取・設定するタッチボタン(=機能) などなど。
※って、勝手に想像で書いてしまいましたが、今のスチームオーブンレンジってこんな感じなんでしょうか?時代遅れかも?です。
※プロパティもメソッドも「タッチボタン(=機能)」であることには
変わりはありません。
が、
・プロパティが「各種設定系」のタッチボタン、
・メソッドが「各種動作 ” 開始 ” 系」のタッチボタン、
であるところが異なります。
◎「スチームオーブンレンジ」における「メソッド」
・「スチーム開始」のタッチボタン(=機能)
・「オーブン開始」のタッチボタン(=機能)
・「レンジ開始」のタッチボタン(=機能)
・「解凍開始」のタッチボタン(=機能) などなど。
※プロパティもメソッドも「タッチボタン(=機能)」であることには
変わりはありません。
が、
・プロパティが「各種設定系」のタッチボタン、
・メソッドが「各種動作 ” 開始 ” 系」のタッチボタン、
であるところが異なります。
◎「スチームオーブンレンジ」における「イベント」
・「タイマー」設定した時刻に、自動的にあたためなどを始める機能
(※なんてあるのかな?)
・トビラをあけた瞬間に、自動的にあたためなどをストップする機能 などなど。
※レンジではないのですが、例えば ATMやコピーの複合機などですと、「人が前に立つと」、「スリープモードから脱して液晶モニタが点灯し、通常電源ONモードに復帰する・・・」とかの機能がありますが、そういうものも「人が前に立ったタイミングで・その瞬間に・自動的に動き出す」わけですので、「イベント」と同じような動作だと言えると思います。
★ 結論03(さらに もうすこし詳しく)
◎オブジェクト(単一、コレクション、ともに)
一言でいうと、たとえば・・・、
・「各種の機能の複合体(小さくても。目に見えなくても。)」、
・「画面に見えてるユニット、部品、パーツ(コマンドボタンやシート、セル、など)」、
・「Excelという工場で働くミニミニロボットたち」、
・「料理に例えると ” スチームオーブンレンジ ” 」、
・「実生活に例えると、銀行のATMや、それをウラで支えるケーブルや制御システム」、
・・・・のようなイメージです。
「オブジェクト」という言葉には、基本、「文字ベースの一般データ(数値・文字列・日付・True/Falseなどの2値など)」と対比して、「3D的なもの・立体的なもの・形あるもの」という意味合いが込められていると思います。
(文字ベースのデータの反対側にあるもの・・・、とか、単なる文字データじゃない3D的な部品みたいなもの・・・みたいな意味合いが込められていると思います。)
また、「銀行のATMをウラで支えるケーブルやシステム」のように、「壁や地下に埋まっていて目に見えない」的なものもあります。
基本、「大きい、小さい、目に見える・見えない」に関係無く、「3D的で、複数の機能集合体、部品、ユニット、パーツ」という感じなら「オブジェクト」です。
もう少し言うと、
・「(多分)100%必ず、階層構造に組み込まれている。」
・「100%必ず ” プロパティ ” を保持・保有・内包している。」
・(メソッドやイベントについては保持・保有・内包していないものもあるけれど)、
という特徴があります。
※参考記事
『★★★★★★★★★★★★★★★★Access2000VBA・Excel2000VBA独学~必読!!ExcelVBAが上達するかどうかの最初の分かれ道!オブジェクトとオブジェクト式について~』
『★★★★★★Access2000VBA・Excel2000VBA独学~用語:「ExcelVBAプログラミング」とは?~』
『Access2000VBA・Excel2000VBA独学~用語:”目に見える”「メソッド・プロパティ・列挙(=Enum)・定数(=Const)」と右クリックメニューの画面の関係について~』
==============
◎プロパティ
一言でいうと、
『 オブジェクトの各種設定項目の値を読み取ったり・設定したりする「機能」。』
です。
オブジェクト(単一、コレクション、ともに)の各種設定項目の、その値を読み取ったり・設定したりする「機能」。です。
また、中には、「オブジェクトを取得できるタイプ」のプロパティもあります。
「単なる」「性質」とか「性格」とかだけの理解だと、結局「VBAを理解できない」です。
ですので、「機能」、「だ」、と、「ちゃんと」、理解したほうがいいです。
そして、この「機能」は具体的には、「関数」「自作関数(値やオブジェクトを返す自作関数など)」と似たような仕組み・原理で動作を実現しているようです。
なので、逆に言うと、いろんなタイプの「値やオブジェクトを返す自作関数」「値やオブジェクトを返さずに設定だけをする自作関数」などを作り分けできない人、そこまでやれる時間と気力が無い人、は、「永遠に」ExcelVBAが理解できません。
当然、応用も利きません。どこかの先生に有料レッスンを受けていたとしても、それでも、最終的には応用が利きません。エラー処理なんて自力でぜんぜんできません。
Q&Aサイトで聞いたところで、回答の意味がわからず、「全部作ってもらえないでしょうか?」としか言えません。
習った費用を・・・、例えば「誰かに教えたり・実際に小さなプログラムを作って小遣い稼ぎや給与アップで回収する・・・なんていつまでたってもできるわけがない・・・」、という状況に陥ってしまいます。
嫌な言い方をしてしまうと、「まず例外なく挫折し、応用も聞かないので、汎用のVBAの作りかたの勉強なんてやるだけムダ。マクロの記録の部分汎用だけで十分。」ということに、「たいてい」なってしまいます。ほぼ例外なくそこに「落ち着き」ます。
(だってエラーのせいで本業邪魔されたくないし。)
(逆にいろんなタイプの「値やオブジェクトを返す自作関数」や「値やオブジェクトを返さずに設定だけをする自作関数」などの作り分けを学ぶための時間と気力がある人なら必ずどこかで「爆発的に伸びます」。そして、Webに書いてある基礎なんてすらすらで、サンプルも自力で書き換えたり応用できたりの速度が急激に2~10倍くらいになります。)
なお、たとえば、「メソッド」も
・「プロパティと」「同じように」
・「自作関数(値やオブジェクトを返す自作関数など)」と同じような仕組みで動いているけれど、
・プロパティはその中でも「オブジェクトの各種設定項目」の「設定・or・読み取り」だけに「特化」している・・・・
という風に考えたほうがいいみたいです。
そのほうがオブジェクトブラウザもヘルプも自力で扱えるようになる・・・と思います。
(そしてこの2つの存在意義が分かると、ある時点から、「爆発的に」ExcelVBAもが上達します。また、ExcelVBAだけでなく、他のソフトのVBAまでもが上達します。連携プログラミングもしやすくなります。)
また、よく、「メソッドは動詞系で(~する)という意味のモノ」という説明をする市販書籍やサイトもありますが、よくよく学んでみると、それはある意味「ウソ」で、プロパティだって 実は、(各種設定値を)「読み取る・設定する」という「動詞系」の「機能」なんです。
そしてその「機能・動作」は、
「値を返さずに設定だけをする自作関数」
「値を返す(=読み取る)だけで設定はしない自作関数」
「引数の指定によってオブジェクトを返すだけの自作関数」
などと似たような仕組みで実現されています。
※メソッドの場合は、「何らかの動きをしつつ、同時に、何らかのオブジェクトも返してくれる自作関数」と似たような仕組みのものもあります。
そう考えたほうがいいです。
オブジェクトに含まれる、「プロパティ、メソッド、イベント」は「全部」「 ” 機能 ” なんだ!!」と考えてしまったほうが、初心者や独学者は「正しい方向に向かって」「学びやすい」と思います。
「そのうち慣れるよ」という「ワケのわからない根拠も何にも無い・誤った方向へ導く教え方」とは大きく異なって。
==============
◎メソッド
一言でいうと『オブジェクト(単一、コレクション、ともに)のオブジェクトの実際の各種動作の、その「実行」をする「機能」。
「実際の各種動作」とは、
中には、オブジェクトを取得できるタイプのメソッドもある。
「単なる」「動作」とかとかだけの理解だと結局「VBA」や「オブジェクト」を「理解できない」です。
ですので、「機能」、「だ」、と、「ちゃんと」、理解したほうがいいです。
そして、この「機能」は、「関数」「自作関数(値やオブジェクトを返す自作関数など)」と同じような仕組みで動作を実現している。
プロパティも
「メソッドと」「同じように」
「自作関数(値やオブジェクトを返す自作関数など)」と同じような仕組みで動いているけれど、
メソッドはその中でも「オブジェクトの実際の各種動作」の「実行」だけに「特化」している・・・・
と考えたほうがいい。
そのほうがオブジェクトブラウザもヘルプも自力で扱えるようになる。
★ 説明
プロパティ、メソッドについては、よく、
「プロパティ=性質」とか、
「メソッド=動作」とか、
いう形で習います。
が、
それよりは、
「プロパティ」も「メソッド」も、「オブジェクト」に含まれる「機能」「だ」という捉えかたのほうがいいと思います。
そして、「その動作は関数にも似て」います。
そして、その「関数」とは、例えば、
「値を読み取れるだけの関数」
「値の設定もできる関数」
「オブジェクトを返す関数」
「何らかの動きをする関数」
「何らかの動きをしながら、同時に、値やオブジェクトも返す関数」
などです。
プロパティやメソッドに、「名前付き引数」が使えることからも、「似ている」と分かると思います。
「名前付き引数」はもともと「関数(自作関数)」のものですので・・・。
※補足:「返す」とは?
「値を返してくれる関数」の場合は、「計算して答えを出してくれる」とか、「加工した数値や文字列や日付などを投げ返してくれる」という意味です。文字ベースの値を投げ返してくれる、という意味です。
「オブジェクトを返してくれる関数」の場合は、「(指定した)操作対象としたいオブジェクトを1つだけ選択してくれて、取りに行ってきてくれて、僕らユーザー側に投げ返してくれる」という意味です。3D的な「部品」「パーツ」「ミニミニロボット」を投げ返してくれる、という意味です。
ExcelVBAを学んでいて、「プロパティもメソッドもイマイチわからない」、となってしまうのは、
「プロパティ=性質」とか、
「メソッド=動作」とか、
そう言い切ってしまい、「そこで説明をやめてしまうから」ではないか?と今、実際にExcelVBAを学んでいて、色んな市販書籍やサイトを見て、そう思います。
「プロパティ=性質」という安易でテキトーな説明ではなく、たとえば・・・・
「プロパティ」とは、『オブジェクトの性格を決める各種の値たちを、読み取ったり・設定をしたりする「機能」のこと。安易に「性格・性質」というだけではなく、「機能」。読み取ったりや設定したりは「関数」のような仕組みを使っている』
・・・・と言う風に説明したほうがわかりやすい気がします。
あるいは、
「今はプロパティ=性質というイメージで覚えておいて。でも学びが進むうちに、オブジェクトに内包される「関数みたいな動きをする」「機能」、と捉えたほうがしっくりくるときが必ず来ます。そしたらかなり上達できてますよ。」
と、説明するほうが本当、なのではないかと思います。
メソッドも同じです。
「メソッド=動作」という安易でテキトーな説明ではなく、たとえば・・・・
「メソッド」とは、『オブジェクトのを実際に、具体的に動かす「機能」のこと。たとえば、オブジェクトに対して・開く・コピーする・貼付する・印刷する・入力する・削除する・移動する、といった、いろんな動きを「実際におこなう」「機能」のこと。安易に「動作」というだけではなく、「機能」。オブジェクトを実際に細かく動かすための。そしてその「動き」は「関数」のような仕組みを使って動かしている。』
・・・・と言う風に説明したほうがわかりやすい気がします。
実際、
プロパティも、
メソッドも、
イベントも、
「オブジェクト」に含まれる「機能」です。
(だから、「メンバー:一員」と呼ばれます。)
「イベント」なら、「ある特定の・あらかじめ決められたタイミング」で「プログラムを自動実行させる」「機能」です。
そのように
プロパティも、
メソッドも、
イベントも、
「性質だ」「動作だ」「出来事だ」なんだかんだじゃなく、
「値やオブジェクトを取得したり加工したりするための」「機能」「だ」
ととらえたほうがいいと思います。
「メソッド=動作」にしても、「メソッドは動詞系で(~する)という意味のモノ」という説明をする市販書籍やサイトもありますが、よくよく学んでみると、実際には違うくって「それはある意味誤解しやすい・間違えやすい理解の方法だ」と気づかされますです。
プロパティだって、実は、「読み取る・設定する」(性質を)という「動詞系」の「機能」なんです。
「性質」とかいったテキトーな理解だけで終わってしまうもの・終わってイイもの、ではありません。
(メソッドが動詞形なら、なら、「性質」と理解してしまったら、プロパティは何形なの?)
たとえ誤りであったとしても、初心者のうちはそうとらえたほうが良い気がします。
逆に、「そうとらえないから」「初心者」や「独学者」が、長きにわたり、オブジェクトのことが理解できず、エラーを自力で解決すらできないまま、ということになります。
結局VBAなんて
「みんな挫折する」
「パソコン好きの」
「ある意味ヒマな人」
しか、深く理解できない・・・。
なんて状況に陥ってしまうのではないでしょうか?
教室も、「VBAに挫折する人がいるのは自分の教え方が悪いせい」、なんて思ってなくて、「勝手に挫折しろ」っていうのが本音で、「習いに来た人の数や卒業した人の数は何千人でも、実際に現場に戻ってちゃんとやれた人はそのうちの2割以下(で、日本全体にはあんまり貢献できてない)」かもしれないし。
でも「最初から」・・・・
「プロパティ=性質」とか、
「メソッド=動作」とか、
ということと共に、それといっしょに、
より細かく言うと、
プロパティも、
メソッドも、
イベントも、
「オブジェクト」に含まれる「機能」です。
(だから「メンバー:一員」と呼ばれます。)
それらはすべて、「オブジェクト」が保持・保有・所有・内包 している「機能」です。
オブジェクトに対して「読み取ったり、設定したり、動かしたりするための、」「機能」です。
「メソッド=動作=動詞系」という説明もありますが、
プロパティだって、「設定する・読み取る」という「動詞系」の「機能」なんです。
「性質」とかだけで終わってしまうものではありません。
そして特にプロパティとメソッドは、「名前付き引数」が使えることなどから見ても、
「値を読み取れるだけの関数」
「値の設定もできる関数」
「オブジェクトを返す関数」
「何らかの動きをする関数」
「何らかの動きをしながら、同時に、値やオブジェクトも返す関数」
の動きに似ているし、オブジェクトブラウザやヘルプの利用においてもそう考えるほうがわかりやすいです。
(「名前付き引数」はもともと「関数」のものです。)
・・・・とも、習えていれば、挫折する人も少ないかもしれません。
何度も言いますが、
たとえ誤りであったとしても、初心者のうちはそうとらえたほうが良い気がします。
★ 本記事の重要性=『 VBAが上達するかしないかの「唯一の」最低条件・ポイントのひとつ 』だと思います。
本記事に書いたことは初心者がまず「最初に」理解すべき、場所・位置・目標、です。
「これをしっかり理解しはじめようと」「努力をはじめるところから」が、「ExcelVBAの」「真の」「スタートライン」となります。
そのスタートラインに立つには、「ワークシート関数として」の・・・、
▼「値を返す関数」
▼「値を返しつつ、メッセージを出したり、その他の何らかの動作もする関数」
・・・を作ることから始めると良いと思います。
そしてそれができたら、あるいは同時進行で・・・、
▼「オブジェクトを返す関数」
▼「オブジェクトを返しつつ、メッセージを出したり、その他の何らかの処理・動作もする関数」
・・・を作れるように頑張るといいと思います。
自作関数も、引数を必要とする関数を作れば、「名前付き引数」の形態で動かすことができます。
ひいては、以上のことが、プロパティやメソッド、そして、オブジェクトブラウザやローカルウィンドウなどへの理解、ヘルプの理解、へとつながっていきます。(プロパティやメソッドも名前付き引数を使うので。また、オブジェクトブラウザの説明ペインには、関数のプロシージャの「一行目」のような説明書きがありますので・・・。)
例えば、Excel2000には「Exact関数」がありません。
なので、似たような関数を「勉強」として自作して、ワークシート(つまりセルの数式)から呼び出して使ってもいいわけです。
なお、バージョン2000でなくても、「Exact関数」では結局「2つの値しか比較できません」が、オリジナルの自作関数なら、「3つでも4つでもそれ以上でも、同時に、値を比較できる」ものを作れます。
そういうのも勉強になりますし、既存のワークシート関数を四苦八苦して組み合わせて作るより簡単です。
コードも見やすいですし。
(速度の面でのデメリットが出なければ。ですが・・・。)
※参考記事:「Exact関数」の自作に関して
『★Access2000VBA・Excel2000VBA独学~2つのテーブルの間に何らかの差異があるどうかを調べる方法・いろいろ~』
逆に、「以上のようなことを理解できなければ、学ぼうとしなければ、いつか大事故を起こす」とも思います。
もちろん、「上達」など「いつまでたっても」「できません。」
いつまでも「応用が利かない自分でもいい」「Q&Aサイトで質問して作ってもらえばいい」というスタンスで居て、それが現場で許されるなら、本記事は無視して、そういうことができる市販書籍やWebサイトのサンプルをコピペしていれは大丈夫です。
「マクロの記録」もしっかりと活用すれば相当なことができます。
でも、「応用が利く自分で居たい」「時間がない」「でも自分しかいない」「お金がない」「Q&Aサイトで作ってもらえないくなった」ということでしたら、本記事のことは必須です。
ちょっとしたプログラムを作って「お小遣い稼ぎしたい」、とか、「習ったお金をそのようなことで回収してタダ同然にしたい」という場合も、必須だと思います。
★ プロパティ
オブジェクトが