● 用語:ExcelやWordにおける「マクロ」とは?VBAと何が違う?(「ExcelやWord自身」は「マクロ」をどう判別・区別しているか?)Accessの場合は?
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
目次
 ★ はじめに(超重要!!必ずお読み下さい!!特にシステム構築の経験のない初級講師の方。)
 ★ ExcelやWordで言うところの「マクロ」とは?(Accessは除く)
 ★ 前項の「マクロ」の定義からはずれるVBAプログラム(おおきなくくり)
 ★ 「マクロの記録」で自動的に作られたVBAプログラムはどこに書かれるのか?
 ★ リボンの「開発」タブの「マクロメニュー」から呼び出されるモノは何か?
 ★ クイックツールバーのユーザー設定の「コマンドの場所」ドロップダウンの「マクロ」から呼び出せるモノは何か?
 ★ 汎用的かつ、一般的な、再利用の利く「VBAプログラム(=プロシージャ)」に書き込まれている書き込み要素
 ★ ExcelやWordの「マクロの記録」で書かれたプログラムと、ユーザーが手作業で書くプログラムとの違い(「マクロの記録」が汎用的にならない理由)
 ★ Accessの「マクロ」はどうとらえたらいい?
※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。
  
  
※参考記事
SubプロシージャやFunctionプロシージャの呼び出し可能方向(実行できる場所・方法)について.pdf
↑↓ Ctrlキーを押しながらマウスのホイールを回して、拡大して見てみてください。
文字がおおきくはっきりと見えてきます。

  
  
=========
以下、本文です。

★ はじめに(超重要!!必ずお読み下さい!!特にシステム構築の経験のない初級講師の方。)

ExcelやWordにおける「マクロ」とはいったいなんでしょう?
「マクロ」と「プログラム」の違い、とかもよくわかりません。
そもそも「マクロ」とは「マクロ経済」の「マクロ」と同じで、「巨視的」という意味だと聞きます。

ExcelやWordでは「VBAプログラム」が書けます。
そして、「マクロ」と「VBAプログラム」の違いも、今いち、我々初心者にはよくわかりません。

なので、ここでは、「ExcelやWord」を擬人化して、その目線の「マクロ」について、用語としてお話したいと思います。

ExcelやWord自身が、自らの中で定義している「マクロ」のこと、例えばどこからどう呼び出せて、どう修正できるのか等々を知ることで、例えば「マクロの記録」を「コスパアップ」に結び付けることができると思います。そのほかにもいろんな「気づき」を得られると思います。

ちなみにですが、「マクロの記録」の機能で作ったマクロは、確かに汎用的にはなりませんが、でも、決して「役に立たない」機能ではありません。
特に「表示系」「セル書式系」「その他書式設定系」等々の操作(=セルへ値を入力したりセルの内容を読み込んだりしない操作など)では、「マクロの記録」で作ったマクロをリボンやクイックツールバーに「ボタン化」することでお仕事の効率アップに少なからず貢献できます。ぶっちゃけ大変に便利です。

というわけで、以下の5つの記事もご参考にしてくださいませ。

『「マクロ」のリボンへのメニューボタン化・関連の記事5つ』→12345

  
  
