★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):Vol0033:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-16。★「謝罪」ウォッチウィンドウで、セル範囲のアドレスを「直接」調べる方法(超マヌケだった僕)と、Yahoo知恵袋で700閲覧をして頂いた回答について
  
バックナンバー目次ページは→こちらです。

まぐまぐのページは以下です。
https://www.mag2.com/m/0001691660.html
  
  
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)

Vol.0033

タイトル:ついでに、ウォッチウィンドウの「一般的に、普通に使う使い方」も少し-16。

★ 「謝罪」ウォッチウィンドウで、セル範囲のアドレスを「直接」調べる方法(超マヌケだった僕)と、Yahoo知恵袋で700閲覧をして頂いた回答について
  
  

バックナンバー目次とサンプル号
https://euc-access-excel-db.com/tips/ct07_se/ct075012_xls2k_vba_tips/mag2-01

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  

今回は大変重要なこと(超マヌケな僕のこと)を「書き忘れていた」のでそのことを書かせて頂きます。

あと、ちょっと前に、Yahoo知恵袋である質問に回答をしたのですが、その質問が、そのカテゴリには珍しく「700閲覧」してもらえたので一応そのことについてもお知らせと補足をさせて頂きたいと思います。

  
  

まず、1つめの件ですが、これは、以前の号で、
「ウォッチウィンドウでは、セル範囲のアドレス(番地)を直接は確認できない」
と書いてしまったことに対する訂正です。

  

ほんっとうにごめんなさい。
  

大ウソでした。

  

「ウォッチウィンドウであっても、

「セル範囲のアドレス(番地)を直接・確認する」

ということは可能です。
  

僕が言いたかったのは、Rangeオブジェクト(セル範囲としてのオブジェクト)の「+」マークを展開したなかにおいては、「確認できない」ということでしたが、
でも、その「+」マークの展開後の部分とは「まったく別個に」、例えば・・・・、

「Activesheet.UsedRange.Address」

・・・という式を追加すれば、

イミディエイトウィンドウを使わなくても、

「セル範囲のアドレス(番地)を直接、確認できる」

ことが分かりました。
  

というか、分かってたのにできないと勘違いしていて、お話しするのを忘れしてしまっていました。
  

本当に「バカ」すぎて、「能無し」ですみません。
  

他の講師さんたちを批判しておきながら、自分は「本当に」「もっとバカ」です。
  

こんな僕のメルマガを読んでくださって本当にありがとうございます。

  

・・・・というわけで、「謝罪」をしたかったのでした。
  

大変、申し訳ございませんでした。m( _ _ )m m( _ _ )m m( _ _ )m

  
  

で、実際に

「Activesheet.UsedRange.Address」

「Activesheet.UsedRange」を

ウォッチウィンドウに並べると以下の図のようになります。

  

もちろん、イミディエイトで

? Activesheet.UsedRange.Address

とやっても当然、値(返ってくる答え)は、「$A$1:$B$4」と同じですね。

  

1つ目の件は以上です。
  

ほんとうに、すみませんでした。

  
  

では、2つ目の件です。
  

ちょっと前に、Yahoo知恵袋である質問に回答をしたら、その質問が、そのカテゴリには珍しく「700閲覧」してもらえた・・・という件です。

その質問は、以下のURLです。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10239693360
  

基本、この「Visual Basic」のカテゴリは、
50~100閲覧程度があれば、画面右側の「カテゴリQ&Aランキング」に、結構な期間ランクされているのですが、この質問もそこそこの期間、1位になっていました。

僕がした回答が「700閲覧になった」本当の理由なのかどうか?は正直わかりませんが、でも、他のかたの回答が短かかったので、多分そうじゃないかな~?と都合よく勝手に思い込んでいます。

いずれにしましても、多くの方が「気にはなっている・・・・」ということなような気がします。

今現在でも、少し増えて「771閲覧」となっていましたので、その内容を読んでいただけたらな~、皆さんの何かのヒントになったらな~、と思いました。

「ベストアンサー」になっている回答です。長いです。
  

ただ、

この回答、結構テキトーに書いてしまったので、少し誤解を受けるかもしれないです。
なので、本号で、少しまとめ直しをさせて頂きたいと思います。
  

