★★★★★★★★★★★★★★★★Access2000VBA・Excel2000VBA独学~★超重要!!「いつまでたってもVBAが上達しない理由」。5個以上。でもそれは全部「巷に増えてきた4流以下の講師たち・市販書籍著者・ライター・編集者」のせいで、習う側・独学する側はちっとも悪くありません。~ExcelVBA独学のコツ?ポイント?~とりあえず20個くらい~
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
  
  
僕も1年くらい前からExcrelVBAを独学し始めたところで、初心者ですが、ExcelVBA独学のコツ?ポイント?は、どうやら 以降に挙げた(01)~(19)のような感じっぽいです。

ただし、僕はまだExcelVBAを独学しはじめたところで初心者だから、テキトーに書いてます。
間違ってるところもあると思うので、全部うのみにはしないでご自分でも調べてください。

なお、今 ExcelVBAをどこかの教室で習いたいと思っている方には、習う前に、講師さんに是非一度、「私のようなド素人にも、分かりやすく、オブジェクト変数やオブジェクトブラウザの意義、使い方、ヘルプの読み方を教えてくれますか?」と質問してみてください。

そう聞いたとき、「いや、まだ早いから」「おいおいね」と言い出す講師は、基本、「4流以下」です。

「初心者にだからこそ、難しそうで重要なことを、初心者にでも分かりやすく教える」という「準備」を「ひとっつも・これっぽちも」「していません」。
「金返せ」と言ってもいいくらいの低レベルな講師です。
習わないほうがいいと思います。

特に、「あなたの授業の中に、オブジェクト変数やオブジェクトブラウザの意義、使い方、ヘルプの読み方・ヘルプ用語・および ” ヘルプやオブジェクトブラウザを読む・使う練習 ” などについての授業が、最低でも10時間(600分)以上ありますか?」と聞いて、「ない」と回答されたら、もうそれは「6流以下」、で、「職場において、 ” ちょっとExcelができるだけ ” の、データ管理の基礎もシステムの組み方の基本も知らない人」、と同じレベルです。

時給500円行くか行かないかくらいのレベルではないでしょうか。(その料金以内ならまあ、一応、納得です。)

僕ならそんな最低な講師からは死んでも教わりません。

(っていうか、もう、すでに、その辺は自分なりに調べたので、多分、ほぼ教えてもらう必要がありませんが・・・。なのでこの記事を書いています。)

※参考記事
★★★ Access2000VBA・Excel2000VBA独学~習う人間の側から見た、「生徒さんや独学する人の成長を邪魔してくる」、4流以下のExcelVBA講師、4流以下のExcelVBA市販書籍著者、4流以下のライター、4流以下の編集者の特徴~もちろん僕はもっとバカでカス・クズだけど、この人たちも相当「程度」が「低い」。「日本のデータ管理を10年は遅らせてきた」人たち~
★★★Access2000VBA・Excel2000VBA独学~上達を早める一番最初の条件:4流以下の講師たちを信用しない。4流以下の市販書籍やWeb記事に騙されない。コンピュータやExcel・ついでに自分も・を信用しすぎない。~小数計算での挙動の調査とイミディエイトウィンドウ、ローカルウィンドウ、ウォッチウィンドウの使い方を勉強しておく。理由は、現実には「そんなこと起こるはずがない」が起こるから。実際に自分でプログラムを作って仕事に利用してみればそれがウソかホントかわかります。~
  
  
逆に、「お!いいよ!?いいねぇ~!!やる気マンマンだね。今すぐやる?!とりあえず、オブジェクトモデルの一覧図からだね。」と一覧図をその場で提示してくれて、「何をどう順序立てて教えたら初心者にも分かるか」を準備している先生はアタリです。

特に、「Excel2000のヘルプに載っているようなオブジェクトモデルの階層構造の一覧図」を「その場で」「さっと」「直ちに」提示してくれる先生はアタリだと思います。

「初心者にだからこそ、難しそうで重要なことを、初心者にでも分かりやすく教える」という「準備」から「逃げない」先生だという証明なので、恐らく面倒見も良いと推測できます。
お金を払う価値があります。
  
  
では以降、ExcelVBA独学・上達のコツ?ポイント?を僕なりの答えですけど、ご提示します。(ご自分でもこういうの、作ってくださいね?)

このなかに、もしかしたら、みなさんが「上達できない理由」、もあるかもしれません。
(多くの方が、少なくとも、最低3個はあると思います。)

逆に言うと、以下のことは全部、「講師・先生・先輩・同僚」に、「わかるまで」「何百回でも」質問して、わかるようにならなければならないこと・・・でもあると思います。

いうなれば「脱・初心者」のための、「本当のポイント」・・・、のうちのひとつ(=一つの例)、だと思います。(繰り返しますが、ご自分でもこういうの、作ってくださいね?)

  
  
(01)VBAはオブジェクト指向もどきらしい。
  

(02)動かすのは(操作するのは)一般変数とオブジェクト変数の2つだけ。
「プログラミング」というものにおいて、「動かす対象」は、どんなプログラミング言語でも「基本は」「変数」。

本当は、「最終的な操作の対象」は「変数」に代入した、「生データ」のほう、ですが、プログラム内では「生のまま」データを扱うことは少なく、最初に変数に代入してから、変数のほうを操作することが多いので、ここでは「操作の対象は変数」と言ってしまっています。

そしてVBAの場合は、変数の種類は大きく分けて、一般変数とオブジェクト変数の2つしかない。です。

一般変数には、一般データ(文字ベースのデータ)を代入することで、また、
オブジェクト変数には、オブジェクト(=オブジェクト式)を代入することで、
操作が可能となります。
(「代入」が完了してはじめて、各種の操作が「開始」「できる」・・・、というイメージです。)