ところで「マクロの記録」といいますと・・・・「役立たず」とか「VBAのオブジェクトについて調べることくらいしか役に立たない」とか言われてしまったりします。
でも、実際はそんなことはありません。
「マクロの記録」は使い方・使いどころをしっかり考えれば、ちゃんとお仕事のコスパアップに結び付きます。
逆を言えば、『なんでもかんでも最初から全て「汎用プログラム」をつくれば絶対にコスパアップできる』とは『限りません』。
考えてみてください。昔から・・・、” 今もあいかわらず ” 、「作ったけども使われなかった不便なシステム」というゴミシステムが繰り返し生み出されています。
そして、それらは全部、「プロ」が作ったものです。全部、「汎用プログラム」です。
昔から「多少は減ったとしても無くなることが絶対にありません(実は減ってすらいないかも?複雑・高度になっている分、オーバースペックだったりでむしろ増えているかも?)。
そのことこそが「汎用プログラム・役に立たず」を、「証明」しています。
ExcelVBAにあてはめて考えれば、「マクロの記録」機能を利用して自動化・あるいは半自動化して「まずはそれを使い」、そのあとに、そこではじめて、使用頻度や機能追加要望などを加味して、「それを汎用化するべきかしないべきかを検討する」、というステップを踏まないと「汎用プログラム」は「ゴミ」と化す場合が意外とあります。(もちろん全部とは言いません。)
逆に、「マクロの記録を使ってデータの管理の ” コスパ ” のアップ」が図れるシーンが、「確実に」あります。そして「Excelをそこそこお仕事に使う人」なら、そのシーンが、実は、「少なくありません」。(特に個人レベルで使ったり、レイアウト関係の自動化などで。まだVBAの初心者のうちとか、そもそもVBAを全く知らない人とかも。)
「マクロは役立たず」と決めつける方々は、そういうことや「コスパ」というものをまったく考えず、「すべてのシーンで」「無条件に」いきなり「汎用プログラム」を作ろうとします。そして「マクロの記録」機能をバカにします。
もっというと、「VBAを知っているだけ程度ごとき」で「おごり」、また、「データの持ち方の基礎やSQL 、ADO/DAO、QueryTableオブジェクト、ピボットVBA」すら知らない・教えない・広めようとしない「僕と同じド素人」のくせに、また、「そもそもデータ管理の基礎やSQLなどを知らず、Excelを紙と電卓の延長としてしか使えないくせに・その使い方しか知らないくせに」、エラそうに「安易に」よく考えもせず、「全部」汎用化しようとして「メンテしづらい無駄なVBAプログラム」を「量産」します。あるいは、そういう方法・手法を教えようとします。広めようとします。
そして「使われない汎用プログラム」を作るのです。「使われないシステム」と同じです。使用頻度が低いのに汎用化したり・要望と遠いものを作ってしまったりして、結局、それを作った時間は全部パーです。
経営者目線で見れば、ある意味給料泥棒です。『 汎用プログラム 』って偉そうに威張ったところで、パズルやって遊んでるに等しいです。ばかばかしいことです。でも『 汎用プログラム 』って「見ただけ」だと大変そうだから経営者はわからないです。で、騙されてしまいます。Excelのプログラムでは、WordやAccessのプログラムよりも、「より、効率が悪く・質の低い・かつ無駄で本来は要らないプログラム」が増えることが決して「少なくない!」のですが、大変残念ながら、当然それは経営者には見抜けません(プログラミングの学習をしてないいわけですから当然です)。でもそれをいいことに無駄なプログラムを書いて仕事をした気になっている「汎用プログラムを妄信するExcelプログラム書きの人や講師さん連中」が決して少なくないです。
僕みたいなド素人が見ても、SQLが一か所も使ってなかったり、マクロの記録の機能の部分活用が一か所もできてなかったら、その方は「コスパをまったく考えないことが明白な」ダメExcelプログラマーや講師さんです。すぐに給料減らしてもいいか、契約を切ってもいいくらいです。

厳しいことを言うようですが、でも経営者目線から「正直に」言うと、害悪以外のなにものでもないと思います。
「ゴミ汎用プログラムなんか作っとらんで、そんなゴミ作っとるあいだに、ほかの役に立つ仕事せんかい!お取引先の××君がマクロの記録機能で3分で作ってくれたヤツのほうがみんな使って効率が上がっとるやないかい!!」っていうケースだってあるのです。
自分で使うだけなら勝手にすればいいのですが、そうではなく、例えば「組織内で、他人に使わせる・彼らの習熟度によって変える必要性がある」という場合、「自動記録で作ったマクロを汎用的になるように即座に部分的に修正できる」、「作ったマクロをメニュー化できるよう教育する」、「汎用化するかどうかを判断するまでのテストプログラムという位置づけで、自動記録のマクロをそのまま使ったり、一部修正したものを活用」ということもコスパアップに十分つながります。)
そもそも、「自分は営業との兼任社内SEなので、いちいち、考えて作ってるヒマなんかない。」とか、「汎用マクロ作ったところで ”使いこなせない” ユーザー、マクロの記録機能で作ったこぢんまりしたプログラムのほうが、”ミスが少ない” ユーザーだっている」わけですから。