それを、以降に書いておきますので、こちらもご覧になってみてください。
  

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

>〇どれくらいで習得できるか?

Excelを知らないなら、独学だと1年以上はかかると思います。
Excelの一般操作(せめて、入力、セル操作、ピボット操作、フィルタ操作、並べ替え、グラフ操作、ワークシート関数操作、など)ができないと、VBAはムリです。

でも、そのなかで「VBA習得にとって一番重要」なのは、「ワークシート関数操作」です。

まずは「入力、セル操作、ピボット操作、フィルタ操作、並べ替え、グラフ操作、」を頑張って、そのあと、「ワークシート関数」を頑張って、「関数とは何か?」を会得するといいと思います。
  

というのも、VBAの命令は1000個以上あり、いろんなカテゴリに分かれていますが、
どんなカテゴリに分かれていても、
おおむね以降の(a)~(e)の、
『 5つの「自作関数」の「動き」のどれかにあてはまる 』
からです。(逆に言うと、5つしかない。)

(※その際、「引数」というものや「既定値」というものを持つ/持たないなども
  ありますが、それも含めて。)
  

例えば、ExcelVBAの命令だけに限って言えば、

・演算子、
・各種VBA関数(Excel専用、Office共用、など、いろいろ)、
・WorksheetFunctionオブジェクトのメソッド、
・プロパティ、
・メソッド、
・ステートメント名(ステートメント用の「キーワード」)、
・API、
などなど・・・、
のカテゴリがあり、
そしてこの Excelの場合だけでも、合計で「1000個以上」の命令単語があります。
  

が、それらの命令単語はそのように、様々にカテゴライズされて、
『 使うシーン・操作対象・書き方は異なりますが 』、
でも、
「基本的には」「すべて」「以降の(a)~(e)の5つの自作関数の動き」の、
「どれか」に、
「あてはまり」ます。
  

使うシーン・操作対象・書き方(構造)が異なるので「呼び方が異なるだけ」・・・。

「本質・動き、は全部同じ」、と思ってください。
  

なので、最初にワークシート関数で「関数」についてその仕組みを学んでください。

(※ただ、ワークシート関数だけでは学べませんが、
  特に、「オブジェクトを返すタイプの関数」、
  の意味・仕組みを知ることが重要です。)
  

では、以降、その(a)~(e)の、5つの動きです。
  

(a)「一般データ」を返すこと「だけ」しかしない自作関数
  (=もちろんオブジェクトは返さない)

(b)「何らかの動き」をしつつ、同時に、「一般データをも返す」自作関数

(c)「オブジェクト」を返すこと「だけ」しかしない自作関数
  (=もちろん一般データは返さない)

(d)「何らかの動き」をしつつ、同時に、「オブジェクトをも返」す自作関数

(e)何も返さずに、「何らかの動き」だけをする自作関数
  

※「一般データ」とは、数値、文字列、日付、Ture/Falseの2値、などの
  「文字系(言わば2D)」の生データのことをさします

※「オブジェクト」とは、何らかのモノを動かすための
  「装置(あるいはユニット、部品、あるいは、
   Excelという工場で働くミニミニロボット)」
  のようなイメージです。
  言わば、「3D的な装置」のイメージの「モノ」のことをさします。
 (「モノ」というより、ほんとは「データや命令の集まり」という感じ
  なのかも知れませんが、でもそう考えてしまうと初心者のうちは
  かえって分かりづらく・ややこしくなるので、
  あえて、「モノ」という理解のほうが良いと思います。)

※ そして、「プロパティ」や「メソッド」は、
 「特定のオブジェクトのなか」「だけ」でしか「動けない」、あるいは、
 「特定のオブジェクトと」、「一緒(セット)」「じゃないと」、「動けない」、
  そういう、
  「命令」たち、です。
  そして、もう少し詳しく言うと、
  「特定のオブジェクトと」、「一緒(セット)」「じゃないと」、「動けない」
  かつ、「自作関数と似た動きをする」、
  そういう、
  「命令」たち、です。
  呼び出し方法、名前付き引数、カッコの有無、などのルールは、
  自作関数(=自作のプロシージャ) でのルールと同じです。

