★★★★★★★★★★★★Access2000VBA・Excel2000VBA独学~VBAが上達するかしないかの「何よりも重要な」最低条件・「唯一の」「ポイント」。4流以下の講師・市販書籍著者・ライター・編集者はこの「ポイント」「分かれ道」を絶対に教えてくれません。4流以下なので・・・。この「分かれ道」を知らなければExcelVBAは「100%上達しません」ので「やってもムダになってしまう」です。~
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
  
  
★ はじめに

まずこの記事をお読みのかたに謝罪をしたいと思います。

『この「分かれ道」を知らなければ100%ExcelVBAは上達しませんので「やってもムダになってしまう」』などとタイトルに書いてしまい、本当に申し訳ございません。

でも、ExcelVBAにおきましては、これは「真実」です。

今の日本には、『 本気記事のような「重要なポイント」を教えない 』・・・・、

・4流以下、の
・ひどい
・講師
・市販書籍著者
・ライター
・編集者

・・・・が『 あまりにも多すぎる 』ので、また、本当に残念なことに、『 むしろ逆に徐々に増えてきてしまってもいる 』ので、危機感を持っていまして、それでそのようにあえてタイトルに書いてしまいました。

本当に申し訳ございません。

ご気分を害された「初心者」「独学者」の方もいらっしゃると思いますが、どうかお許しください。

でも、そのような4流以下の・ひどい・講師・市販書籍著者・ライター・編集者、は、『 一人でも多く・淘汰されてほしい 』、ですし、『「日本の」、「データ管理の基礎の学習」の「ジャマでしかない」』と思いますので、どうかお許しを・・・。

『この「分かれ道」を知らなければ100%ExcelVBAは上達しませんので「やってもムダになってしまう」』などとタイトルに書いてしまいましたが、それは「初心者」や「独学者」の方々を馬鹿にして言っているのではありません。

逆に「悪いことは言わないからやめておいたほうがいい」という意味です。

理由は、「VBAを安易に推奨する人には ” コスト意識ゼロ ” の人が少なくない」からです。自分がVBAができるのをいいことに、「いい加減なことを教えて」、「VBAができる!すごいだろ!」という自慢をしたいだけの人もいます。

そのようなことも含めまして、もし「本記事に書いたような所まではやる気がない」ということでしたら、お金はともかく、「エラーが自力で解決できず」、「あなたの」「大切な」「時間」を「ドブに捨てる」ことが明白です。
特に「タイムイズマネーを標ぼうされている方には、耐え難いこと」、だと思います。

そういう悲しいことに「100%」、「間違いなく」、なってしまいます。

ですので、その場合はご自分ではやらずに、是非、学生さんなど、「安くやってくれる外注先」を探してください。

でないとVBAは、「エラーであなたのビジネスを邪魔するモノ」、に成り下がってしまいます。
逆に「VBAをやる」なら「本記事のことは絶対に、死んでもクリアしてください。」
本当に重要なことなので、何度でも言います。
でないと、本当に、VBAは、「エラーであなたのビジネスを邪魔するモノ」、に成り下がってしまいます。

その意味で、「注意喚起」の意味で、あえて厳しい言葉で、『この「分かれ道」を知らなければ100%ExcelVBAは上達しませんので「やってもムダになってしまう」』などとタイトルに書いてしまいました。

どうかお許しください。

そんななかで、オブジェクトモデルの階層構造の一覧図(Excel2000~2003のヘルプ内に掲載)と本記事のようなポイントを教えてくれない人間は、「100%」「間違いなく」「4流以下の・ひどい・講師・市販書籍著者・ライター・編集者」、あるいは、「他の何か」(それが何かはわかりませんが「ニセモノ系」のもの)に当てはまります。

ですので、「初心者」「独学者」の方々はどうか、お気をつけください。

便利ではある「絆創膏テクニック」は上手に教えてくれるので「自分が成長した気になる」かもしれませんが、「それは一時」だけで「すぐに行き詰る」と思います。

なぜなら、彼らは本記事のような、「重要なポイント」「分かれ道」を教えることや、「オブジェクト階層構造の全体の一覧図」などを教えることを「まったく」「全く」「しません」。
つまり、「プロだからこそ・あえて・初心者の方々にVBAを ” わかりやすく ” 教える」という「使命」から逃げまくっているのです。

彼らは、テキトーな「付け焼き刃」の「絆創膏テクニック」しか教えませんので、「彼らの教え方」では、「応用は絶対にききません。」

なので、「行き詰る」ことが「当然」なのです。

なので本当に、「初心者」「独学者」の方々はどうか、そのような4流以下の人間に「ひっかからないように」、お気をつけください。

  
  

★ VBAが上達するかしないかの「唯一の」最低条件・ポイント。

本記事に書いたことは初心者がまず「最初に」「目指す」、場所・位置・目標、です。
「ここからがExcelVBAの」「真の」「スタートライン」という、場所・位置・目標、です。

逆に、「これを理解できなければ、いつか大事故を起こす」とも思います。
もちろん、「上達」など「いつまでたっても」「できません。」