「そんなことない。慣れればこのくらいのコード、10分もあれば書ける」という市販書籍著者などもいますが、「そうなるまでに、どんだけ時間かけて、どんだけ繰り返し練習しなけりゃならないかもちゃんと言わないと卑怯でしょう?!」と言いたく(痛く)なります。
誰もがすぐに「10分で書ける」ようになんて、なるわけがないんです。
今のそのシーンに「合うエラーの出ないモノ」を書く・・・そうなれるまでに、少なくとも何十時間、人によっては何百時間必要か・・・。
「あなたはそれが仕事なんだからやれて当然でしょう?営業と事務の兼務の人間は本業があるからそうすぐには覚えられないんです!あなた、そういう人間のコスパのことなんか真剣に考えたことないでしょう?!しかもプロが僕たちド素人(初心者の読者)にマウントしてこないでください!恥ずかしいと思わないのですか?プロならプロにマウントしたらいかがでしょう?

人格の高いホンモノの講師さんは、「10分で書ける」などと、絶対にそんなことを言ってマウントなどしてきません。でも、しっかりと、僕たちド素人を導いてくれます。そういう人を知っています。」と返しておきたいと思います。


そもそも、そういうことを言う人は、あろうことか、初心者に向かって「俺ってすごいだろ?10分で書けちゃうよ!」と「なんの役にもたたない自慢」をしたいだけなのです。
人間性が低すぎます。
ホント、「専門バカ」になってしまうと、「マウントしたがり」の「結局・自慢話ばっかり」で辟易しますよね、それでは「自慢したがりの、時代に取り残された一番嫌われる上司」と同じ・・・ということになってしまいます。

特にお若い方々は、そういう「専門バカ」になってしまわれないように、どうか、どうか、十分にお気を付けくださいませ。

それでは、以降で、「マクロ」とは何かの1つの考え方をお話しさせていただきます。

よろしくお願いいたします。
  
  

★ ExcelやWordで言うところの「マクロ」とは?(Accessは除く)
(どんな視点で「マクロ」を捉えるとExcelVBAやWordVBAがわかりやすくなるか?)

とりあえず「ExcelとWordだけ」の話ですが(Accessは異なります)、この2つのソフトでは、「マクロ」は・・・

・シートモジュールだろうがブックモジュールだろうが、
・標準モジュールに書かれていようが何だろうが、
・自動で生成されようが手作業で書こうが何だろうが、
・「Sub」あるいは「End Sub」で終わるプロシージャ。
・標準モジュールは「Public Sub」で始まるモノもOK。
(ユーザーフォームのモジュール・クラスモジュールは「Sub」「Public Sub」両方ダメ。)

・・・という風に、ExcelとWord自身はそうとらえているようです。

そのようなプロシージャは、下図のような画面に必ずリストアップされて出てきます。

例えば、「イベントプロシージャ」と呼ばれるものであっても、その1行目の先頭部分の「Private Sub」を「Public Sub」に書き換えると、「ExcelやWord」は、それを、「マクロ」としてとらえ始めます。そして、上図の中にリストアップされます。(ついでに言うと、他のシートモジュール、ブックモジュール、標準モジュールのプロシージャからも呼び出せるようになります。もちろんそれまで通り、イベントプロシージャとしても継続して動きます。)
つまり、「マクロ」メニューから(つまり上図の画面から)、そのイベントプロシージャが実行できるようになります。(エラーで止まる場合もあるかもしれませんが、でも、「マクロ」として動かすことが、一応はできるようになります。※もしエラーが出ないなら、「もしイベントが発生していなくても」、「強制的にイベントプロシージャを呼び出して動かせる」、ということにも「是非はともかくいちおうは」つながります。

上記の画面に、そのようなイベントプロシージャも出てくるようになります。
  
  
そんな定義をしておくと、リボンやクイックツールバーなどとのからみ、その他のからみから言うと、分かりやすい & 便利に使える、のではないかと思います。
(くどくてすみませんが、Accessの「マクロ」の場合は異なります。)

Excel自身やWord自身に「マクロ」として認識されたものは、リボンやクイックツールバー、シート上に配置したコマンドボタン、オートシェイプや画像などからも呼び出せますので・・・。
(ホント、くどくてすみませんが、Accessの「マクロ」の場合は異なります。)
  
  
もうすこし具体的に言うと、次のような感じです。

・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』

※上記、すべて、「Sub」の前に「Privateをつけてないもの」、だけです。
(また、ユーザーフォームやクラスモジュールは「Sub」も「Public Sub」も両方ダメです。)
  
  
少なくとも、リボンやクイックツールバーなどをカスタマイズする場合、ExcelやWord自身は、自分の中でそう判断しています。

そして、

・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』

すべて、「VBAプログラム言語」で書かれています。
一番最初の「マクロの記録」のやつはExcelやWordが自動的に書いてくれて、後は全部エンドユーザーが自分で手作業で書きます。

なので、少し言い方を変えると、ExcelやWordの「マクロ」とは・・・、
・「VBAプログラム言語」で書かれた、
・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』

・・・とも、定義することができると思います。

※注意事項
「標準モジュールに書いてある Subプロシージャ」の場合、「Sub」よりも前(先頭)に「Private」がついていると、リボンの「マクロ」メニューからは呼び出せませんが、「その Private Sub プロシージャが存在するモジュール内のみの他のプロシージャ」「だけ」・・・、からは呼び出せるっぽいです。

(関係ないかもですが、Callで呼び出せないプロシージャの場合、「Application.Run "Book1.xls!test1")みたいな感じで、
「Application.Run ブック名!プロシージャー名,引数」
ということで「Application.Run」という命令を使うと呼び出せる場合があります。)
  
  
★ 前項の「マクロ」の定義からはずれるVBAプログラム(おおきなくくり)