※ ここで言う、「何かしらの動き」とは、

  「一般データ操作の場合」であれば、
       主に「四則計算、検索、変換、置換、比較、切出し、
       日付や期間の設定、True/False(=Yes/No的な意味)の決定、などなど」、
       (料理で言うと「下ごしらえ」的な動き・処理です)

  「オブジェクト操作の場合」であれば、
       主に、「開く/閉じる、追加、削除、フィルタ、並べ替え、
       Excel操作としての検索、変換、置換、比較、切出し、抽出、
       外部データ接続と吸込み、グラフ作成、
       メッセージ表示、などなど」
       (料理で言うと「メイン調理」的な動き・処理です)

  をさします。

  そして、多くの場合、両者は1つのプロシージャの中で混在します。
  あるいは、前者を「更に・関数化」することも多いです。
  

ステートメント名や演算子といった命令「以外」の命令・・・つまり「プロシージャ系の命令」といいますか・・・、例えば、各種関数、プロパティ、メソッド、イベント、、などの命令は、すべて、、「自作」もできますが、それについても、上記の5つのどれか、にあてはまります。
「列挙」や「列挙に含まれる定数」は微妙ですが、ただ、「列挙に含まれる定数」は、(文字系の)一般データを「返す」、・・・というか「評価される」という、「”返す”とほぼ同じような動き」を取ります。
  

色々とゴチャゴチャと書いてしまってすみませんが、いずれにしましても、

「プロパティ」「メソッド」「ステートメント名」といった「呼び名」に惑わされないようにしてください。(「プロパティ」は厳密には関数ではない?かもですが、プロシージャと呼ばれるものを使って自作することも可能です。「メソッド」はプロシージャを使って自作でき、Subで始まるものは「値を返さないメソッド」、Functionで始まるものは「値を返すメソッド」とExcelが自動認識するようになります。「値」とは、一般データかオブジェクトかの2つに1つです。)

この5つの動きと「式」という単位の考え方を身に付けると、だいぶ、VBAがシンプルに考えらえるようになると思います。

がんばってください。

  
  

では、以降で、どの組込の命令が、(a)~(e)にあてはまるかの大雑把な例を示します。

  

★★★ (a)「一般データ」を返すこと「だけ」しかしない自作関数(オブジェクトは返さない)

これは特に「プロパティ」という命令に多いです。
もちろん、そういう動きしかしない自作関数にもあります。
  

※補足
より厳密(?)に言う(?)と、プロパティの「PropertyGetプロシージャ」というものに多いです。

実は、「プロパティ」は、3つの「Propertyプロシージャ」と呼ばれるタイプのプロシージャ(自作関数のようなもの)でできています。

「PropertyLetプロシージャ」
「PropertySetプロシージャ」
「PropertyGetプロシージャ」

の3つです。

(※特に自作のプロパティは。組込みのモノも同じような感じだと思います。)

このうち、
「PropertyLetプロシージャ」
「PropertySetプロシージャ」
は、
「プロパティ項目に値を代入(=書き換え等々)するとき」に使われます。
例えば「Let Activesheet.Range("A1").Value = 100 」みたいな・・・。

(Letは、プロパティの値が一般データの場合に、その新しいプロパティ値を代入する場合、に使い、
 Setは、プロパティの値がオブジェクトの場合に、新しいプロパティ値を代入する場合、に
 使いますので、いずれか片方を使う・・・、ということになります。
 ただし、VBAには「値の設定ができないプロパティ」、つまり、
「値を返す=ゲットする、ということ”だけ”しかできない!」というタイプのプロパティが
 存在するのですが、
 それについては、「PropertyLetも「PropertySetも」「両方共が」、「無い・使われてない」
 という感じになります。)
  

それに対して、「PropertyGetプロシージャ」は、プロパティ値をゲット(取得)するときに使われます。
「 変数名 = Activesheet.Range("A1").Value 」みたいなことをしたいときに、使われています。

で、「PropertyGetプロシージャ」は、特に計算云々をするわけでもなく、
「ただ、プロパティの値を返すだけ」という動きをとる形になります。

