★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0009:「オブジェクトブラウザ」の使用目的・使用意義
バックナンバー目次ページは→こちらです。
まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
Vol.0009
タイトル:「オブジェクトブラウザ」の使用目的・使用意義
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
「オブジェクトブラウザ」の使用目的・使用意義については、以下の(01)以降のようなことがあります。
でも実際にはもっともっとたくさんあると思います。
ご自分の中に、ここに書いた以外の内容が増えれば増えるほど、上達が早まると思います。
逆に、このなかの一つでも意味が分からない場合は、残念ながら上達は難しいと思います。
残念ながら空き時間が無くてここまで理解できそうもない方、どうしても理解できない方、は、自分のできるレベルのVBA作成だけをやって、あとは、それ以上のことは、「あきらめて」、誰か安くやってくれる人に、VBAを頼む方が絶対に良いです。(クラウドワークスやランサーズ、近所の学生さんや個人事業主の人など)
そのほうがかえってコスパが良くなります。
ご自分の「大切な時間」を無駄なエラー処理に奪われることほど、愚かな、そして「究極のロス・コスパ最悪」になることは無いと思います。
※下記のリンクへジャンプした後は、Shift+TABキー、を押すと、ここ付近に戻れます。
(01)どのオブジェクトにどんなプロパティやメソッド、イベントなどが含まれているかを一覧し、その一覧から、ヘルプをすぐに呼び出す。
(04)同名のプロパティやメソッドの親オブジェクトに別のものがないか?間違ってないか?を調べることができます。
(05)プロパティやメソッドが何を返してくれるのかを調べる。
(09)Excel固有のオブジェクトか、Office共通のオブジェクトか、ADOのものなのか、DAOのものなのか、などがヘルプよりも明確にわかりやすい。
(10)階層構造一覧図と併用することで、より、オブジェクトへの理解が深まる
※上記のリンクへジャンプした後は、Shift+TABキー、を押すと、ここ付近に戻れます。
ひとまず以上ですが、多分、本当にこの倍以上はあると思います。
ご自分でも色々と使ってみて、メリットを探してみてください。
では以降、少し、補足説明をさせていただきます。
========================
★ 各項目の若干の補足
(01)どのオブジェクトにどんなプロパティやメソッド、イベントなどが含まれているかを一覧し、その一覧から、ヘルプをすぐに呼び出す。
階層構造のイメージ補助などに役立ちます。
(02)あるオブジェクトの「下位のオブジェクトには何があるか」を調べることができます。また、「値やオブジェクトが返ってくるのかこないのか?」「返ってくるならどんな型の何が返ってくるのか?」を調べることができます。
右側の「メンバー」のペインで、↓↑キーで行き来すると、「AS ×××」と出るプロパティやメソッドのうち、「×××」のところがグリーンの下線リンクになっているものは、そのほとんどが、「1階層下位のオブジェクトを取得できるプロパティやメソッド」か「列挙(Enum)」などだとわかります。(中には上位のものを取得できたり、上位下位とは関係のないもの・・・でもオブジェクトを取得できるものもあります。)
そこから、「下位のオブジェクトには何があるか」が、完全ではないものの、おおむね、わかります。(グリーンの太文字リンクには列挙などもあるので)
「AS ×××」と出ないものに関してはそれが「メソッド」の場合は、ヘルプを読まないとわからないときがあるので、F1キーを押してヘルプをくまなく読み、「返ってくる値やオブジェクトがあるのかどうか?」や「もし返ってくるならどんな型が何なのか?」などを調べます。(例えば後述の「Inputbox」など。また、「値」には「列挙(定数の集まり)」も含まれます。定数=組込の各種設定値、と思ってください。)
「AS ×××」と出るものでも、ヘルプを読まないと「ハマる」ときが結構あるので、良んでおいたほうが無難です。それからWeb検索すると、「Web記事の記述ミスの発見」や「誤解誘発記述の発見」、「情報の種々選択の速度アップ」が本当に少しずつ、ですが、できるようになっていきます。
ヘルプのオブジェクトメンバーの一覧でもなんとなくわかりますが、こちらで↓↑キーで行き来すると、特に「戻り値」については、ある程度は明確で結構わかりやすいです。
ヘルプの「オブジェクトメンバー」の一覧と併用するのがいいと思います。
(※注意これは2013以降ではできないかもしれません。ヘルプがWebになってから、「オブジェクトメンバーの一覧」の質と、ヘルプの動きの質が落ちたので・・・。マイクロソフトという会社は本当に愚かだと思います。意味が分かりません。MicrosoftQueryもそうですが、本当に良いものをどんどん「自らの手で」「改悪」してしまいます。自分たちの作ったものが優れているとわからないのでしょうか?自負は無いのでしょうか?本当にやる気のなさを感じます。ExcelVBAの「基礎」を学ぶなら、Excel2010や2003のほうが2013以降よりは「かなり」「イイ」です。2010や2003は中古市場でも安価なので真面目に学習したいならご購入をおススメします。まともなヘルプがあるだけでも、数万円の価値はあります。)
ヘルプの「オブジェクトメンバー」の一覧と併用すると、「何ができるか」もわかり、より、色んな理解が深まります。
基本、「メンバー」のペインを、↓↑キーで行き来すると、
「値やオブジェクトが返ってくるのかこないのか?」と
「返ってくるならどんな型の何が返ってくるのか?」も、
「まず最初に調べる・知る」ことができます。
それをする・それができることが、VBA上達はもちろん、「エラー回避」の早道です。
というか、基本です。
「AS ×××」が説明ペインに無かったら、F1でヘルプを見て、返ってくるモノがあるかないかや、あるならどんな型かを調べます。
たとえば「Inputbox」なら、「AS ×××」が説明ペインに出ないので、F1でヘルプを読むと、「Type : バリアント型 (Variant) : 返されるデータの型を指定します。この引数を省略すると、ダイアログ ボックスは文字列 (テキスト) を返します。 」と出てきます。
これは、もし返る値のデータ型を何も指定しなければ、例えば数字が返ってきてもそれは「文字列型」の数字で、「計算のできない」もの、です。
「数値」ではなく「数字」です。
なのでこのとき、その「単なる数字」を「計算のできる」「数値だ」と「勘違い・思い込み・決めつけ」をしていると、エラーを起こすことがあります。
Variant型に代入しても「文字列」に内部変換されますし。(VBAは文字列型のデータでも、場合によっては計算ができてしまうことがあるのでタチが悪いです。Variant型という型が「隠れみの」になってしまうので。その場合、エラーの原因がさらに掴みづらいからタチが悪いです。)
そういうことを、オブジェクトブラウザやヘルプを使うことで、「返る値の型」を調べられるので、回避できる、場合もある、というわけです。
「Msgbox」なら、「As VbMsgBoxResult」と、グリーンの太文字で出るので、そこを押してリンク先に飛ぶと説明ペインに「Enum ×××」と出るので、「ああ、オブジェクトじゃなくて列挙が返ってくるんだな」とわかります。
そしてそのリンク先のメンバのペインで「vbAbort」をクリックすると、説明ペインに「Const vbAbort = 3」と出るので、「ああ、一般データのうちの数値側のデータが定数として返ってくるんだな」ということがわかります。
「vbAbort は 3 という数値 なんだ」ということもわかります。
「vbAbort」で完全一致で検索すれば、出てきますので。
ちなみにですが、2010のヘルプだと「vbAbort 」で検索すると、「MsgBox 関数の定数」というリンクが出てきて、MsgBoxで使う引数や戻り値の一覧が出てきます。もちろん、「MsgBox 関数」のヘルプも出てくるので、そちらにもその一覧は書かれているので、この場合はどちらを見ても良いのですが・・・。(たまに同じ名前で違う種類の命令の場合があるのでその場合はどちらを読むべきか、注意が必要です。なお、その場合には、オブジェクトの階層構造などが理解できないと、区別がつきません)
また、返ってくるモノが(下位か上位かはたまた別のものかはすぐにはヘルプを読まないとわかりませんが、)「とにかくオブジェクトだ」ということが分かれば、それを「オブジェクト変数に代入できる」ということも確実となります。
「返ってくるモノが」、「オブジェクトかどうかだけをまずはチェックしたい」という時にもスピーディに検索してチェックできます。
また、そもそも「返ってくるものがある・ない」がわからないと、プログラムを書いても「エラー」になることが多いです。
そしてさらにそもそもですが、「返ってくる」とか、「返り値(=戻り値)」、の意味・感覚が分からなかったら、本当に良くない言い方ですみませんが、「もう本当に目もあてられません」みたいなことになってしまいます。
「今現状以上は」「何ひとつとして・理解できない・・・・」という状況に陥ってしまいます。
なので、プロパティやメソッド、各種関数、誰かの作った関数、(ひいては演算子なども)、といった「言わば命令たち」を扱うときは、まず最初に「そもそも返ってくるモノがあるのかないのか?」「で、もし、返ってくるとするなら、それは値(一般文字系データ)なのかそれともオブジェクトなのか?」をチェックする必要があります。
これは、以前の号にも書きましたが、「VBAの命令の7割以上(多分9割近く)」が「値またはオブジェクトがデータとして返ってくる」ので、本当に、マジで、重要なことです。
特に「メソッドと各種の関数」、あと、もしかしたら「演算子」も??。
(思いもよらないものが返ってくることがあるので。=エラーの原因・誘発剤が返ってくることがあるので。)
もちろん、「プロパティも」、ですが・・・。
その後、「返ってくるなら何が返ってくるのか?」をチェックしておきます。(これも、思いもよらないものが返ってくることがあるので。=エラーの原因・誘発剤が返ってくることがあるので。)
そして、VBAだけではないと思うんですが、プログラミングはどんな言語であっても、『 変数や生オブジェクトの「型」と「型」をつないでいく・・・ リレーしていく・・・・間違えないように・・・』、という場面・作業が多いです。
言い換えると、「各種の命令から返ってくるモノ」の「型」が明確にわかっていないと、「正しく間違わずに横道に逸れずに ” 型 ” をつないでいく・リレーしていく」ということが「できなくなる」ため、これまたエラーの原因になります。
これも「メソッドメソッドと組み込み関数、プロパティも」、「同様」です。
それらを最初に教えてくれない講師や市販書籍が多すぎるので、「エラーが出てからでいいよ」みたいな、超いい加減な教え方ばっかりになってしまい、結果、私たち初心者・独学者は、逆に、エラーが出てから右往左往することになってしまいます。
さらには、エラーの解決方法がわかりません。
「型がおかしいからエラーになっている」ということにすら気づけなかったり、気づけても・どう対処したらいいかの「あたりすらつけられない」という状況に追い込まれてしまいます。
また、Webのサンプルコードも当然、「チンプンカンプン」で「読めません」。
Q&Aサイトで回答してもらったVBAコードも、同様です。
聞いたはいいけど、「チンプンカンプン」で「読めません」。
繰り返しますが、VBAに限らず、どんなプログラム言語でも、変数の「型」と「型」を常に同じにして「繋いでいく=リレーしていく」という側面があります。
そこから逸脱すれば当然エラーになります。
そして、『 変数の「型」と「型」を常に同じにして「繋いでいく=リレーしていく」という作業 』から、「もし」「逃げた」とすれば、「それはもはやプログラミングではない」、とも言えるとも思います。
正直言いますと、こんな低レベルなことを書かないといけないのは、数あるプログラミング言語の中で、ExcelVBA教育業界だけだと思います。(「変数の型宣言なんか全部Variantでいい」というメチャクチャな講師・書籍が、他のプログラミング言語の講師さんや書籍よりも多すぎるので。)
真剣に考えてくださいよ?
変数の型の使い分け「すら」をする意欲「すら」ない人=そんなレベルのことすら拒否する人=文章の読めない人・文章を読みたくない人が、
のちのち、中級になど上がれると思いますか?
のちのち、自分の思うプログラムが書けると思いますか?
のちのち、エラーが自力で解決できるようになると思いますか?
甘やかすのもいいかげんにしたほうが初心者のためではないですか?
プログラミング・・・、どんな言語でも「決して簡単ではない」のが「現実」なんですから、「いいかげん」「カンタン・簡単」「挫折しない」と「騙す」のは、初心者を「カモる」のはやめませんか?講師や出版社の人たち。
避けて通れないものは避けて通れないんですよ?
なら、初心者にもすぐにわかるように、講師や著者ががんばる・準備を怠らない・「以外」、ないんじゃないですか?
講師や著者が「初心者の方がたにちゃんと寄り添う」「以外」ないんじゃないですか?
もちろん、初心者本を書いたとしても、そこで、
「本書の中だけです。ややこしくなるから変数を全部Variant型にしてしまったり、Rangeから書き始めたりしますが、これはサンプル用限定の「もっともダメな書き方」ですから、本番では絶対にやらないでください。また、本書を学習後は、必ず、オブジェクト変数の学習と値やオブジェクトを返す自作関数の学習はかならずおこなってください。」
と但し書きを絶対に書くべきです。
そういうことを、是非、今一度、考え直してほしいと思います。
教える側も習う側も。
(03)イミディエイトウィンドウでのTypeName関数+Parentプロパティ・あるいはローカルウィンドウとともに、「上位のオブジェクトそのメンバーには何があるか」を調べることで、階層構造やその他の事の理解をより深めることができる。
(04)同名のプロパティやメソッドの親オブジェクトに別のものがないか?間違ってないか?を調べることができます。
例えばですが、ExcelVBAには、同名のプロパティやメソッドがあります。
特に、同名のプロパティが多いでしょうか?
でも、同名のプロパティやメソッド等は、「親オブジェクト」が変わると、まったく意味の違うものになることがあります。
例えば
「Worksheet.Range プロパティ」
「Shapes.Range プロパティ」
「Range.Range プロパティ」
などです。
同じ「Range プロパティ」でも、それぞれ、まったく意味合いが異なります。
また、意味合い的に似ていたとしても、「似ているだけでまったく同じではない」ので、「名前が同じなんだから・使い方もまったく同じだろう」と勝手に「決めつけている」と、エラーに見舞われます。
そして、「決めつけている」がゆえに、ヘルプを読もうともしないため、エラーが解決できません。
結果、本来は『 ヘルプやオブジェクトブラウザが読めれば数分で解決するエラー 』なのに、3日も4日も悩む羽目になってしまいます。
Webを検索すれば何かが分かるだろうと思って。
でもWebには書いてありません。
また、ヘルプを検索した時に、プロパティ名やメソッド名で検索すると、親オブジェクトが自分の目的と違うモノが、検索結果の先頭にヒットしてしまうことがあります。
そのようなとき、先に、オブジェクトブラウザで親オブジェクトを(自分の目的と合致するかどうか)確認しておいてから、F1キーでヘルプを表示すると、スムーズに調べられることが多いです。
というわけで、
「同名のプロパティやメソッドの親オブジェクトに別のものがないか?」を調べことができると、
たとえば・・・、
▼ 今操作しているプロパティ等が本当に今の自分の目的に合っているものか?
▼ 「同じ名前だから使い方も同じ」と勝手に決めつけてしまい、
使い方が間違っていないか?
▼ 「省略された書き方の場合」に落とし穴(エラーが誤動作の原因)がないか?
(オブジェクト式その他)
・・・等々を調べることできます。
(05)プロパティやメソッドが何を返してくれるのかを調べる。
返ってくるものがオブジェクトならオブジェクト変数に代入できます。
「返ってくるものがオブジェクトかどうか?」は、説明ペインで「AS ×××」を見ればわかります。
「×××」の部分がグリーンの下線リンクになっていれば、「オブジェクトか列挙(定数の集まり)などが返ってくる」と判断できます。
それがオブジェクトか列挙か?を判断するには、その下線リンクをクリックして、クリックした直後の説明ペインを見ます。
「Class ×××・・・・」で始まっていれば「オブジェクト」で、
「Enum ×××・・・・」で始まっていれば「列挙(定数の集まり)」です。
また、「AS ×××」にて、「×××」の部分がリンクの下線がない普通の文字なら、「文字ベースのデータ(数値、文字列、日付など)が返ってくる」と判断できます。
※列挙(Enum)に含まれる「定数」は、数値や「vb××××」の形で返ってきます。「文字ベースのデータの仲間」と思って頂いてOKです。
基本、「返ってくるものがどんなタイプ(型)のデータか?」がわかれば、エラーの原因調査にも使えることが多いです。
ヘルプもF1キーですぐに連動起動できるので、詳細調査にもいいです。(特に2010以前のヘルプ)
なので、エラーが出たら、オブジェクトブラウザやヘルプで「かえってくる値やオブジェクトがあるのかどうか?」「もしあるなら、それがどんな型の何なのか?」をまず最初にチェックします。(「値」には「列挙(定数の集まり)」も含まれます。)
それからでないと、エラーの原因をひとつひとつ潰していけません。
ひどいと、
オブジェクトブラウザやヘルプで調べれば3分で解決するエラーを、
「Webなんかで調べる必要なんてまるでないのに」いちいちWeb検索・・・。
検索にヒットした内容も基本がわかってなければ意味が分からないのにWeb検索・・・。
そしてさらに迷い、さらにドツボにはまってしまい、
挙句の果てに、3分で解決できるエラーなのに、最悪、3日も、4日も、時にはQ&Aで聞く羽目になってしまう・・・
という「ムダ」をおかして、悩む羽目になってしまいます。
(もちろん、僕自身も経験してきたことです。本当に書籍著者の教え方がいい加減なので苦労しました。)
「Item」で「完全に一致する単語だけを検索」すると、コレクションがずらずらっと出てきます。「Item」にはプロパティとメソッドがあります。
「Item」がプロパティなのかメソッドなのかを知りたいときがもしあれば、便利です。
あと、プロパティだとばかり思っていたものが、実はメソッドだった、というのも、たまに、オブジェクトブラウザで気づくこともあります。例えば「Worksheet.PivotTables メソッド」。
てっきりプロパティかと思ってたら、実はメソッドだった・・・みたいな。
こういうことも、エラーに関係することが「無いではない」ので注意が必要です。
もちろんヘルプにも書いてあるわけなんですが、「プロパティ」と「思い込んでしまっている」ため「ヘルプを探そうともせず」、結果、ヘルプからは気づきにくいです。
これは「イミディエイトウィンドウ」でのことです。
しかも、
「それが意外と」
「小さくない」。
です。
ひいてはその結果、色んな知識・学び、とが合わされば、例えば、雑誌記事やWeb記事、市販書籍、が「いいかげんなことを書いている」とか、「この講師いい加減すぎる」「あなたのようないい加減な人がそうやってテキトーなこと書くから、僕ら学習者が本来せんでもいいミスをさせられるんだろ?いいかげんにしろ!」ということも、だんだんと判断が付くようになります。
↓こちらもご参考に!
↑PDFなのでマウスホイールをCtrlキーを押しながら回すと拡大できます。
(09)Excel固有のオブジェクトか、Office共通のオブジェクトか、ADOのものなのか、DAOのものなのか、などがヘルプよりも明確にわかりやすい。
↓こちらもご参考に!!
↑PDFなのでマウスホイールをCtrlキーを押しながら回すと拡大できます。
(10)階層構造一覧図と併用することで、より、オブジェクトへの理解が深まる
★Access2000VBA・Excel2000VBA独学~今・選択されてる or 指定したオブジェクトの省略の無い階層構造をさっと調べる自作関数 ~イミディエイトウィンドウで使う自作関数 ★ ~Current無省略オブジェクト式記述02~
や
Access2000VBA・Excel2000VBA独学~「オブジェクト式」とは?:「オブジェクト式」と「部分オブジェクト式」 ★ ~Current無省略オブジェクト式記述~
の関数なども併用しながら階層構造一覧図(オブジェクトモデル一覧図)のことを学んでみてください。
==============================
今回は以上です。
==========================================================================
バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01
----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------