VBAプログラムの最小単位は、「プロシージャ」と呼ばれるものです。
そして、VBAには以下のような種類のプロシージャがあります。

(ア)Subプロシージャ
(イ)イベントプロシージャ(Subプロシージャの仲間)
(ウ)Functionプロシージャ
(エ)Propertyプロシージャ

例えば(ア)の「Subプロシージャ」なら、「Sub」と書いた行から「End Sub」と書いた行までがひとくくり・1単位です。

同様に、(ウ)の「Functionプロシージャ」なら、「Function」と書いた行から「End Function」と書いた行までがひとくくり・1単位です。

なお、(ア)と(ウ)は、「シートモジュール、ブックモジュール、ユーザーフォームモジュール」と呼ばれる場所、あるいは、「標準モジュール」と呼ばれる場所に書けます。

(イ)は「シートモジュール、ブックモジュール、ユーザーフォームモジュール」、には書けますが、「標準モジュール」には書けません。(多分。)

(エ)は「クラスモジュール」と呼ばれる場所にしか書けません。

・・・というわけで、前項の、

ExcelやWordの「マクロ」とは・・・、
・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』
・・・という定義からすると、

「VBAプログラム」の中でマクロと呼べるのは・・・、

(ア)のSubプロシージャ

・・・だけで、残りの・・・

(イ)イベントプロシージャ(Subプロシージャの仲間)
(ウ)Functionプロシージャ
(エ)Propertyプロシージャ
(あと、「Sub」の前に「Private」をつけたSubプロシージャも)

・・・は、「マクロ」とは呼べない、と言っても(ほぼ)良いと思います。

※「ほぼ」と書いたのは、厳密にはFunctionプロシージャはリボンなどからも呼びだせるからです。が、Excelが「マクロ」としては認識しない中での呼び出しとなりますし、最初の図のようなダイアログにはリストアップされないので、まあ、「マクロと呼ばなくても問題ない」という意味で、「ほぼ」と書きました。
(間違ってるかもしれないので詳しくはプロの方に聞いてください。)
※例外的ですが、(イ)のイベントプロシージャ(Subプロシージャの仲間)は、基本的には「Sub」の前に「Private」がつきます。が、前述もしましたが、その「Private」を「Public」に書き換えると、「マクロ」として認識されるようになります。

  
  
★ 「マクロの記録」で自動的に作られたVBAプログラムはどこに書かれるのか?

「マクロの記録」でいわゆる「マクロ」を作成すると・・・、

・まず「Visual Basic Editor」と呼ばれるVBAプログラムを書くための画面の中に、
・「標準モジュール」と呼ばれる「白紙状態」のシート
   (=「マクロ」を書き込むための場所)が、勝手に自動的に生成(=挿入)され、
・そしてその中に自動的に「Subプロシージャ」=「マクロ」が

・・・書き込まれます。
  
  
そして・・・、

・その自動生成された「Subプロシージャ」が、
・さらに自動的に、「1つのマクロ」として