なので、今回ここで言っている、
『 これは特に「プロパティ」という命令に多いです。 』
というのは、厳密には、
「PropertyGetプロシージャ」
と呼ばれる
「自作関数的なモノ」のことを言っています。
  

もちろん、計算云々をしながら、値を返す「PropertyGetプロシージャ」もあるかもしれませんが、
そうじゃない、特に何もせず、値を返すだけのモノも多い、ということなんです。

そこまで厳密に言うと、すこし混乱してしまうと思いますが、
ご自分で
「オブジェクトを返す」
「オブジェクトと一般データの違い」などを理解してもらったうえで、
「自作のクラスモジュールと自作のプロパティ」というものを作る体験、
そしてその自作のプロパティの値を返したり代入したりをしていただくと、
理解ができるようになると思います。
https://www.limecode.jp/entry/difference/propertylet-propertyset などをご参照ください。 )

そこまでまだ到達していない方は、
ここでは「ふーん。そういうことがあるんだな~」くらいに思って頂いて、
『 これは特に「プロパティ」という命令に多いです。 』
というくらいの理解の仕方で、現時点では、良いと思います。

なお、
「PropertyLetプロシージャ」と
「PropertySetプロシージャ」は、
「代入する」という動きだけをする、だけ、なので、(a)~(e)の中での分類をするとすれば、
(e)の「何も返さない」「何らかの動きだけをする」「自作関数的なモノ」・・・に属するかもしれません。(僕も良く分かってないです)
  

だいぶ「大雑把」にまとめますと・・・、

「一般データやオブジェクトを返す ”だけ”で値を設定できないプロパティ」は、
「PropertyGetプロシージャ」「1つだけ」のプロシージャ(自作関数的なモノ)を使っていて、

「一般データを返したり設定したりできるプロパティ」は、
「PropertyLetプロシージャ」と、
「PropertyGetプロシージャ」の、「2つ」のプロシージャ(自作関数的なモノ)を使っていて、

「オブジェクトを返したり設定したりできるプロパティ」は、
「PropertySetプロシージャ」と、
「PropertyGetプロシージャ」の、「2つ」のプロシージャ(自作関数的なモノ)を使っている・・・、

というイメージになります。

  
  

★★★ (b)「何らかの動き」をしつつ、同時に、「一般データをも返す」自作関数

これは「VBA関数(Excel専用、Office共用、など、いろいろ)」「WorksheetFunctionオブジェクトのメソッド」などに多いです。
「演算子」もここです。引数は無いですが、引数に相当する部分があり、似た動きをします。引数相当のデータをモトに、計算や比較をしてその結果(答え)をユーザーに投げ返してくれます。

  
  

★★★ (c)「オブジェクト」を返すこと「だけ」しかしない自作関数(=もちろん一般データは返さない)

オブジェクトを返すこと「だけ」しかしないタイプの組込の「プロパティ」と「メソッド」がそれにあたります。

・Application.Workbooksプロパティ、
・Workbook.Worksheetsプロパティ、
・Workbook.Sheetsプロパティ、
・Worksheet.PivotTablesメソッド(プロパティではなくて、なぜかメソッド)、
・Worksheet.QueryTablesプロパティ、
・各種コレクションの中に含まれる、「Item」という名前のプロパティやメソッド
  (ここでも何故かメソッドが居る)、
などなど。
  

※注意
「WorkbooksプロパティやWorksheetsプロパティ」など、は、
「Workbooksコレクションオブジェクトや、
 Worksheetsコレクションオブジェクト」を
「返す=ゲット(取得)」するだけの動きしかしません。
実際に、単一のブックやシートを「返す=ゲット(取得)」する動きをするのは、
それらのコレクションオブジェクトの中に含まれている、
(=それらのコレクションオブジェクトの「メンバー」の)、
「Item」という名前のプロパティやメソッド、です。

例えば、「Sheetsプロパティ」 が直接、「Sheet1」という単一のワークシートを返す=ゲットしているわけではなくて、
Sheetsプロパティ がゲットした「Sheetsコレクションオブジェクト」・・・、
その中に含まれる「Itemプロパティ」が、
「Sheet1」という単一のワークシートを返す=ゲットしています。