いつまでも「応用が利かない自分でもいい」「Q&Aサイトで質問して作ってもらえばいい」というスタンスで居て、それが現場で許されるなら、本記事は無視して、そういうことができる市販書籍やWebサイトのサンプルをコピペしていれば大丈夫です。
「マクロの記録」もしっかりと活用すれば相当なことができます。

でも、「応用が利く自分で居たい」「時間がない」「でも自分しかいない」「お金がない」「Q&Aサイトで作ってもらえないくなった」ということでしたら、本記事のことは必須です。

ちょっとしたプログラムを作って「お小遣い稼ぎしたい」、とか、「習ったお金をそのようなことで回収してタダ同然にしたい」という場合も、必須だと思います。

  
  
ではまず結論からお話ししたいと思います。

ExcelVBAは、「最低限」、以下の(01)と(02)の2つのことができないと、100%、上達しません。
これがまず、「結論」です。

理由は、「プロパティもメソッドも(01)(02)のようなものと似た動きをするから」です。

なので、基本、(01)(02)ができない人は、自力でのエラー解決、なんて夢のまた夢だし、Q&Aサイトで質問したところで、回答者のくれた回答の意味すら理解できません。

そういう人達は、間違いなく、例外なく、100%、以降の(01)、(02)ができず、それ以降の(03)以降のことも当然、理解できていません。

逆に(01)(02)ができて(03)以降もできる・わかる・素直に学ぼうとする人は、「ある地点から爆発的に伸び」ます。

結果、Web記事なども多くがスラスラわかるようになり、自作のオブジェクト(クラスモジュールのプロシージャその他)などの作成も割とすんなりと入って行けると思います。

これも理由は、「プロパティもメソッドも(01)(02)のようなものと似た動きをするから」です。

ですのでどうか、以下のことを学んでみてください。

わからなければ先輩や先生に「何百回でも、「わかるまで」聞いてください。

(01)オブジェクトを返す自作関数が作れること。

(02)以下のような色々なタイプの自作関数の違いが分かり・作れる。

(a)何らかの値の設定だけをして何も返さない自作関数(オブジェクトのに対する何らかの値の設定やプログラムに関する何らかの値の設定)
(b)何らかの値の設定をすると同時に、何らかの値を返す自作関数(設定された値と返された値に関連性があるケース・無いケースともに)
(c)値の設定をせずに、値の加工だけをして、それをする自作関数
(d)
(e)
(f)
(g)
(h)
(i)
(j)
(k)

()プロパティもメソッドも前述の自作関数と同じような動きをする、ということの理解
名前付き引数などが扱える
「何らかの動作をしながら・同時に・オブジェクトをも返す関数」を扱う上でカッコをつけるつけないの意味の違いが分かる
Callのとき、
動くだけ、と、オブジェクトも同時に返す。

プロパティ・メソッド・関数などが「オブジェクトを返す」ということと、「オブジェクトの取得」とはとても深い関係があり、結局『 プロパティ・メソッド・関数などが「オブジェクトを返す」ということが分からないと』、「オブジェクトの取得」のことも理解できないかもしれません。
オブジェクトを返す=ユーザーになりかわって、オブジェクト(ミニミニロボット)を1個取ってきてくれて、ユーザーに投げ返してくれる

オブジェクトの取得。=投げ返してもらったオブジェクトを受け取る=オブジェクト変数に代入したり、そのまま使ったりする。オブジェクト変数に代入することを覚えるほうがその後の上達が早くなる。(オブジェクト変数に代入しないプログラムよりも、さらに汎用化されたプログラムを作れるようになるので)

※補足:「返す」とは?
「値を返してくれる関数」の場合は、「計算して答えを出してくれる」とか、「計算後の答えを投げ返してくれる」、あるいは、「加工した数値や文字列や日付などを投げ返してくれる」という意味です。「文字ベースの値を投げ返してくれる」、という意味です。
「オブジェクトを返してくれる関数」の場合は、「(指定した)操作対象としたいオブジェクトを1つだけ選択してくれて、取りに行ってきてくれて、僕らユーザー側に投げ返してくれる」という意味です。3D的な「部品」「パーツ」「ミニミニロボット」を投げ返してくれる、という意味です。

  
  
  
  
★ 以上を実行するために、以下のことを理解することが必要です。(優先順位順)

(03)プログラミングとは、どんな言語であっても『「変数」と呼ばれるものを動かして(操作して)自動化をする作業のこと』、で、それはVBAでも変わらない、ということを理解する

なので「変数」の理解を「テキトー」にしてしまうととハマる。(例えば「変数の型なんて全部バリアント型でいい」とか。)

これは、SEになるわけじゃなくても、ビジネスパーソンがちょっとしたプログラムを組むのでも、ハマる。

初心者のうちは何時間も、何日も解決できずにハマる。笑えるくらい、ハマる。
しょーもないくだらないことで。
そうなってしまうのは、エンドユーザーや初心者・独学者には何の罪もなく、巷に溢れている「4流以下の講師、4流以下の市販書籍著者、4流以下のライター、4流以下の編集者」のせい。
VBAのレジェンドさんでも自著や自サイトで「4流以下の教え方」をしているケースが意外にも少なくありません。