・・・ExcelやWordに認識されるようになります。
(ホントにくどくてすみませんが、Accessの場合は異なります。)
  
  
なお、エンドユーザーが「Subプロシージャ」を手動で作る場合は、ユーザー自身が手作業で、まず「Visual Basic Editor」の画面の中に「標準モジュール」と呼ばれる「白紙状態」のシートを新規追加(=挿入)します。

そして、その中に、手作業で「Subプロシージャ」を作る形となります。

なお、「マクロの記録」で自動でマクロを作成する際に、その作成場所(保存する場所)に、「作業中のブック」ではなく「個人用マクロブック」を指定すると、「xlsx拡張子のファイルであっても動くマクロ」を作成できます。(下図参照。下図は「作業中のブック」を選んでいる場面です。)

「マクロ」は、基本的にはxlsx拡張子ではなく、xlsm拡張子のExcelファイルでないと保存ができません。(xlsx拡張子の場合はテスト作成とテスト稼働まではできますが、「保存」ができません。なので、動かない、と同じ意味になります。)

しかし、「個人用マクロブック」に作った「マクロ」は、xlsxファイルであっても「保存」ができます。
そして、すべてのxlsx、xlsm上で動かせます。つまり、すべてのxlsx、xlsm、両ファイルの「共用のマクロ」となります。
そのため、「個人用マクロブック」に作った「マクロ=SubやPrivate Sub で始まるプロシージャ」は、リボンやクイックアクセスツールバーに「ボタン化」して置いておくと、「どのExcelファイルからも呼び出せる便利なプログラム」、という扱い・使い方できます。

「セルの書式設定変更」や「選択したテキストボックスや矢印の書式変更」などで、よく使う設定をメニューボタン化しておくととても便利です。

(※注:
基本的には、「個人用マクロブック=Pesonal.xlsb(xls)」に書かれたマクロは、それが自動に書かれたものでも、手動で書いたものでも、リボンやクイックアクセスツールバー、シート上に作った図形やコマンドボタン、などからは呼び出せます。
また、「xlsm」拡張子のファイルはもちろん、「xlsx拡張子のファイルであっても」、同じく、リボンやクイックアクセスツールバー、シート上に作った図形やコマンドボタン、などからは呼び出せます。
が、ただし(例えばAccessしか知らない人などにはちょっとした盲点なんですが)、「個人用マクロブック=Pesonal.xlsb(xls)」に書かれたプロシージャであっても、「xlsm」拡張子のファイルのVBAプログラムの中から呼び出したい場合は、「Call」という命令では呼び出せませんので、「Application.Run」という命令を使う必要があります。が、「引数」というものを持つタイプのモノは正常に動かない場合もありますので注意が必要です。Callで呼び出したい場合は、「アドインファイル」なるものを作って、その中にプロシージャを書く必要があるそうです。詳しくはプロの方に聞いてください。)
  
  
「個人用マクロブック」に作った「マクロ」は、初回は、「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART(%userprofile%\AppData\Roaming\Microsoft\Excel\XLSTART)」というフォルダの中に「Personal.xlsb」というファイルが自動生成され、そのファイルの中に「標準モジュール」が自動生成され、その中に自動的にマクロのVBAコード(=Subプロシージャ)が書き込まれていきます。

逆に、上図のように「作業中のブック」を選ぶと、xlsx拡張子の場合は、そのファイルを保存するとき・閉じるときにせっかく作ったマクロがすべて消滅してしまいます(xlsx拡張子の場合は、セキュリティ確保のため、そういう決まりになってしまっています)。
xlsm拡張子の場合は、消滅せず、標準モジュールの中にきちんと保存されます。

※「Personal.xlsb」は、「個人用マクロブック」を選んだ初回のみ自動作成されます。2回目以降ではさらに作成されることはありません。また、2回目以降で「個人用マクロブック」を選んだ場合は、選ぶ度に、その「初回に作成されたPersonal.xlsb」の中にそのまま、マクロ(=Subプロシージャ)が自動で追加・蓄積されていきます。
「Personal.xlsb」を、自分で手作業で作った場合は、「非表示」設定にする必要があります。でないと、「Personal.xlsb」が必ず開いて表示されていまうので・・・。