これは、単一のシートやブックを返す=ゲット=取得する、場合についても同様です。
  

「Item」は、基本・省略されるので、「Sheetsプロパティ」が直接単一のシートをゲットしていると誤解しがちです。
そう理解(誤解・錯覚)してしまうと、オブジェクトモデル(階層構造)を理解できずに、
オブジェクトブラウザもヘルプも読めなくなります。
ウォッチウィンドウもまともに読めなくなる危険性もはらんでいます。
「バカになるだけ」ですので、
ExcelVBA(特にオブジェクト階層構造)が、まだよく理解できていないうちの「Itemの省略」は、
絶対にやめましょう。

クラスモジュール(自分独自のオブジェクト)を自分で作る体験をすると、
そのクラスモジュールのなかにおいて、
「Funciton プロシージャ」というタイプの自作関数を作った場合は、
「値を返すメソッド=ここでの(c)」として自動認識され、
「Sub プロシージャ」というタイプの自作関数を作った場合は、
「値を返さないメソッド=ここでの(e)」として自動認識されます。

例えば、「PivotTablesメソッド」は「PivotTablesコレクションオブジェクト」を返す=ゲットする命令ですが、オブジェクトブラウザで調べると、その説明ペインには「Function」と書かれています。そこから、「あ!PivotTablesメソッドの実体は Functionプロシージャなんだ!」と分かります。

  
  

★★★ (d)「何らかの動き」をしつつ、同時に、「オブジェクトをも返す」自作関数

オブジェクト操作を含むタイプの「プロパティ」と「メソッド」が多いです。

これは、「新規追加」ができるタイプの単一オブジェクト・・・
例えば、シートやブックや検索条件やセル範囲の名前定義や、テーブル機能、ピボット、クエリ、などなど・・・を束ねている、
「各種のコレクションオブジェクト」の
「Addメソッド」や
「Openメソッド」などなど・・・
に多いです。

新規追加する、開く、などの動きを取りながら、同時に、その新規追加や開いたモノを、
オブジェクトとしてユーザー側に「返す」動きをします。
(Openについては「開く」という動きができるモノのみ。)
  

あとはCreateObject関数とか、GetUbject関数などのVBA関数も同じような動きをします。

  
  

★★★ (e)何も返さずに、「何らかの動き」だけをする自作関数

何も返さないメソッド、ステートメント名、など。

基本、ここには「プロパティ」は、1つもありません。
(多分ですが、無い、と思います。もしかしたら例外があるのかもしれませんが)

「ステートメント名(ステートメントようのキーワード)」には、フロー制御系だけではなく、(メソッドめいた)テキストファイル操作系、フォルダ操作系、ハードウェア操作系、オブジェクト操作系、など、色々とあり、引数を持つものもあります。

ちなみにですが、
AppActivate ステートメント の AppActivateキーワード(ステートメント名のひとつ)や、
SendKeys ステートメント の SendKeysキーワード(これもステートメント名のひとつ)には、
「引数」もあったりして、ますます、メソッドめいています

これらが『 なんで「ステートメント」なのか? 』良く分かりませんけど・・・。

「ステートメント」のなかには、なぜか、「オブジェクトブラウザ」に載っているものがあり、それは「Call」で呼び出せたりします。
例えば
「SendKeys」ステートメント(=「SendKeys」というキーワードを使ったステートメント)は、
SendKeys("{Enter}")
などと書いて動作させますが、
「SendKeys」は、
Call SendKeys("{Enter}")
と「Call」を使っても呼び出せます。

とっても、メソッド的、関数的、です。

同様に、
ChDir、ChDrive、Kill、などのキーワードも、ステートメント用のキーワードなのに、にもかかわらず、オブジェクトブラウザにも載っており、その説明ペインに「Subプロシージャだよ!?」と書いてあります。
また、これもSendKeysやAppActivate 同様、なぜか「Call」で呼び出せるようです。
テストしてみると分かりますが、エラーにはなりません。
理由は、わかりません。

プロの人に聞いてください。理由を知らないプロの方も居るでしょうけど・・・。
  

以上の自作のプロパティやメソッドなどについても、上記の「5つの動き」「5つの自作関数」のどれか、にあてはまります。

  