※オブジェクト=3D的なパーツ・部品
       =プログラムコードとしては、オブジェクトは「オブジェクト式」のこと。

 オブジェクト式=3D的なパーツや部品を、
         (「プログラム=文字」として扱えるように)文字に置き換えたもの。
         「階層構造」をなした状態で。

※★★超重要!!な補足
VBAの場合は、オブジェクト変数にオブジェクト(=オブジェクト式)を代入しなくても、「オブジェクト式」のままでも操作できてしまうので、タチが悪い。です。
(他の言語でもそうなのかもしれませんけど・・・)

そのため、ほどんどの初心者が「オブジェクト変数の勉強をしない」という悲惨な状況です。
(マシンパワーのある今ではそれほど重要でもない)「Withなどを多用」し、当然、オブジェクト変数を使わないです。

というか「使えない」。です。

巷には4流以下の講師や書籍やサイトが多くて、ちゃんと「オブジェクト変数の重要性を教えないから」、結果、「勉強しない」から、「使えない」、のです。(習う側に罪はないです。教える側は大罪です。)

だから、「いつまでたっても、初級の下のプログラミングセンスと知識のまま、一向に中級以上に上がれない。」ですし、「ほとんどの人が挫折する。」のです。
(「動かす対象・操作対象」の勉強を「あえて放棄」して、「やらない」わけだから、「挫折して当然」の結果となります。)

「習いに行ったとしても」、オブジェクト変数の重要性を理解できねば、「結局、値やオブジェクトを返す自作関数」の自作もできず、そのせいでプロパティやメソッドの理解もできないので、これまた「いつまでたっても、初級の下のプログラミングセンスと知識のまま、一向に中級以上に上がれない。」ですし、「挫折する可能性もそうは低くならない。」です。

楽しくないでしょうねえ・・・、VBAが・・・。

基本、「オブジェクト変数や、値とオブジェクトを返す関数、階層構造」、の勉強をしないなら、「習いに行った」としても、どーせ100%挫折するので、最初からVBAに取り組まないほういいです。
お金はもちろん、貴重な「あなたの」「時間」までも「ドブに捨てます」。

そして、Excelが出て20年も経ったのに、巷では、多くの講師が「階層構造」の「重要性」を理解していません。
オブジェクトモデルの一覧図(=ほとんどのオブジェクトの階層構造一覧図)をくれません。愚かすぎます。
どうせ「知ってるよ。そんなことくらい。」とでも言うんでしょうけど、「自著の書籍に書かない」とか「カリキュラムに加えない」ということは「まるで重要視してない」ということの現れ・証明で、で、それが原因で「VBA挫折者を、あなたこそ、が ” 多数 ” 産んでいる」ということに無頓着なんです。(ヘルプもオブジェクトブラウザも「階層構造ありき」で書かれているのに重要視しないとは、愚かすぎてあきれます。)
何年講師やってるんだ?あんたら?、と聞きたいです。
「ExcelVBAの独学中のその1年生」の僕ですらも。

ついでに言うと、「データ管理の基礎」や「SQL」などもまるで教えません。
「SQL」なんか、高校の商業科でも習うことがあるのに。

そうやって何も教えないでおいて、なのに料金(自著などの売価も含む)だけは取って、んでもって、、「日本のデータ管理を10年は遅らせて」おいて・・・、恥ずかしくないの?と聞きたいです。
これは、ExcelVBAのレジェンドさんでも例外ではありません。
教え方が下手クソな人が多いです。
その人たちは「絆創膏テクニックしか教えないので、オブジェクトなどの根本を教えないので」、「お金を取って」「無駄なコードを増やす・応用のできない生徒さんを量産」していると推測されます。
「(全部Excelでも使えるのに)SQLもシステム構築の基礎もリレーションも ” 全く” 教えないでおいて、そのくせ、” 超効率の悪いExcelのユーザーフォーム ” でシステムめいたものを作らせようとする」ので、これもあきれます。

彼らが「日本のデータ管理を10年は遅らせた」と思います。

Q&Aサイトで未だに(SQLのSの字も出ない)低レベルな質問ばかりなのとか、今出版されているVBAの書籍には、
「データ管理の基礎(Excelの基礎やVBAの基礎ではない)」や
「オブジェクトブラウザの意義・ヘルプの読み方」
「エラー処理や、ExcelでのADO・DAOの使い方の専門書」などの書籍がまるで無い・・・・
ということも・・・、その現実も・・・、彼らが「教え方が下手クソなため」に、「日本のデータ管理を10年は遅らせた」ことを物語っていると思います。

これからVBAをどこかの教室で習おうと思っている方は「マジで」十二分にご注意ください。
4流や6流以下のVBA講師たちにお金だけ巻き上げられませんように・・・。
また、初めてExcelVBAについて、独学で取り組もうと書籍を買おうと思っている人も、十分にお気をつけください。
(Excel VBA初心者用のおススメ書籍はこちら)

なお、「階層構造」が分からない人(もしくは、まったく教えてもらえていない人)も、習いに行っても応用が利かないので、「残念ながら100%挫折」します。
でも、これも習う側には1ミリの落ち度もありません。

質の悪い4流以下の講師・市販書籍著者・ライター・編集者と、その人たちが書いている市販書籍やWeサイトが多いですから、「騙されないように」ご注意ください。
  

(03)一般変数に代入する生データは一般データです(文字ベースのデータ。文字列・数値・日付・論理値など)。
  