以下の図の右下のほう等々も参考にしてみてください。

※参考記事
SubプロシージャやFunctionプロシージャの呼び出し可能方向(実行できる場所・方法)について.pdf
↑↓ Ctrlキーを押しながらマウスのホイールを回して、拡大して見てみてください。
文字がおおきくはっきりと見えてきます。

  
  
※「Personal.xlsb」のかわりに、既存の「Personal.xls」も使えるようです。Excel自体の動きがおかしくなるかもしれないので あまりお勧めはしませんが・・・。
(「Personal.xls」のすべての内容を「Personal.xlsb」に移植した場合はOKです。)
「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART(%userprofile%\AppData\Roaming\Microsoft\Excel\XLSTART)」のフォルダの中にコピペすれば使えます。
ただし、その際は、「Personal.xls」を「非表示」の設定にしておく必要があります。
でないと、何らかのExcelファイルを開いたときに、「Personal.xls」もいっしょに開いて表示されてしまうからです。
「Personal.xlsb」も「Personal.xls」も、Excelが自動生成してくれた場合は、自動的に「非表示設定」にしてくれています。
また、「Personal.xls」を使いたいなら、「Personal.xlsb」は使えませんので、どこかに移動します(つまり、入れ替えるだけ。xlsbは大事なプログラムが消えてしまうといけないので安易に削除しないでください)。
お互いにプログラムの移植は可能です。
  

  
★ リボンの「開発」タブの「マクロメニュー」から呼び出されるモノは何か?

下図の画面から呼び出される「マクロ」の正体は何か?ということです。

これは前述しました、

・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』

です。
下図参照。「マクロ名」の下のリストの中にあるものは、その1行1行が ひとつひとつの「マクロ」です。

※後述の「Personal.xlsb」あるいは「Personal.xls」の中のそれらも一緒です。

以下の4つの記事もご参考に。

『「マクロ」のメニューボタン化関連の記事4つ』→1234
  
  
  
  
★ クイックツールバーのユーザー設定の「コマンドの場所」ドロップダウンの「マクロ」から呼び出せるモノは何か?

下図の画面から呼び出される「マクロ」の正体は何か?ということです。

こちらも、前述しました、

・『「マクロの記録」メニューで標準モジュールに自動生成された「Subプロシージャ」』
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Subプロシージャ」』
 (Subの前にPrivateがついていないもの。)
・『VBE画面のすべてのシートモジュールとブックモジュール、標準モジュールに手作業で書いた「Public Subプロシージャ」』
・『イベントプロシージャの「Private」を「Public」に書き換えたもの』

です。

※後述の「Personal.xlsb」あるいは「Personal.xls」の中のそれらも一緒です。

以下の4つの記事もご参考に。

『「マクロ」のメニューボタン化関連の記事4つ』→1234
  
  
  
  
★ 汎用的かつ、一般的な、再利用の利く「VBAプログラム(=プロシージャ)」に書き込まれている書き込み要素

一般的に、手作業で書くVBAプログラム=プロシージャ)には、以下のような要素が書き込まれています。

(a)生データや変数(一般的な変数かオブジェクト変数のいずれか)、配列、定数
(b)演算子
(c)関数
(d)ステートメント(分岐処理、繰り返し処理、エラー処理、などの基本構文)
(e)オブジェクト式とオブジェクトの5つの機能(プロパティ、メソッド、イベント、階層構造自由往来機能、ユーザーが入力した入力値)
(f)列挙(列挙型/列挙体)
(g)列挙用の組み込み定数的なもの
  
  
★ ExcelやWordの「マクロの記録」で書かれたプログラムと、ユーザーが手作業で書くプログラムとの違い(「マクロの記録」が汎用的にならない理由)

一般的に、(限定的ではない)汎用的で再利用しやすいプログラムを作るには、前項の(a)~(f)のような書き込み要素が「すべて」必要です。

しかし、ExcelやWordの「マクロの記録」によって自動的に書かれたVBAプログラムには、以下の要素しか自動的に書き込まれません。

(e)オブジェクト式とオブジェクトの5つの機能のうちの3つ(プロパティ、メソッド、ユーザーが入力した入力値)
(f)列挙(列挙型/列挙体)
(g)列挙用の組み込み定数的なもの

次のものはスッポリと抜け落ちてしまっています。