すみません、以降の「★★★★★ 更に、重要な補足 ★★★★★」のことを書いたので、自分自身が電池切れで、ここまでしか、まとめ直せませんでした。
  

でも、メインどころはおおむね、まとめ直せたと思いますので、もしご参考になれば幸いです。
  

========================
★★★★★ 更に、重要な補足 ★★★★★

※ ここ最近思っているのですが、
VBAのすべての命令は、「プロシージャ系の命令」と「非プロシージャ系の命令」に分けて考えるのも意外と良いかもしれません。
というのも、『 演算子、各種関数、WorksheetFunctionオブジェクトのメソッド、プロパティ、メソッド、イベント、ステートメント名、定数(列挙に含まれる)、API、etc 』などの、「すべてのVBA の ” 組み込みの ” 命令」のうち、その7割以上はどうやら「プロシージャ系の命令」っぽいらしく、その動きも作り方も呼び出し方も、何もかもが「よく似ている」からです。

逆の方向から見ると、
「一番最初に」
「プロシージャ」というモノのことを、
  その、作り方、動き(前述の5つの動き)、呼び出し方、名前付き引数の使い方、
  ByVal/ByRefの省略、プロパティ・メソッド・クラスモジュールとの関係性、
  便利さ、その他諸々、を、
「深く学んでおけば」、
また、
「返す・評価・式」、「オブジェクト」、「 ” オブジェクトを返す ” の意味」
をちゃんと学べば、
「VBAの9割以上の命令単語のことを理解できる」
とか、
「真の基本の ” クラスモジュール ” の自作、プロパティやメソッドの自作できる」
等々の、
「その素地を」、
「比較的、短期間のうちに」
「つくれる可能性が高くなる」という、そういう、
「メリットが生まれる」
とも思うからです。

「プロシージャ」は「Subプロシージャ」と「Functionプロシージャ」「Propertyプロシージャ」の3種類がありますが、VBAの7割以上の命令単語は、これらの3つのプロシージャのうちのどれかで書かれている=作られているっぽいです。
(作られたあとの「動き」としては、前述の(a)~(e)の「5つ」の動きに分類されますが。)

また、プロシージャ系の命令単語たちは、基本、「オブジェクトブラウザ」に載っています。
なので、オブジェクトブラウザで検索して出てくる命令単語は全部、「関数、メソッド、プロパティ、一部のステートメント名」などのカテゴライズの差異はありますものの、でも、全部、「プロシージャ系の命令」と捉えて良い、と思います。

ちなみにですが、僕が、命令単語たちを「5つの動き」でカテゴライズしているいる理由は、「ステートメント名」が、オブジェクトブラウザに載ってたり載ってなかったり、また「Call」で「 ” 呼び出せちゃう ” ものもあったり」、と、結構いいかげん?でハッキリとした区別がつけられないから、「どう区分していいか分からないから・・・」というのも理由の一つです。
もちろん、一番大きな理由は、「値を返す・返さない」が『 「式」という「単位」でモノを考えられるようになり(そこへつながりやすくなり)、「返す」や「評価」で「型の確定」を明確化できる 』ため、「無駄なエラーを激減できる」というメリットがあるからと、また、「オブジェクトを返す・返さない」、などが「 ” VBAの真のスタートラインの1つ ” であるから」、というのも理由ですけど。
あと、ExcelVBAのプロの奴らの説明も「ハッキリしないしメチャクチャでいいかげん」というのも「かなり」大きな理由です。自分で言うのもなんですが、VBAの命令たちは、前述の「5つの動き」や「プロシージャ系か否か?」などで分類する方がまだ「まとも」、くらいにすら思ってしまっています。
それくらい、「プロの奴ら」を信用しなくなっています。
あいつらの説明じゃ、クラスモジュールが作れてもなかなか本質を理解できません。
あいつらの説明じゃ、分かった気にさせられるだけ(ある意味騙されるだけ)で、でも結局、「ヘルプもオブジェクトブラウザも読めるようにはなりません」。結果、すぐに、また行き詰って、わからなくなって、しまいます。「もしかしてカモられてるだけ?」と勘繰りたくなるほどです。
当然、「応用」など「できるわけがありません」。
だから、知恵袋でも、今回僕がした回答とその質問が、700閲覧以上をしてもらえたのかもしれません。
(もちろん、エラそうなこと言ったところで・レジェンドたちに文句を言ったところで、、「5つの動き」、なんてことだって、結局は、決して分かりやすくはないかもしれないですけど・・・・。でも、Vlookup関数すら使ったことがない「Excel一般操作もそのVBAも」「初心者レベルの僕」だって、ヘルプやオブジェクトブラウザ読めばここまでわかるのに、なんでプロの奴らはもっと本当のことや「素人がヘルプとオブジェクトブラウザをすぐに読めるようにするオリジナルの考え方」を教えようとしないんですかね?本当に理解に苦しみます。プロだなんて言って「しょぼ。エラそうに。自称じゃない?」と勘繰りたくなってしまいます。)