(04)オブジェクト変数に代入する、「生データに相当するものは」、オブジェクトです。
ただし、プログラムコード上に限っては「オブジェクト」は「オブジェクト式」のことを意味します。
もっと言うと、「階層構造を省略していないオブジェクト式」のことを指します。

※階層構造を省略するオブジェクト式の書き方ばっかりを教えている本を読む・買ってしまうと、「ある意味バカ」になりますし、エラーが増えるうえに自力解決なんてほとんど無理です。またQ&Aサイトで聞いてみたところで回答の意味を理解できません。
基本、ほとんどの市販書籍が、但し書きもせずに、あたりまえのように、「省略しまくったオブジェクト式の書き方しか教えない4流以下の教え方の本」ばっかりです。
逆に階層構造を省略しないオブジェクト式の書き方を覚えると、常に階層構造やオブジェクト構造のことが「絵的に」思い浮かんでいるため、エラーの少ないコードをどんどんと書けるようになりますし、エラーの自力の解決もできるようになる、そういう方向に行けやすくなる・・・、と思います。

なお、「オブジェクト式」とは、「3D的・立体的なイメージの “ オブジェクト “ を文字に直したもの・変換したもの」のことです。
プログラム上に、3D的・立体的な「オブジェクトの絵」をペッタンコと貼付けても、全く持ってプログラムは書けないので、「オブジェクトを文字に直したオブジェクト式」の方を使います。
  

(05)オブジェクトは「複数の機能を有したモノ(=複合機能体)」、「文字データと違い、3D的なユニットな感じ」、あるいは、「Excelという工場で働くミニミニロボット」とか「パーツ」「部品」というイメージでいいと思います。
ただ、「大きいもの・小さいもの・目に見えるもの・見えないもの」があります。
具体的には、目に見えるものとしては「ブック」、「シート」、「セル」、「グラフ」、「図形(オートシェイプ)」「ピボットテーブル」、「Microsoft Query (あるいはQueryTableオブジェクト)」、「テーブル機能(ListObject)」、「オートフィルター」「セルのコメント機能」「(旧Excelなら)コマンドバーや右クリックメニュー」などがあります。
目に見えないもの・見えにくいもの(意識しづらいもの)には、「オブジェクトの内側管理機能(Interiorオブジェクト)」「エラー管理機能」「VBE管理機能」「各種コレクション」「ADO/DAO」などがあります。

※「ADO/DAO」は、Excelからは独立した機能ですが、オブジェクトを動かす形態の機能です。

「全国のATM網」を「1つの大きなオブジェクト」と捉えると、ATMの「キャッシュディスペンサー」が「目に見えるオブジェクト」で、それを裏方でつないだり動かしたりする「壁や地下に埋まっている」「ケーブルや管理システム」が、「目に見えないオブジェクト」というイメージになります。
で、キャッシュディスペンサーの「最後の実行」が「お金を出す」という「メソッド」というイメージです。
実行するまでの各種のこまごまとした設定(口座番号を打ち込むなど)が「プロパティ」というイメージです。
キャッシュカードや通帳は「引数」・・・というイメージです。
人が立たないと「自動的にスリープモード」に移行し、人が前に立つと、「自動的にスリープを解除して画面起動する」そういう機能が「イベント(自動実行機能・あるいは自動実行タイミング・自動実行信号)」というイメージです。

「キャッシュディスペンサー」をオブジェクトのひとつとして捉えた場合は、次のような感じです。

「引数」がキャッシュカードや預金通帳

「メソッド」が
振込む(お振込)
通帳記入する(通帳記入)
引き出す(お引き出し)  など。
「あらかじめ決められた動作」
あるいは、
「あらかじめ決められた動作」を「実行」する、そういう機能。

「プロパティ」が
タッチパネル画面で行う各種の設定。
振込時なら相手の口座番号設定や金額設定
引き出しなら暗証番号の入力や金額設定  など。
「あらかじめ決められた各種設定項目」
あるいは、
「あらかじめ決められた各種設定項目」の「設定」を「実行」する、そういう機能。

「イベント」が自動スリープや自動スリープ解除・自動画面起動

「目に見えないオブジェクト」は、通帳の印字ユニットや、内蔵のデータの通信ユニット(チップや記憶装置)など。
「目に見えるオブジェクト」はタッチパネルや、お札を取り出す部分の「自動開閉お札カウント排出ユニット」、など。

上記は、すべて、キャッシュディスペンサーという「オブジェクト」の中に入っている、内包されている「機能」、です。

特にプロパティやメソッドに相当するものは「内包されている」「命令」というイメージでも行けると思います。
VBAのオブジェクトの場合も「プロパティやメソッドはある意味・命令」というイメージは同じです。

もっというとATM網全体は、○○○○銀行という親オブジェクトがあり、階層構造に組み込まれている、
とか、
キャッシュディスペンサーは○○○○支店の第1フロアが親オブジェクトの時もある・・・、
あるいは、
135台めのキャッシュディスペンサーは○○○○支店の第1フロアが親オブジェクト・・・、
169台めのキャッシュディスペンサーは×××××支店の第3フロアが親オブジェクト・・・、
みたいなイメージです。

参考
Access2000VBA・Excel2000VBA独学~★★★超重要!!!「実際の機能や画面等々」と「VBAオブジェクト」との対応。例えば「Application」って何?Workbookとの関係は?

  

(06)オブジェクトは大別して、「単一オブジェクト」と「コレクション」の2種類があります。(2種類しかありません。)
コレクションは、「コレクションオブジェクト」とも言います。
どちらかというと、単一オブジェクトとの区別を明確にするために、「コレクションオブジェクト」と呼ぶ方がいいと思います。区別を明確にするほうが、階層構造を理解しやすいので・・・。
「コレクションオブジェクト」は、複数の単一オブジェクトを個別管理及び一括管理する「ユニット・ミニミニロボット」です。
同じ種類、似た種類の、複数の単一オブジェクトたちを個別管理及び一括管理する機能です。