(a)生データや変数(一般的な変数かオブジェクト変数のいずれか)、配列、定数
(b)演算子
(c)関数
(d)ステートメント(分岐処理、繰り返し処理、エラー処理、などの基本構文)
(e)オブジェクト式とオブジェクトの5つの機能のうちの2つ(イベント、階層構造自由往来機能、)

特に、(a)~(d)は汎用的かつ、再利用できる便利なプログラムには必要な書き込み要素です。
でも「マクロの記録」で書き込まれたプログラムは、この(a)~(d)がスッポリと抜け落ちてしまっています。
さらには、(e)も、「イベントや階層構造自由往来機能」は抜け落ちてしまっています。

以上のようなことから、「マクロの記録」で書き込まれたプログラムは、「限定的なプログラム」とならざるを得ません。

「”汎用プログラム作成”のための書き込み要素の抜け落ちが大きいため」、「限定的なプログラムとならざるを得ない・・・」ということです。

そのため、「マクロの記録は限定的にしか使えなないから役に立たない」というエンドユーザーや、下手をすると講師もいるのですが、ただ、それは間違っています。

ユーザーの習熟度とコストを考えた場合、「マクロの記録」で作ったプログラム(Subプロシージャ)は、作り方・使い方次第では「戦力」に「十分」なりえます。(もちろん「オブジェクトについて調べるだけ」という消極的な使い方だけではなく。)

例えば、「セルの値を操作するマクロ」の場合は、確かに限定的になってしまって扱えないこともあります。でも、それでも、それをちょっと部分修正すればほぼ汎用的になって使える場面が増えるマクロだってあります。
ほかには、たとえば、セルの値をいじらない・・・、
・「セル書式を変更する」マクロ、
・「よく使うテキストボックスや矢印をフォント設定や境界線設定などを既に行った状態でワンクリックで表示させるマクロ、
・きまりきった「列変更+拡大縮小+列挿入+数式入力+セル設定+ウィンドウ固定等々30工程」などをワンクリックで実行してくれるマクロ
など、リボン(特にアドインタブにて)やクイックツールバーに「ボタン化」しておくと、とても便利です。
作表の準備のための操作や、作表に使う操作などをマクロ化&ボタン化しておけば、いちいち数段階のメニューをたどらずとも作業がしやすいです。
そういったプログラムを作るのに、「プログラムの中身をきれいにしたい」と、いちいち、Webでオブジェクトを調べてマクロ化・ボタン化するのはバカらしいです。時間コストと金額コストの無駄遣いです。そして実際「専門バカの方々」はそれをやってしまいます(そんなのあとから書き換えることなんて、あんましないのですけどね・・・。)。
そういうものを作るときこそ、「マクロの記録」機能の出番です。

「マクロの記録は役に立たない」と豪語している人は、こういうことを考えません。
「プログラムが書ける人間が偉い」と思っているのです。
大変残念なことなのですが、「思い込みと決めつけ」が激しいタイプの方だと思います。
でも、現実には、「別に汎用プログラムが書ける人が偉いんじゃなくて、低コストで問題が解決できる人のほうが偉い」んです。
「それについて、汎用プログラムが必要なら書く」「マクロの記録機能であってもコスパが良くて問題解決できるならそれでOK」、というだけのことなんですが、「汎用プログラムが必要のない・でもExcelでの自動化の要求されるシーン」にまで汎用プログラムを書こうとするのは、本当にエラそうに書いてしまってすみませんが、経営者目線で言うと「専門バカと呼ばれても仕方のない方」「遊んでるだけのかた」がやってしまうミスです。

経営側の方や、人事の方、独立して自分でデータ管理を自動化しなければならない方、そういう方々はそういう考え方が必要です。
「Excel職人」とよばれるかたや「ExcelVBAの専門バカ」とよばれるかたの中には、「コストをまるで考えない」とか、「そもそも、 ” データ管理のコスパをVBAよりは10倍は良くするSQL ” がExcelで使えることすら知らない」という方がが「少なくない(というか、すごく、多い)」ので、本当に、注意が必要です。

そしてそういうシーンは、Excel操作では意外と少なくないのです。
特に大きな説明シートや、Wordならマニュアルを書いたりするような場面では多いと思います。
(「マクロの記録」機能を使うことは、プログラミングがあまり分からない人でもできます。)