とりあえず、VBAのすべての命令単語のうち、「ほとんどのステートメント名(オブジェクトブラウザに載っていないモノ)」と「演算子」は、「明確に」、「プロシージャ系の命令ではない」っぽい、です。つまり、「完全なる」「非プロシージャ系の命令」っぽいです。
(まあ、実はそれは「間違い」で「プロシージャ系の命令」なのかもしれませんが・・・)

「Call利用やLet利用、オブジェクト式利用、などでは呼び出せない」、「プロシージャ系の命令たちからは除外された」、そういう命令・・・、というイメージになります。

もちろん「非プロシージャ系の命令」であっても、前述の5つの動き、の「どれか」にはあてはまりますので、そこは誤解・錯覚のございませんよう、お願い致します。
(※ただし、「ステートメント名」のなかには、「オブジェクトブラウザ」に載っているモノがあるのですが、それは「Call」で呼び出せてしまいます。なのでそのステートメント名はプロシージャ系の命令なのかもしれません。)

いっぽう、「プロシージャ系の命令」には、前述のとおり、各種関数、プロパティ、メソッド、などがありますが、みんな動き(=前述の「5つの動き」)や、使い方(=カッコや名前付き引数の使い方など)、のルールは同じです。
(呼び出し方だけは「プロパティ」の場合は少し異なりますが。)

「イベント」や列挙(Enum)に含まれる「定数」などは、ステートメントや演算子よりもオブジェクト寄り、といいますか、プロシージャ寄りといいますか、「プロシージャに近い」命令単語です。
が、SubやFunctionのプロシージャのようにCallでは呼び出すことはできないので、「非プロシージャ系の命令」に分類してもいいかもしれません。
(でも「イベント」は自作できるので「プロシージャ系」かも?ちょっと良く分かりません。自分だけの勝手な分類なので、なんともいえません・・・・)

プロシージャ系の命令は、多分、全部、「Call利用やLet利用オブジェクト式利用、で」呼び出せる=、「Call利用・あるいは・Let利用・オブジェクト式利用、等々で」呼び出してもエラーにならない、と思います。
「ステートメント名」と「演算子」は、「Call利用・あるいは・Let利用・オブジェクト式利用、等々で」呼び出すとエラーになります。
基本、「SubプロシージャとFunctionプロシージャ」は、「Call利用」だけで呼び出せます。
組み込み関数も、「Call」だけで呼び出せます。
「Call」で呼び出してもエラーにならないです。
メソッドも「Call」「だけで」とは言いませんが、「Call」で呼び出せるっぽいです。
(メソッドの場合、「Call」と共に「オブジェクト式」が追加で必要ですが、でも、「Call」ベースで呼び出せることには違いはありません。)
そもそも「Call」という命令は、「SubプロシージャとFunctionプロシージャ」を呼び出すため「だけ」の命令単語なので、よって、逆に、「Callを使って呼び出してエラーにならない」なら、
「その命令の実体は」、
「Sub か Function のプロシージャでは?」
と言えると思います。