(04)「配列」の仕組みを必ず理解する。
「コレクションオブジェクト」の仕組みを学ぶときに「配列」の仕組みが似ているので理解しやすいです。
「配列」と「Variant型」の変数を組み合わせて使うことで、表データなどを、高速にシート上に転記したり・操作したり、、一括でシート上に転記したり・操作したりができるため。

(05)VBAプログラミングの操作には、大きく分けて「値=一般データ=文字ベースのデータ」の操作と、「オブジェクト(Excelという工場で働くミニミニロボットたち)」の操作の2種類しかない。

※他の、例えば「オブジェクト指向の言語」と呼ばれるプログラミング言語も大抵そんな感じみたいです。
ただ、VBA自体は「オブジェクト指向もどき」であって、ちゃんとした「オブジェクト指向のプログラミング言語ではないそうです。

(06)値(一般データ)の操作の場合は、「一般変数」に生データを代入して操作します。オブジェクト操作の場合は、「オブジェクト変数」に生データを代入して操作します。

(07)「値(一般データ)の操作」の場合、生データは「文字ベース」のデータ。

「値」
=一般データ
=文字ベースのデータ
の「生データ」には、文字列、数値、日付データ、trueとfalseの2値=論理値、などがあります。

(08)「オブジェクト操作」の場合の「生データ」に相当するものは、「オブジェクト式」の、しかも「階層構造を省略してないヤツ」。

「オブジェクト」の場合は、一般データのような生データは無いが、「生データ」に相当するものがある。
それは「オブジェクト式」と呼ばれるもので、しかも「階層構造を省略してないヤツ」のことをさします。

(09)「階層構造を省略していないヤツ」、の意味とその「重要性」が分からないうちは、VBAのことを、100%、例外なく、理解できません。

逆にオブジェクトの階層構造のことを学ぶ気が無いなら、嫌味じゃなくてマジで、悪いことは言いませんので、VBAの勉強なんか今すぐにやめてください。
どこかの先生に有料レッスンを受けていたとしも、それでも100%、「上達しません」。
断言します。絶対に「応用がききません」。
エラーも全然・自力で解決できません。

ぜひ学生さんなどの安い外注先を見つけてください。
絶対にそのほうがコスパアップできます。「システム構築」で無ければ、安い学生さんでも十分やれます。
自分でやろうとしたところで、「あっちゅうま」に挫折して、レッスン料のみならず「大切な」「時間」を「ドブに捨てる」だけです。

さらに逆に、「絶対に中級以上になって習った分・独学した分のお金と時間を回収したる!」という意気込みのある方は、絶対にオブジェクトの階層構造の勉強をしてください。

以上は、(03)以降に書かれていることに対しては、「全て同じ」と理解してください。

※「4流以下の」著者、講師、ライター、編集者は、階層構造を省略したオブジェクト式しか教えません。但し書きも入れないので騙されないようにご注意ください。

(10)「オブジェクト=単一オブジェクト」、「コレクション=コレクションオブジェクト」という風に「敢えて意識して」分けて考える。特に、「オブジェクト=単一オブジェクト」という風に「単一」という言葉を付けて考えることが重要。Excelヘルプもそう書いているので。
なお、「オブジェクト=単一オブジェクト」も、「コレクション=コレクションオブジェクト」も、「同じフロアに居る同居人」というイメージで「親子関係は無い」と「あえて考えてしまう」ほうが、色々と都合がいい。(実際にはそうじゃなかったり、例外があったとしても、初心者のうちは、「ほとんどはそうだ、とあえて考えてしまう」、という意味です。より上達したら、もっと深く学んでいけばOKかと思います。そういう基礎を深く追求すると、思った以上に短期間にVBAが上達し、Web記事のほとんどがすらすら分かるようになります。)

(11)オブジェクトモデルの一覧図の重要性を理解している。意味がわかっていてオブジェクト式を書く時やヘルプを読む時に利用できる

(12)オブジェクトには「単一オブジェクト」と「コレクションオブジェクト」があるということを理解している。

(13)

(14)プロパティもメソッドもイベントも「特定のオブジェクト」に保持・所有・内包される、かつ、そのオブジェクトだけに紐ついている(=他のオブジェクトには使えない)「機能」あるいは「命令の一種」という理解ができていること。

(15)ヘルプが自力で読める

(16)オブジェクトブラウザの利用意義が分かる
ついでに、イミディエイトウィンドウ、ローカルウィンドウ、ウィッチ式、「TypeName関数+Parentプロパティ」、などの利用意義も。

(17)上位の単一オブジェクトを捕まえたり(取得・ゲットしたり)、下位のオブジェクトを捕まえたりができる。ヘルプやオブジェクトブラウザを使ってその方法を自力で調べられる

(18)Excel自身がおこなっている「マクロ」の定義と、その呼び出し方法(呼び出せる場面)を理解する

===============