そのほか、「本当に汎用化するかどうか決めるまで、マクロの記録でつくったものや、それを半汎用にアレンジしたものでやる。プラス、一部、手作業で。それで今のところ十分」、ということだってできます。「コスト」のことを考えるなら当然そういう場面もあります。

「マクロの記録は役に立たない」と豪語している人は、そういうことも考えません。
結局は、「役に立つように機能をコーディネイトする能力がない、ある意味、無能な人」「使える機能の良さを見ようとせず、デメリットばかりほじくり出し、使えないと決めつける無能な人」、「無知の知ができない人」、あるいは「試すことすらしない知ったかぶり」の可能性が高いひとです。

こういう人は、同僚やお客様にもそういう態度をとる可能性が高いひとだと思います。

そして、「コスト(時間コスト・金額コスト)」のことも全く考えません。

もちろん、「マクロの記録」機能だけしか使えない・・・・、というのは逆に問題があるので、「汎用プログラムも作れないといけない」、「両方作れないといけない」というところはありますが・・・。
でも、「両方作れる人間」が、「100%すべて・最初からいきなり汎用プログラムばかり作ろとして」しまい、「マクロの記録機能をTPOに合わせて生かせない・活かせない」というのなら、それは、経営的・人件費的・データ管理運営コスト的に見て「愚か」以外の何物でもありません。
もっというと「無駄なVBA書いたくらいで仕事した気になってる給料泥棒」的な要素さえ、あるかもしれません。

ご注意ください。
  
  
★ Accessの「マクロ」はどうとらえたらいい?

Accessのマクロは、自動記録ではありません。
手作業で「アクション(コマンド)」をドロップダウンから選んで作ります。

例えばですが、以下のWeb記事をご参考にしてみてください。
Accessのマクロを編集するには

Accessでは上記のようなものを「マクロ」と呼んでいます。

このような「Accessのマクロ」を作成した時点では、VBAとは何の関係もありませんが、ただしAccessの場合「マクロをVBAに変換する」という意味のメニューがあるので、それによってVBAプログラムに変換したマクロは、Excelと同じような「雰囲気」になります。
(「標準モジュールの中に自動作成されるSubプロシージャ、という部分とか、変数や定数、関数やステートメントなどは使われないといった点だけ。)

ただし、VBAに変換はされても、Access自身は自分の中でそれを「マクロ」とは認めません。

Accessが自分の中で「マクロ」と認めているのは、「Accessのマクロを編集するには」のような形で作った「マクロ」だけです。

  
  
★ マクロの記録の事例(操作手順とともに)

(01)マクロの記録をするための、走査の書き出し例
1 A列全体を選択
2 空白の列を挿入
3 A1セルを選択
4 そこへ「連番」と入力
5 連番と入力してEnterしたので、自動的にセルの選択がA1へ移動
6 数字を1と入力してEnter
7 数字の2を入力
8 オートフィルをしたいので、A2とA3のセルを選択
9 A3の右下の角をダブルクリックしてオートフィル(A78までに1~始まる連番がオートフィルされます。)(プログラム側で「A78」までなのは、このマクロの記録をしたときに、表(=データ)が、たまたま 78行分しかなかったから。)
10 B列全体を選択
11 空白の列を挿入
12 「F1」セル=「平均ページ滞在時間」のセル、を選択
13 それを普通にコピー
14 「B1」セルを選択
15 コピーした「F1」セルの内容をペースト(貼り付け)
16 B1セルの文字列を「平均ページ滞在時間」から「平均ページ滞在時間2」に変更
17 B2セルを選択
18 B1の数式を、「F1列の値÷60」に設定。(F1の値は秒なので、分単位に直したいため。)
19 B2セルを選択
20 数式をB78セルまでダブルクリックでオートフィル(B列のすべての行に秒単位ではなく分単位の数値が入る。)
21 セル書式を小数点2桁までに変更
22 セルC3を選択
23 セルC4を選択
24 C列の中の、「~Webページの長々としたサイト名~」の部分を置換操作によって消す。
25 画面表示を75%に変更
26 C列の幅を102.13ポイントに広げる
27 A2セルを選択
28 ウィンドウ枠を固定
  
  
(02)それをもとにマクロの記録を実行し、自動生成されたプログラム