更に言うと、例えば「.dll」という拡張子のファイルを、例えば「VB6(VisualBasic6)」などで自作する時も(ActiveXDll、COMタイプ?のDllのみ)、中身に、「Sub や Function などのプロシージャを書いて」、作ります。
(参考Web記事01 → VBAで使えるDLLの作成方法01(VB6での「ActiveXDll=VBA の参照設定で使えるDll」の作成。Declare ステートメントでは呼びだせないモノ。VB6で作ったものはExcel2000で使えますが2010などでは使えません。)
それらを「参照設定」などをすると、その「.dll」の中に書いた「SubかFunctionのプロシージャ」を、関数やメソッドのように「Call」で呼び出して使えます。
上記のサンプルのdllでは、「Debug.Print 」で呼び出している事例だけですが、多分、「Call」でも呼び出せるはずです。
<参考図>

↑ でもたぶん、これは「関数」ではなくて「メソッド」ですね。たぶん。「関数」なら多分クラスの列のアイコンが「モジュールアイコン」じゃないといけない気がするので・・・。これオブジェクトアイコンだから、「オブジェクトと一緒じゃないと動けない関数めいたものに相当する」ので=メソッド・・・ですよね。きっと。また、これはワークシート関数としては使えませんでした。なので余計に「関数じゃない」っぽいですね。)

上記のDLLの中身のコード。↓
↓Excelだけでなく、WordからもAccessからも使えます。

(参考Web記事02 → VBAで使えるDLLの作成方法02(Declare ステートメントで呼びだせるモノ。の作成。) ※Declare ステートメントで呼び出すタイプのDLL(API?)は Callできるかちょっとわかりませんが、もちろんできるモノもあります(普通はできるはずですよね?)。例えば他の「sndPlaySound 」APIの sndPlaySound などの命令も、「Callとカッコ」で呼び出せるので。この ↑ の事例では、VC++6で作られていて、SubやFunctionで作られたプロシージャを呼び出しているわけではないですが、でも、「Msgboxで呼び出せてる」ので、できると思います。)

以上のようなことからも、例えば「メソッド」や「関数」のように、カテゴライズ時の「呼び名」は異なっていても、「Callで呼び出してもエラーにならないという命令単語は」、
「その本質は、SubかFunctionのプロシージャではないか?」と、
「推測が立つ」、
ということになります。

例えば
「Application.Workbooks.Open "D:\1\test.xlsx"」

「Call Application.Workbooks.Open("D:\1\test.xlsx")」
と「Call」を書いても呼び出せます。
(Callで呼び出すときは、引数リストをカッコで囲む必要があります。Callを使わないときは不要です。)

これでエラーが出ないので、「あ、これはCallを付けてもエラーにならないから、Workbooks.Openメソッドは、プロシージャ系の命令で、SubかFunscitonのどっちかだな?」、「なら、戻り値があるかもだからそれが使えるかも?」「名前付き引数もカッコも使い方はプロシージャと同じはずだ」、と「推測ができる」ということになります。
そうなると、「メソッドというもの自体」が、少し怖くなくなります。

もちろん、メソッドを「Call」で呼び出す場合は、Callだけではなく、メソッド名を書いた場所の直前の部分に「オブジェクト式+ドット」も必要ですが。でも「Callで呼び出してもエラーにならないことには変わりはありません」。
(※「.dll」=ダイナミックリンクライブラリ=VBAで言う、特にオブジェクトブラウザで言うところの「ライブラリ」の種類のひとつ、です。)

プロパティの場合は、Callと違って、「何かの明確な命令単語を使って呼び出す」という感じではないですが、「オブジェクト式+ドット」に続いてプロパティ名を書くことで呼び出せますし、また「何らかの動きを取りながら」、何かを「返す」、ということができることには変わりはないと思います。

「返す」という動きから、これも、なんらかの「プロシージャ系の命令と捉えられるのかも?」と推測が成り立ち、少し怖くなくなります。
  
  

今回は以上です。
  

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

バックナンバー目次とサンプル号

★独学者が1年後にExcelVBAを爆発的に伸ばすための最低限の基礎知識メモ(ダイジェスト):~バックナンバー~

----------------------------------------------------------------------
■独学者が1年後にExcelVBAを爆発的に上達させるための最低限の基礎知識メモ(ダイジェスト)
発行システム:『まぐまぐ!』 http://www.mag2.com/
配信中止はこちら https://www.mag2.com/m/0001691660.html
----------------------------------------------------------------------