例えば「単一のオブジェクトが複数ある」場合は、「Item」という名前のプロパティ、あるいはメソッドを使って、そのうちの、単一オブジェクトを特定する機能をコレクションオブジェクトは持っています。

また、複数の同類のオブジェクトの一括印刷、一括削除、一括コピー、etc、などの「一括××××××」という操作もできます。
(ただし、やれる一括処理は、各コレクションで異なります。)

ちなみにですが、例えば「Sheet1」という名前の「単一のシート」の場合は、「Item」という名前のプロパティを使って、以下のようなオブジェクト式となります。(以下は「省略しない書き方」です。)
「Application.Workbooks.Item("book1.xlsx").Worksheets.Item("Sheet1")」
まずは、(コレクションを経由して)このような形で、単一のシート、つまり、Sheet1を取得(=選択・指定)ができます。

ただ、「Item」は、プロパティもメソッドも省略されることがほとんどなので、実際には以下のように省略して書かれることがほとんどです。
「Application.Workbooks("book1.xlsx").Worksheets("Sheet1")」
(オブジェクトモデル・階層構造としては、「Workbooks.Item("book1.xlsx")」で1階層分を「単一オブジェクト」として使っていて、また、「Worksheets.Item("Sheet1")」でもう1階層分を、これまた「単一オブジェクト」として使っている・・・、というイメージになります。
あの、基本、コレクションオブジェクトは単一オブジェクトの「上位」ではありません。横に居てくれているイメージ、同じフロアに居てくれて・かつ・単一オブジェクトたちを管理してくれてるイメージ、です。

また、基本、単一オブジェクトの上位のオブジェクトも下位のオブジェクトも、両方とも、コレクションではなく「単一オブジェクト」です。
よく「コレクションは単一オブジェクトの親オブジェクト」「単一オブジェクトはコレクションオブジェクトの1階層下に属する」という風に間違えやすいのですが違います。(そういう図をマイクロソフト自身が描いて出してしまってもいるため、よけいに、そう誤解するかもしれません。Excel2000のヘルプの図はそんな風には描かれていないのですがWebのものがそういう形態で描かれてしまっているものがあります。)

コレクションの親オブジェクトと単一オブジェクトの親は、1階層上の同じ単一オブジェクトです。
TypeName関数+Parentプロパティで(イミディエイトウィンドウにて)調べると分かります。
たとえば、
「Worksheetsコレクションオブジェクト」の親も、
「WorkSheets("Sheet1")単一オブジェクト」の親も、
どちらの親も、「Workbook単一オブジェクト」という単一オブジェクトであることが、わかります。(Workbooksコレクションじゃあ、ありません。)
調べ方は、以下です。
イミディエイトにて、
? TypeName(Worksheets.Parent)
と書いてEnterしても、
? TypeName(Worksheets("Sheet1").Parent)
とやっても、返ってくるオブジェクトの名前は
Workbook
です。
2つとも同じですし、また、「Workbooks」(コレクション)でもありません。
(※基本、「Worksheets」と、何も付加させずに1単語だけを書くと、同じ階層に居るコレクションオブジェクトのほうを指定したことになり、「Worksheets("Sheet1")」とシート名やインデックス番号付加してカッコで囲んで書くと、同じ階層に居る単一オブジェクトを指定したことになります。これは他のどんなコレクションでも同じルールです。)

なお、「Application.Workbooks.Item("book1.xlsx").」は、もしもそのブックが今現在アクティブな状態なら、色々省いて「ActiveWorkbook.」と1語で書くこともできます。
つまり、ActiveWorkbook.Worksheets("Sheet1")
と書けます。
さらにはそれすら省略して、
Worksheets("Sheet1")
と書くこともできます。

でもこの「Worksheets("Sheet1")」とか「ActiveWorkbook.Worksheets("Sheet1")」のような「省略しまくったオブジェクト式の書き方」ばっかりを使っていると、学習が進むにつれてエラーだらけになります。
そして「ある意味バカ」になります。
そして、階層構造のことを教えてもらえていないため、なかなか素早く「正しく直す・正しく書き換える」「メンテや引継ぎがしやすくなるように直す」「将来を見越して直す」ということができません。
エラーも増える一方です。

以上のようなことは、その他のたくさんのコレクションオブジェクトでも同じ感じです。
(個別管理と複数一括管理の両方ができますし、また、オブジェクト式にて省略ばかりしていると、ミスやエラーが増える上に自分で治せないという2重苦・3重苦になる。)

それから、「Item」というプロパティやメソッドのことを学ぶことは、オブジェクトモデル(階層構造)の学習に必須なので、絶対に理解しておきます。

なお、なんで、同じ「Item」という名前なのに「プロパティ」と「メソッド」に分かれているのかは僕は知りません。
プロの人に聞いてください。

あと、コレクションオブジェクトと(たしか)Variant型の配列には、「For Each 文」が使えるので、「すべての単一オブジェクトへのループ処理」ができます。
セル(Rangeオブジェクト)のセル範囲や名前定義した範囲などにも「For Each 文」が使えます。(なので、Rangeオブジェクトは若干コレクションめいた性格を持っているようです。単一セルを複数同時に扱える、みたいな。)
そのため「For Each 文」を使えば、「Cellsプロパティ+カウンタ変数」を使わなくても、一応、Rangeオブジェクトだけでも、一応、「横方向のループ処理」が可能です(いいか悪いかは別として)。
「For Each 文」の1行目で、プログラム実行の対象範囲として、横方向のセル範囲を指定すればいいので。
僕は、速度的に問題が無いちいさめの表の処理だったり、特別「ダメな理由」が無い状況のときは、使うことは悪くないのでは?と思います。
実際、セル範囲や名前定義の名前で、セルの一括処理ができるため、コードが読みやすくなってメンテも引き継ぎもラクだし。

もちろん「Cellsプロパティ+カウンタ変数」にも慣れたほうがいい(慣れるべき)と思いますけど、今のところ、複雑な条件での集計やリストアップにはSQLやMicrosoftQuery、QueryTableオブジェクト、ピボット、たまにピボットのVBA操作、を使うので、「Cellsプロパティ+カウンタ変数」とか、ループ処理そのものを使うシーンがほとんど無いです・・・。
  

(07)オブジェクトの中には、大分類として、「プロパティ、メソッド、イベント」、という3つの機能が内包されています。その3つは、オブジェクトの「メンバー」と呼ばれています。全部オブジェクトとセットです。
そして、その3つのうち、「プロパティとメソッド」はある意味、「特定のオブジェクトに紐ついて内包されている専属命令」とか、「そのオブジェクト独自の命令」という感じで理解してもOKです。
そして・・・、
「プロパティ」は「各種設定系」の命令・機能で、
「メソッド」は「コピーする、印刷する、開く、新規作成する」などの、
「動作系(動作開始系)」の命令・機能
・・・というイメージです。

なお、「プロパティ」も「メソッド」も、コマンドバー(あるいはリボン)や、右クリックメニューの中の、「設定項目や動作開始項目(実行項目)などとして「一応」「形として」目にも見える」ものがそこそこあります。(逆に目には見えないものも多いですが。むしろそっちのほうが多いかも。)

「プロパティ」は「×××を設定する」系のメニュー、
「メソッド」は「×××を実行する」系のメニュー、となって見えてきていることが多いと思います。
それぞれに対して、「列挙(Enum)」や「組込み定数」もメニューとして目に見えることがあります。
(もちろん、それらは一部であって全部ではないので、目に見えないそれらも多いです。
以下、その例の図です。(クリックで拡大できます。)

↑この例では右クリックしたものがセルなので、下図のようなプロパティやメソッドの内容になりますが、右クリックしたものが異なると、例えば同じ「コピー」でも親オブジェクトが変わるので、意味が変わってきます。
図形と文字列のコピーでは性格が異なる・・・みたいな感じです。

参考記事
★★★★★★★★★★★★Access2000VBA・Excel2000VBA独学~用語:新:プロパティ、メソッド、の新しい説明~今までの「プロパティ=性質」「メソッド=動作」のような説明だと結局わからない。理解できない。「もれなく」「挫折する」ので。~

基本、『 プロパティ=性質で、メソッド=動作 』と理解するだけの、市販の初心者本にありがちな「浅い理解・4流以下の質の低い理解の仕方」だと、オブジェクトブラウザやヘルプが自力で読めないまま、いつまでたってもVBAが上達できません。
基本、「プロパティもメソッドも関数の仕組みに似た命令・あるいは機能」と考えるほうが、上達が早まると思います。
(色んなことを、「リンクさせて」考えやすくなるため。)

もう少し言うと、プロパティもメソッドも・・・、
「値やオブジェクトを返す自作関数」
「何らかの動きをしつつ・同時に値やオブジェクトを返す自作関数」
「値を読めるだけで設定(書き換え)はできない自作関数」
「値を読めて・かつ・設定(書き換え)もできる自作関数」
「値を引数にとる自作関数」
「オブジェクトを引数にとる自作関数」
・・・といった関数たちに仕組みが似ている、ということです。

なお、「プロパティとメソッド」は、「命令なのか?機能なのか?」という区別については、独学の最初のうちはつけなくても大丈夫です。学習が進むにつれて、もし区別が必要ならすればOKです。僕はどっちでもいいと思っています。
前後の文脈で訳し変えています。
基本、「プロパティとメソッド」は名前付き引数も使えたりして「関数」の仕組みと似ているので、結果・「命令」ととらえればいいとは思いますが、でも、一方で、オブジェクト目線でヘルプで「メンバー一覧」を読むと、「機能」と呼んでも差し支えないものばかりなので、「機能」でもいいのじゃないかと思います。
それにヘルプの「オブジェクトメンバー一覧」が読めて・その内容が正しく意味が理解でき、正しい意味あいでコードが書けるなら、「命令でも機能でもどちらでもいい。」とも思います。
どうしても白黒つけたかったら、プロの人に聞いてください。

「イベント」は
「オーブンレンジの扉を開けた瞬間にあたためが自動でストップする」とか
「ATMやコピー複合機の前に立つとスリープが自動解除されて自動起動する」みたいな、
「何かの瞬間」に「自動動作する機能」「プログラムを自動実行する機能」です。

あと、(多分ですが)全ての単一オブジェクトと(再度・多分)全てのコレクションオブジェクトは、「階層構造を成して」「つながっている」ので、その「つながり」「経路」を利用して(伝っていき)、「下位や上位のオブジェクトのプロパティやメソッド」にアクセス(=流用)できる機能もあります。(単一、コレクション、両方の上下で。)
僕はそれを勝手に、「階層構造上下自由往来機能」とか、「上下階層オブジェクトの機能の流用機能」などと勝手に名付けして呼んでいます。これができることで、「上下の階層の単一オブジェクトのプロパティやメソッドをほんの少し・一瞬だけ、使いたいとき」は、オブジェクト変数をいちいち宣言しなくても、あるいは、最上階層から全部の階層をたどってこなくても、それらを使うことができます。その他のメリットも多分あると思います。

そして、その階層構造やつながりの構造・経路は、ローカルウィンドウやTypeName関数+Parentプロパティ、オブジェクトブラウザなどで確認できます。
ただ、一部のコレクションオブジェクトは、「階層構造に組み込まれていることは間違いないのだが、でも、どこに位置しているかよく分からない」というモノがあります。(例えばSheetsコレクションオブジェクトとか。)
そこは少し注意が必要です。

最後に、単一オブジェクトもコレクションオブジェクトも「プロパティ」は100%内包しています。
また、100%、階層構造にも組み込まれています。(位置がよくわからないコレクションオブジェクトなども存在はしますが、一応、それも、階層構造に組み込まれています。)

が、「メソッドとイベント」は、内包してない単一オブジェクトやコレクションオブジェクトがあります。

  

(08)ローカルウィンドウやTypeName関数+Parentプロパティ、オブジェクトブラウザ、ヘルプ、ウォッチ式、などが扱えてその意義がわからないと、いつまでたっても、まったく上達しません。
「初心者」の「下」のスキルのまま、セルやフィルタの操作などがちょこっとできるだけでいいのなら何の問題もありませんが・・・。ただ、そのレベルですと、「マクロの記録でやったほうが早くない?そもそもVBAなんてこれ以上要る?」という状況に陥りかねません。
  

(09)一般変数(配列も)を動かす・操作するには、変数の外側から、定数?、演算子(記号めいた命令。四則演算の記号や&など)、ステートメント(繰り返し文や条件分岐文、その他色々)、VBA関数、といった命令などを使って動かすイメージ。
  

(10)オブジェクト(単一・コレクションともに)を動かす・操作するには、「プロパティ・メソッド・イベント」という「内包される各種命令や機能」を内側から引き出して使いながら・・・、と同時に、外側からは、演算子(記号めいた命令・Likeなど)、ステートメント(繰り返し文や条件分岐文、その他色々)、列挙(Enum=各種動作設定)、組込定数(列挙の設定値など)、といった命令などを使って動かす、というイメージです。

※「VBA関数」でオブジェクトを動かすこともあるのですが、「VBA関数」は文字ベースの一般データを動かす(加工などする)ことのほうが多いので、そのようにご理解ください。

※ステートメントは「ストップ、ゴー、繰り返し、条件分岐、変数設定、エラー処理、開く、閉じる」などの「OS的な・共通的な」、ある意味、「命令」です。
なので、(09)にも(10)にも共通に両方に使われます。

なお、「ステートメントも、演算子も、関数も、プロパティもメソッドもイベントも、列挙、組込定数、も、」、全部、「命令みたいなもの」「命令の一種」とざくっと覚えてしまっても、最初のうちは大丈夫だと思います。
「変数を動かすための」道具、命令、というイメージです。
より学習が進んだら、その都度その都度で、「どんな性格の・どんなモノなのか」を、しっかり理解し分ければ・区別をつけていけば、いいと思います。

なお、一般的には、(09)と(10)は1つのプログラムの中に「混在」します。
(09)と(10)が共存するプログラムのほうが多いです。

(09)はプロパティの値の設定や、計算、文字系データの加工(オブジェクトを動かすための条件の条件値の設定等々)、などに使われ、(10)は文字通り、オブジェクトの操作に使われます。
  

(11)「オブジェクト変数、値やオブジェクトを返す自作関数の作成、配列(通常のものとVariant型のもの)」、を覚えないといつまでたっても上達しません。(一応VBAを扱えるけど、いつまでたっても初級の下のレベルを脱出できない。それでいいなら別に問題ありませんけど。オブジェクト式なんていつまでたっても覚えられない。応用がきかない。オブジェクトブラウザも扱えない。ヘルプも自力で読めない。当然、エラーのスピーディな解決も自力でできません。Q&Aサイトで質問しても回答者の回答の意味すらわからないでしょう。プロパティもメソッドも「値やオブジェクトを返す自作関数」と似たような動きをするからです。名前付き引数もそんな感じです。「名前付き引数」はもともとは、プロパティやメソッドのものではなく、「関数」「自作関数」のもののようです。)
※配列(特にVariant型のもの)は、表データを一括で扱うときや速度アップなどのときに使ったりするそうです。僕はSQLやMicrosoftQuery、QueryTableオブジェクトを使うことが多いので、速度的に困ったことがなく、まだ使ったことがありません。また、配列の仕組みとコレクションの仕組みは、少し似ていますのでその意味でも配列という仕組みを早い段階で学習し・すぐに使えるようにしておくことは重要です。
  

(12)名前付き引数は「メソッド」だけものではないし、そもそも、「関数(あるいは「引数を持つプロシージャ」)」のものです。
ヘルプにそう書いてあります。
例えば2010のVBEヘルプなら、「名前付き引数と省略可能な引数の概要」とか、「名前付き引数」、「名前付き引数は使えません。」、「その名前付き引数は、既に指定されています。」、といったトピックを読むとわかると思います。

なお、名前付き引数は「メソッド」だけものではないわけなので、結局のところ、「プロパティ」や「引数を持つ自作関数」、あるいは「引数を持つプロシージャ」でも使えます。

例えば「セル(=Rangeオブジェクト)」を取得したいときは、Worksheet.Range プロパティを使って、
「Range("A1")」と書くことが多いですが、これを名前付き引数を使って、
「Range(cell1:="A1")」と書くこともできます。
セル範囲を指定する場合は、
「Range(cell1:="A1", _
     cell2:="C3")」
のように「 _ 」(アンダーバー)を使って複数行で書くこともできます。

小さなプロシージャを作って、

Debug.Print Range(cell1:="A1", _
         cell2:="C3").Count

と書いてEnterしたら、イミディエイトウィンドウに、「9」という形で、セル範囲のセルの個数が返ってきます。

Rangeの場合は、引数の数が少ないのでかえって、読みにくくなってしまいますが、引数の数が多いプロパティの場合は、多少使えるかもしれません。

同様に、「引数を持つ自作関数」「引数を持つプロシージャ」でも名前付き引数は使えます。

逆に、
名前付き引数が、「メソッド」でも「プロパティ」でも使えて、かつ、
「名前付き引数自体は関数や引数を持つプロシージャのもの」ということであるなら、
「メソッド」や「プロパティ」っていうのは、
「名前付き引数を使えるわけだから、たぶん、関数や引数を持つプロシージャと似た仕組みなんだ・・・・」、
という推測・仮説が立つと思います。

でも実際、そう考えると、オブジェクトブラウザの説明ペインに、
「Property Application As Application」みたいに書かれているのもなんとなく納得できる気がしますし、そう考えてしまった方が、逆にオブジェクト構造の全体が分かりやすくなると思います。
  
  
(13)オブジェクト変数が扱えれば、「With」という命令めいたものは速度的な問題やその他の「どうしてもWithを使わんとあかん」、というケースが無い限り、あまり要らないと思います。好みの問題もあるでしょうけど・・・。
僕はバカだからWithを使うとコードが読みにくくて、エラーを起こしちゃいやすいので、また、作り変えがしにくいので、ほとんど使いません。
マクロの自動記録で自動記録されたコードでWithが使ってあったら、(コスパ的に)直す必要がないときは、そのままにしてます。
直す必要があるときは直します。
  

(14)「オブジェクト式」ついては、階層構造の省略をしていると、いつまでたっても上達しない。
基本、「階層構造」の全体像や良くつかうオブジェクトがどの位置に居るかなども理解しないと、いつまでたっても上達しません。(一応VBAを扱えるけど、いつまでたっても初級の上を脱出できない。特にグラフを扱ったり、シュミレーションやシステム構築などをしたいとき。セルとシート、フィルタあたりをほんの少し動かすとか、多少の転記程度なら問題ありませんが。でも、「そんなレベルならマクロの記録で良くね?」と言われることも無きにしもあらず・・・です。)

※でも、これについては、「階層構造の省略」ばっかりを、そもそも4流以下の講師たちが教える・それしか教えないので、これも習う側には何の落ち度もありません。
  

(15)「変数なんか全部Variant型でいい」とする書籍やサイト(程度の低い4流以下の講師・市販書籍の著者やライター、編集者)が最近増えていますが、ハマります。それだと値やオブジェクトを返す自作関数がちゃんと作れません。
「値やオブジェクトを返す自作関数」がちゃんと作れなければ、前述したようにVBAの上達は「100%」「ありえません」。
初級の「下」のレベルのままです。
ただ、初級の「下」のレベルのままなことが許される職場で、「エラー解決要員」が別にいて、自分がエラー解決しなくてもいいならぜんぜんそれでもいいですけど・・・。

ただ、それで他人のファイルやコードは触らないでほしいです。
普通の人のコードは、「全部Variant型なんてことは無い」ので。
  

(16)「複雑な条件での定型的な集計やリストアップ」に限っては、ループ処理をできる限り使わずに、代わりにSQLを使うほうがいいです。
逆に、SQLを知らないと、ループ処理を中心に「無駄なコード」を「死ぬほど書く羽目」になります。場合によっては動作速度が「メチャ遅くなる」ようなケースも・・・。
特に、複数の社員が共同で使うシステムめいたものや、あるいは、「集計ツール的なモノ」をつくりたいときは、アホみたいに無駄なコードが増えます。(というか、多分ですが、基本、そもそもExcelで同時アクセスのできるシステムなんて作りませんけど。ただ、集計ツールは、作りますよね?)
SQLは、Microsoft Query、QueryTableオブジェクト、PivotChacheオブジェクト(だったかしら?)、ADO・DAO、などで使えます。
また、Microsoft QueryやピボットテーブルのVBAでの自動操作を知らないと、その場合も同上です。
Excelで数字の集計とかしないなら(ゲームとか作るなら)要らないですけど。

SQLを使うと、「SQL自体が、もともとループ処理を使わなくても複雑な集計やリストアップができる仕組み」なので、「無駄なループ処理が減らせます」し、そのほか、「数式がセルに埋め込まれない=結果だけが表示されるので、データ量が死ぬほど多い時でも多分高速に動く」などのメリットがあります。
ExcelVBAとの相性も悪くないため、Excelの2010以降?の「パワーピボット」「パワークエリ」などよりもラクちんな場合も少なくないと思います。
(もちろん、メリットばかりではありませんが、でもメリットも相当あります。4流以下の講師は、SQLのことを絶対に教えてくれません。SQLのことを知らない講師すら居ます。だから4流以下なんだと思いますけど・・・。SQLは高校の商業科でも習うことがある「データ管理の基礎」なのに、大人になると誰も教えてくれません。おかしな話です。ExcelVBA講師たちが昔からサボってたからだと思います。)

SQLを使うには、「MicrosoftQuery、QueryTableオブジェクト、ピボットのVBA操作、名前の定義、ADO/DAO」などもセットで使うといいと思います。

※これも、4流以下の講師たちは教えないので、習う側に落ち度はまったくありません。
  

(17)Excelの「ユーザーフォーム」は使い勝手が悪すぎて非効率です。
無駄なコードも増えるし、サブフォームも使えないし。連結フォームも作れません。同時アクセスできるフォームも作りにくいし。
こんだけ使い勝手が悪いと、場合によっては、シートをフォーム替わりにした方がいいような気がします。
(というか、そちらのほうが扱いやすい気がします。)
あるいは、Accessのフォームを使ってExcelとオートメーションで連携するほうが50倍はコスパがいい気がします。(事務系の定型的なフォームが中心ですが)
  

(18)オブジェクトを操作するには、「Set」という命令を使って、オブジェクト(=オブジェクト式)オブジェクト変数に代入するのがプログラムを管理しやすいですが、代入する前に「オブジェクトの取得」という操作をします。
オブジェクトの取得とは、操作したいオブジェクトを「1つ選択する・決める」、というようなイメージです。
オブジェクトを取得する(=1つ選択する)には以下のような方法があります。
一番多いのは、(a)と(b)です。

(a)取得したいオブジェクトの上位の単一オブジェクトの、各種の「プロパティ」を使う。
基本、「プロパティ」は、『 オブジェクトの性質を決める各種設定の設定値を読んだり書き換えたりするもの 』がメインですが、それとは別に、「オブジェクトを取得することだけに特化したプロパティ」も結構たくさん存在します。
それには、「下位のオブジェクトを取得するもの」や、「上位のオブジェクトを取得するもの」があります。
上位のオブジェクトを取得するモノは、「Parentプロパティ」で取得することが多いかも?
なお、Worksheet.Application プロパティとか、QueryTable.ListObject プロパティ(も?) といった感じで、そのようなプロパティでも上位のオブジェクトを取得できます。
Parentは、「1階層上=親オブジェクト」しか取得できませんが、Application プロパティなどは、数段階層をすっとばして、最上階層のオブジェクトを取得できます。

(b)同上の、各種の「メソッド」を使う。
これも、プロパティと同様に、「メソッド」は、『 オブジェクトにあらかじめ備え付けられた「動作(あるいは動作を開始するもの)」』がメインですが、それとは別に、「オブジェクトを取得することだけに特化したメソッド」も意外と存在します。
Worksheet.PivotTables メソッドとか。

(c)コレクションの「Item」という名前のプロパティかメソッドを使う。
※これは「省略可」で、逆に書かれるほうがめずらしいのですが、知っとかないと上達できません。

(d)Excel専属のオブジェクトではなく、Office共通のオブジェクトのメソッド?やプロパティ?を使う。

(e)コレクションのその他のメソッドを使う。(AddやOpenなど)
※多くのコレクションオブジェクトが保持・内包する「Add」や「Open」などのメソッドは、「何かを新規作成したり開いたりしながら、でもそれと同時に」、オブジェクトを投げ返してもくれます。なのでユーザーが側はそれを取得できます。
これは、「何らかの動きをしながらオブジェクトを返す自作関数」と動きが似ています。

(f)関数を使う(CreateObject関数やGetObject関数)など
WordやAccessなどからExcelを操作したり、その逆をしたいとき、などによく使います。

(g)イベントプロシージャの引数を使う
  

(19)小数を扱うときは気を付ける。正常に動かないことがたまにあるので。
とくにSingle型の変数を使ったときに計算ミスが起きることがあるので。
Variant型に入れたときなどもちょっと注意が必要かもしれません。

★★★ Access2000VBA・Excel2000VBA独学~初心者の方や独学者の方へ:パソコンで小数計算をするということの重要性~関連して「変数の型は覚えなくていい」とか「変数は全部Variant型でいい」 、という最低で腐った教え方には、絶対に騙されないようにしてください。ベストセラーの「教科書」を名乗る本も真似していてとっても危険・かつ・迷惑です。~
  
  
(20)同名のプロパティやメソッドでも、親というか、オブジェクトが変わると、まったく異なる動作となります。
※親オブジェクト=プロパティやメソッド目線の場合は、「それらを保持・所有・内包しているオブジェクトのこと。」だとイメージすればいいと思います。
オブジェクトの階層構造の話であれば「1階層上の単一オブジェクトのこと。」とイメージすればOKだと思います。

たとえば「Worksheet.Rangeプロパティ」と「Range.Rangeプロパティ」は、おなじ「Rangeプロパティ」でも、(親が異なるので)やれることが異なります。
このほか、たとえば、「Application.Value プロパティ」と「Range.Value プロパティ」とか、
「Range.Copy メソッド」「Worksheet.Copy メソッド」「Worksheets.Copy メソッド」「Shape.Copy メソッド」なども同様です。

「異なる」と言う意味では、「え?こっちのプロパティはこんなこともできちゃうの!?」という嬉しい場合もあれば、「え?あっちではこれができたのに、なんでこっちではできないの?うぎいーーーー!!」となってしまう悲しい場合もあります。
特に後者だとメゲることもあります。
片方ではエラーにならないのに、もう片方ではエラーになったりすることもあるからです。

で、「同じ名前だからできることが同じ」という決めつけや思い込みが抜けないため、「もとからできないからエラーになっているのに」「何日も」アホみたいに悩むことになります。
ヘルプとオブジェクトブラウザが扱えれば、それで「あれ?ちゃうんかな?」とさっとそれらで調べれば」「3分で解決できる」のに。
(※親オブエクトがどうのこうのなのでエラーになって当然、といった情報はWebで検索してもほぼ、出てきません。Q&Aサイトで聞いてもいいですけど回答が必ずもらえるわけでもないし、何日も待たないといけないかもしれません。結局、ヘルプとオブジェクトブラウザが扱て、まずはそれらを見るのが一番早道です。)