● Access2000VBA・Excel2000VBA独学~用語:VBAプログラミングでの「メソッド」 について
では次に、「メソッド」 についてご説明します。
・・・とのその前に、長い前置きですみませんが、VBAプログラミングとは?について・・・、
VBAプログラミングとは、
「オブジェクト」に、
「プロパティ」を与え、
「メソッド」 や「関数」、「ステートメント」といった命令たちにてオブジェクトを動かします。
そして各プログラムを実行させるタイミングについては、「イベント」を使います。
そういうプログラミング方式です。
さらにもう少し具体的に書きますと・・・
・「オブジェクト」に「プロパティ設定」をすることによって、
・「オブジェクト」に性質や動作特性または動作上の制約等を与え、そのあと、
・その「オブジェクト」の場合なら、「メソッド」や「ステートメント」「列挙(Enum)」「定数」といった命令語たちを使って・・・、
・また、「文字列や数値」の場合なら、「関数」や「ステートメント」「各種演算子」といった命令語たちを使って・・・、
・思い通りに動かす・・・、
・そういうプログラミング方式・・・。
(大雑把なイメージとしては、「動かす対象」は「オブジェクト」か「文字列や数値」かのいずれか、というイメージです。)
そんな感じでしょうか。
補足をつけて長ったらしく書いてしまいますと・・・
「オブジェクト(何らかの機能・黒子の機能の集合体・ユニット)」に、
「プロパティ」を与え(性質、特質、特性、状態、などを設定し)、
そのオブジェクトを、
「メソッド
(命令の一種)
特定のオブジェクト専用の命令です。
特定のオブジェクトと紐付いた、そのオブジェクト独自・専用の命令です。
そのオブジェクトでしか使えない、命令、です。
(文字や数値は直接は動かせません。それは次の「関数」でやります。)」 や
「関数
(こちらも命令の一種。
「命令群」という感じ)。
組み込み関数や自作関数があります。
特定のオブジェクトに特化してはいません。
基本、オブジェクトは動かせません
(オブジェクトのプロパティのようなものを取得だけのことはできます。)
ただ、メソッドのように「動かす」ことはできません。
どちらかというと「文字や数値」を動かす
(=加工・操作・判定等々をする)ためのものです。
文字列の自動操作や自動計算、各オブジェクトのことを調べる、
フォームやレポートでの自動処理、といった命令があります。」、
「ステートメント
(こちらも命令の一種。
定型基本命令構文、という感じ。)
例えば、メニューバーやリボンで言うと、
「ファイル、ホーム、編集、表示、・・・」といった雰囲気の
共用の命令だったり、あるいは、OS寄りの命令だったり、
スタート・ストップ・繰り返し・呼び出し・などの、
基本構文的な共用命令・制御文だったり、です。
こちらも特定のオブジェクトに特化してはいません。共用です。
http://officetanaka.net/excel/vba/statement/index.htm 参照。)」
等々にて動かします。
このとき、
「オブジェクト」は、基本的には「メソッド」や「ステートメント」で動かし、
「文字列や数値」は、基本的には「関数」やこれまた「ステートメント」で動かします。
(基本的には、「関数」ではオブジェクトを動かせません。同様に、「メソッド」では文字列や数値を切ったり貼ったり具体計算したり、といったことはできません。「ステートメント」は公用的な感じで、「分岐や繰り返し・停止・始動・エラー発生時の分岐処理、変数設定、等々」といった感じの命令なので、両方に使えます。)
(大雑把なイメージとしては、「動かす対象」は「オブジェクト」か「文字列や数値」かのいずれか、というイメージです。)
そして各プログラムを自動実行させるタイミングについては、「イベント」を使います。
(「イベント」という、ある意味、最初から、「ある定められたタイミング」で実行させます。例えば、「ボタンを押した」「何かをダブルクリックした」「フォーカスを移動した」などのあらかじめ決められたタイミングです。「あらかじめ決められたタイミング」、には、エンドユーザーがマウスやキーボードで何かした「目に見える」タイミングや、ExcelやAccessが内部で黒子のように何かを自動動作させたときの「目には見えない内部的な」タイミングがあります。)
そういうプログラミング方式です。
・・・と、以前、ご説明させて頂きました。
前置き終わりです。
長すぎですみませんでした!
・・・というわけで今回は「メソッド」です。
「メソッド(method)」は直訳で「方法、方式」です。
「 (教授法・研究などの論理的で組織立った)方法,方式」ということですので、「林教授の作った”林メソッド””林メソード”」なんて使われ方をします。
そのほかに、「 (一定の)順序、筋道、秩序」とか、「規則正しさ、きちょうめん」なんて意味もあるようです。
ただ、VBAの場合、それだとイメージがつかめないので、次のように考えてみてください。
VBAプログラミングでの「メソッド」とは・・・・
「メソッドとは、結局のところ、”命令”の一種。」
「それは”オブジェクトを動かすため”の命令。逆に言うと、”オブジェクトを動かすこと””だけ”にしか使えない命令。」
「メソッドは文字列や数値を直接は扱えない(=動かせない=加工・操作・判定等々はできない)。それをしたければ”関数”でやる。」
「また、ある1つのオブジェクトに対して使えるメソッド(命令)は あらかじめ決められている。つまり、各オブジェクト毎に 使えるメソッドは限定されている。(プロパティ項目があらかじめ決められているのと同じように。1つのオブジェクトに対して全てのメソッドが使えるわけではない。)」
「メソッド は”オブジェクトを動かすため”の命令。かつ、”「ある特定の」オブジェクトを動かすこと””だけ”にしか使えない命令。」
「メソッドは特定のオブジェクトとだけ、紐付いた、特定の命令(特定の動作)」
「メソッドは、ある特定のオブジェクトにおいて、その ”オブジェクトが” できること、やれること・・・、できる動作、やれる動作・・・、とも言えるかも。」
・・・という感じです。
例えば「おいパソコンよ!車を黒色にして、時速30Kmで走らせろ。」という命令を実行した場合・・・、
・「オブジェクト」=車
・「プロパティ」= ”黒色にして、”と、”時速30Kmで、”
・「メソッド」= 走らせろ
ということになると思います。
(これをはじめに説明すればよかったですかね・・・。車は地面を走れるけど、飛行機ののように空を飛ぶことはできません。なので、メソッド=オブジェクトに対してあらかじめ決められた「やれること」「できること」「やれる動作」「できる動作」、と理解しても良いと思います。そしてその「あらかじめ決められた動作」が「組込み」の「命令」ともなっている・・・という感じです。そのオブジェクトにはそれしかできない、という感じです。なので、あるオブジェクトに対して「できない動き=決められてないメソッド」を指定すると、「そのメソッドはサポートされていません」というエラーになります。))
市販の解説書やWebページなどで、「メソッド」を「動作」とか「手続き」などと解説してくれていることがあります。
例えばIT用語辞典などだと次のように説明されています。
『メソッドとは、オブジェクト指向プログラミングにおいて、各オブジェクトが持っている自身に対する操作。オブジェクトは「データ」と「手続き」から成っているが、その「手続き」の部分に当たる。プログラミング言語によっては「メンバ関数」と呼ばれることもある。』
本来はそういう意味なので、そちらのほうが正しいのだと思いますが、ヘルプを読みこなすことを考えますと、「手続き」と訳すとヘルプの意味が通じなくなってしまうので、やっぱり、メソッドは「命令(特定のオブジェクト固有の命令)」と訳すほうが多分、初心者の方はヘルプが読みやすくなると思います。
なお、メソッドを「動作」と覚えたい場合は、
http://excelvba.pc-users.net/fol1/1_3.html を引用しますと、
『プロパティはオブジェクトの属性情報を設定する、メソッドはオブジェクトに動作を与えると憶えるとよいでしょう。 』
と書いてあるので、そういう風に覚えるほうがヘルプの読みこなしがしやすい方は、そのように覚えてみてください。
では、トンカチやキリ、自動車、などを使って、もう少しイメージしやすいようにご説明します。
(01)「トンカチ」というオブジェクトのメソッドについて
「トンカチ」の場合、例えばプロパティは次のようなものでした。
柄の長さ:20cm
柄の太さ:2cm
柄の材質:木材
柄の色:ベージュ
柄の形:直線
頭部の重さ:500g
頭部の形:釘抜きつき
頭部の色:黒
で、このようなトンカチで「やれること」といいますと・・・
・釘を打つ
・大まかに穴を空ける(薄い板や薄目な氷などを叩き割って)
・ダボ継ぎやほぞ継ぎを組むときに、凸部分と凹部分を優しくコンコンと叩いて結合させる
・金具などを叩いて適度に曲げる(曲線部分をつくるなど)
・シンバルやなべ、金管楽器の止め金具など、金属を叩いて平たく伸ばす。音を良くする。ヴィンテージにする。音に色を付ける。(肉を叩いて延ばすとかも可能?)
・形のあるものを粉々にする(小さくして捨てられるようにするとか、粉を作る、とか。)
・・・などなど・・・。
よって、「トンカチ」というオブジェクトには次のようなメソッド(命令の一種)を持たせておくと便利そうです。
a:釘を打つ(釘を打て)
b:穴を空ける(穴を開けろ)
c:継ぐ・結合する(つなげ、結合しろ、接合しろ)
d:延ばす(延ばせ)
e:粉状にする(粉状にしろ)
f:曲げる(曲げろ)
トンカチで、釘を打つ。
トンカチで、○○に、穴を空ける。
トンカチで、○○を延ばす。
トンカチで、○○と××を継ぐ。接合する。
・
・
・
非現実的ではありますが、パソコンがなんでもできると仮定して、そのパソコンに送る命令文にするとすれば、次のようになると思います。
パソコンよ、トンカチで、釘を打て。
パソコンよ、トンカチで、○○に、穴を空けろ。
パソコンよ、トンカチで、○○を延ばせ。
パソコンよ、トンカチで、○○と××を継げ。接合しろ。
というわけで、「あるオブジェクトに対して ”やらせる作業”を”あらかじめ決めたもの”」が「メソッド」・・・・という感じです。(無理のありすぎる強引な結論ですみません!)
なので、まあ、平たく言ってしまえば「命令」です。
(厳密には違うかもしれませんが。でもヘルプを読むときは、メソッドのことをそう思ってしまったほうが、かえってラクです。
特定のオブジェクトに対してあらかじめ決められた(用意された、適用された、関連付けられた、紐つけされた)「命令」が「メソッド」・・・という感じです。
なんとなくイメージできましたでしょうか?
なお、「命令」ではなく、前述したほうに「動作」と訳してもいいかもしれませんが、でもそれなら、「あらかじめ決められたそのオブジェクトが”できること・やれること”」「そのオブジェクトにやれること。」とか、もっと単純に「やれること」、という風な覚え方でもいいかもしれません。)
僕は、「命令」と大きく”ざくっと”解釈してしまうほうがヘルプが読みやすいので、原則的にはそう解釈してしまってます。
ただ、ケースバイケースで、「動作」と訳したり、「やれること」と訳したりもしてます。
「命令」ではなく、そういった別の訳にするほうが、ヘルプの文章の全体の意味が分かりやすくなるときは、勝手に意訳してヘルプを読んでいます。
参考になりますでしょうか?
そうだといいのですが。。。(^^)
もしダメだったらごめんなさい!!!
では次はキリの場合です。
(02)「キリ」というオブジェクトのメソッドについて
「キリ」の場合、例えばプロパティは次のようなものでした。
柄の長さ:20cm
柄の太さ:2cm
柄の材質:木材
柄の色:ベージュ
柄の形:直線
先端部の形(上方向から見た場合):四角形
先端部の根本の太さ:2mm
先端部の色:黒
先端部の長さ:3cm
先端部の材質:鋼
で、このようなキリで「やれること」といいますと・・・
・小さな穴を空ける(釘を打つ前、ネジを切る前の下穴を空けるなど)
・板金をつついてアート作品をつくる
・ひっかいて文字や図形を描く
・火で熱してプラスチックなどを切断する
・トンカチで叩いて、木を割る。
・トンカチで叩いて、木を削る
・・・などなど・・・。
よって、「キリ」というオブジェクトには次のようなメソッド(命令の一種)を持たせておくと便利そうです。
a:下穴を開ける(下穴を開けろ)
b:熱して切断する(熱して切断しろ)
c:図形を描く(図形を描け)
d:割る(割れ)
e:削る(削れ)
f:突起を作る(突起を作れ)
キリで、下穴を開ける。
キリで、○○を、熱して切断する。
キリで、○○に図形を描く。
キリで、○○を割る。
キリで、○○を削る。
・
・
・
非現実的ではありますが、パソコンがなんでもできると仮定して、そのパソコンに送る命令文にするとすれば、次のようになると思います。
パソコンよ、キリで、下穴を開けろ。
パソコンよ、キリで、○○を、熱して切断しろ。
パソコンよ、キリで、○○に図形を描け。
パソコンよ、キリで、○○を割れ。
パソコンよ、キリで、○○を削れ。
これがキリの「メソッド」、キリを使った命令文、です。
★VBAとはどんなプログラミング方式なのか?(with 「メソッド」)
VBAプログラミングは、
「オブジェクト」に、
「プロパティ」を与え、
「メソッド」 や「関数」、「ステートメント」にてオブジェクトを動かします。
そして各プログラムを自動実行させる「タイミング」については、「イベント」を使います。
そういうプログラミング方式です。
補足をつけて長ったらしく書いてしまいますと・・・
「オブジェクト(何らかの機能・黒子の機能の集合体・ユニット)」に、
「プロパティ」を与え(性質、特質、特性、状態、などを設定し)、
「メソッド(命令の一種)」 や
「関数
(こちらも命令の一種。
「命令群」という感じ)。
組み込み関数や自作関数があります。」、
「ステートメント
(こちらも命令の一種。
メニューバーやリボンの”ファイル、ホーム、編集、表示、・・・”に
出てくるような共用の命令だったり、OS寄りの命令だったり、
スタート・ストップ・繰り返し・呼び出し・などの、
基本構文用の共用命令だったり、です。
http://officetanaka.net/excel/vba/statement/index.htm 参照。)」
にてオブジェクトを動かします。
そして各プログラムを実行させるタイミングについては、「イベント」を使います。
(「イベント」という、ある意味、「ある定められたタイミング」で実行させます。)
そういうプログラミング方式です。
「メソッド(method)」の直訳は「方法、方式」ですが、たとえば「 (教授法・研究などの論理的で組織立った)方法・方式」という意味から、「林教授の作った”林メソッド””林メソード”」なんて使われ方をします。
ただ VBAプログラミングでの「メソッド」とは・・・・
▼「メソッドとは、結局のところ、”命令”の一種。」
▼「それは”オブジェクトを動かすため”の命令。逆に言うと、”オブジェクトを動かすこと””だけ”にしか使えない命令。」
▼「また、ある1つのオブジェクトに対して使えるメソッド(命令)は あらかじめ決められている。つまり、各オブジェクト毎に 使えるメソッドは限定されている。(プロパティ項目があらかじめ決められているのと同じように。1つのオブジェクトに対して全てのメソッドが使えるわけではない。)」
▼市販の解説書やWebページなどでは、「メソッド」を「動作」とか「手続き」などと解説してくれていることもがあります。なお、メソッドを「動作」と覚えたい場合は、
http://excelvba.pc-users.net/fol1/1_3.html を引用しますと、
『プロパティはオブジェクトの属性情報を設定する、メソッドはオブジェクトに動作を与えると憶えるとよいでしょう。 』
ウザイかもしれませんが、せかっくなんで、あと、「自動車」と「ATM」についても、ご一緒に考えてみたいと思います。
それでは、まずは「自動車」の「メソッド」から・・・
まず「自動車」の「メソッド」は例えば次の通りでした。
(01)「自動車」のプロパティ
タイヤの大きさ:直径70cm
タイヤの種類:ノーマル
ボディの色:黒
全長:2.5m
ドアの数:5ドア
エンジン排気量:1500cc
最高速度:200Km/H
直進可否:True(Yes)
後進可否:True(Yes)
雨防水可否:True(Yes)
水中運行:False(No)
少しこれにプロパティを追加します。
ヘッドライト有無:有り
ヘッドライト光量:たくさん
フォグライト有無:有り
形状:ワゴンタイプ
荷物室の長さ:2m
で、このような「自動車」で「やれること」といいますと・・・
・荷物を運ぶ、人を運ぶ(高速移動させる)。
・キャンピングカー替わりに寝泊まりする。
・
・
・
などですが、みなさんも何か考えてみてください。
ウザイかもしれませんが、せかっくなんで、あと、「自動車」についても、ご一緒に考えてみたいと思います。
それでは、まずは「自動車」の「メソッド」から・・・
まず「自動車」の「プロパティ」は例えば次の通りでした。
(01)「自動車」のプロパティ
タイヤの大きさ:直径70cm
タイヤの種類:ノーマル
ボディの色:黒
全長:2.5m
ドアの数:5ドア
エンジン排気量:1500cc
最高速度:200Km/H
直進可否:True(Yes)
後進可否:True(Yes)
雨防水可否:True(Yes)
水中運行:False(No)
少しこれにプロパティを追加します。
ヘッドライト有無:有り
ヘッドライト光量:たくさん
フォグライト有無:有り
形状:ワゴンタイプ
荷物室の長さ:2m
で、このような「自動車」で「やれること」といいますと・・・
・荷物を運ぶ、人を運ぶ(高速移動させる)。
・キャンピングカー替わりに寝泊まりする。
・
・
・
などですが、みなさんも何か考えてみてください。
これらのほかに何があるでしょうか?
・キャンプでライト代わりに使う
・霧の中で空いてに位置を知らせる
・木(その他)と車を結んで、木(その他)を倒す
・何か倒壊物などを押してどける
・ヘリコプターに知らせるような地上サインを描く
・冷房を効かせてお弁当など食品がが少しでも傷まないようにする
・オーディオを鳴らして、BGM演出をする
・道具や商材を載せて移動販売に使う
・機材を載せて移動ラジオ局として使う
・拡声器などを載せて宣伝カーとして使う
などができると思います。
となると・・・
どんな「あらかじめ設定した命令(メソッド)」を用意しておくと便利そうでしょうか?
次のような感じはどうでしょうか?
・(〇×を)運ぶ。(荷物を運ぶ、人を運ぶ(高速移動させる))
・人を宿泊させる。(キャンピングカー替わりに寝泊まりする。)
・ライティングする。(キャンプでライト代わりに使う)
・ライトで位置を知らせる。(霧の中で相手に位置を知らせる)
・(〇×を)倒す。(木(その他)と車を結んで、木(その他)を倒す)
・(〇×を)どける。(何か倒壊物などを押してどける)
・地上サインを描く。(ヘリコプターに知らせるような地上サインを描く)
・食品の20~25℃管理をする、(冷房を効かせてお弁当など食品がが少しでも傷まないようにする)
・BGM演出をする。(オーディオを鳴らして、BGM演出をする)
・移動販売をする。(道具や商材を載せて移動販売に使う)
・移動ラジオ局を開局する。(機材を載せて移動ラジオ局として使う)
・宣伝する。(拡声器などを載せて宣伝カーとして使う)
・(〇×を)削ったり粉々にしたりする。(車輪を何かを使ってつないで利用して、何かを削ったり粉々にしたりする)
という感じになりそうです。
また、命令、ということになると、
・(〇×を)運べ。
・人を宿泊させろ。
・ライティングしろ。
・クラクションやライトで位置を知らせろ。
・(〇×を)倒せ。
・(〇×を)どけろ。
・地上サインを描け。
・食品の20~25℃管理をしろ。
・BGMを鳴らせ。
・移動販売をしろ。
・移動ラジオ局を開局しろ。
・宣伝しろ。
・(〇×を)削ったり粉々にしたりしろ。
・・・・という感じになりますでしょうか?
もちろん、非現実的な命令ばかりですが、でも、こんな感じでメソッドというものをイメージしてくれたらいいかなあと思います。
みなさんも、車でできること、メソッドを考えてみてください。
次は、これまでのオブジェクト(トンカチ、キリ、車)には「できないこと」などを見てみたいと思います。
「できないこと」=メソッドにはならないこと
でもあります。
●「メソッド」にはなれない「命令」
「メソッド」は、ある「オブジェクト専用」の「命令」です。
「各オブジェクト」には、それぞれ「専門」の「仕事・やれること」が限られています。
なんでもかんでもできるわけではありません。
例えばトンカチやキリ、自動車は「飛ぶ」といったようなことはできません。
飛ぶ、というメソッド・命令を実行できるのは例えば飛行機やドローンなどです。
飛行機やドローンといった「オブジェクト」なら、「飛ぶ」「飛ばせろ」といったことをメソッドにできます。(メソッドとしてあらかじめ組み込んでおくことができます。)
トンカチに「飛べ」とか、「何かを飛ばせろ」という命令を指示しても、トンカチは動けません。
自動車も同様です。
それらのオブジェクトはエラーは発しませんが、「動けない」ことでエラーを発してること同じ意味合いです。
VBAプログラミングでも同じような感じです。
各オブジェクトには、あらかじめ機能が限定されており、1つのオブジェクトがなんでもかんでも命令をこなせるわけではありません。
あるオブジェクトに、そのオブジェクトとまったく無関係の命令(メソッド)を実行させようとしてもエラーが表示されてしまいます。
例えば、「Errオブジェクト」に、「画面を赤く塗る」なんてことはできません。
「Errオブジェクト」は、「エラーを検知してエラーメッセージを発したりするオブジェクト」なので、「何か色を付ける」といったことは本職ではないのです。
本職ではないというか、もともと無関係な仕事です。
・・・というわけで、各オブジェクトには、あらかじめ、「できること」が決められています。
あるオブジェクトでは使えるメソッド(命令)が、そのほかのオブジェクトでも使える、とは限りません。
「できない」ことを命令として書いた場合、「このオブジェクトはそのメッソドをサポートしていません」といった旨のエラーが出ます。
それは、「このオブジェクトにはもともと、あなたが今書いた命令(メソッド)を実行できるような機能は備え付けられていません。」という意味です。
もちろん、系統のよく似たオブジェクトが、同じメソッドを持つことは部分的にはありますが・・・。
以上のように、各オブジェクトには「できること」がきめられています。
それは、
「メソッド」にできること=メソッドとして組み込めること、は、あらかじめ制限されている。、
=なんでもかんでもどのオブジェクトも同じメソッド(命令)が使えるわけではない。、
ということですので、このことを知っておいてほしいと思います。
★関連記事
Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(巷では個々の細かい用語の説明ばかりで、意外と短くはまとめられていないこと)
Access2000VBA・Excel2000VBA独学~VBAプログラミングとはどんなプログラミング方式なのか?(簡易版)
=====================