- ベストアンサー
エクセルのマクロ、Modulu、プロシージャ及び記録したマクロの名称について
- エクセルのマクロやModulu、プロシージャ、記録したマクロの名称について説明します。
- マクロの記録をする際には「Macro1」という名称がデフォルトで使われます。
- 作成したマクロやモジュールはVisuai Basic Editorで確認できます。マクロの中身は「Sub クリア()」です。Call文を使用する際には注意が必要です。また、マクロやモジュールの名称は変更することができます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> その下にツリー表示で Module1となっていたので >「なぜマクロを記録した時に「印刷」としたのにModule1となっているのか?」と思い、 > Module1 → 印刷 に変更しました。 もう何度も説明したとおり、モジュールとSubプロシージャは違うものです。 一つのモジュールシートにたくさんのSubプロシージャを書くことができます。 先ほどの回答どおり、Subプロシージャ名とモジュールシートを同じ名前にしてはダメです。 > すべてプロシージャー(Sub ※※※)の※※※部分が表示されるという認識は正しいですか? おおむね正しいですが違う場合もあります。 例外はそれぞれマクロを記載した複数のBOOKが同時に開いている場合や個人用マクロブックを作成している場合などです。 > 逆にマクロの記録の時にMacro1のまま記録しその後 > ・Module1 → 印刷 > と変更していても > Sub Macro1()なら、Macro1と表示されるで合っていますでしょうか?。 言ってることがよくわかりませんが、Subプロシージャ名はMacro1のままで、Macro1が記録されたModule1の方の名前を「印刷」に変更したということですか? それならもちろんSub Macro1()なら、Macro1と表示されます。 でも、なんの必要があってモジュールシートの名前をわざわざ変えるのですか? Subプロシージャ名なら何をするマクロなのかわかるようにMacro1と言う名は変える場合がほとんどですが、モジュールシートの名前をかえる意味がわかりません。 あまりたくさんマクロがありすぎて、1つのモジュールだけだと探すのが大変になり、マクロの機能別にモジュールシートを複数に分けてそれぞれに名前をつけたというのならわかります。 でも初心者のうちはあまり複雑なことはやめましょう。
その他の回答 (5)
- layy
- ベストアンサー率23% (292/1222)
名称を変えてはダメ、ではありません。見て何やっているかわからせるのはいい事です。 例えば、Macro名として印刷としたいならMac印刷、Module名ならMod印刷、等名前の付け方を少し工夫すれば良いのです。一般的な接頭語はどこかにまとめてあるとは思います。全く同じ名前をつけるのはEXCEL判断できません。 1つのModuleには、クリア以外のSUBがあったりして複数記載できますから、入力関係の処理はModule1に記載してMod入力関係、印刷関係はMod印刷関係、みたいに用途で分けるという作り方あります。 ※Mod印刷とかここでは説明のため和名で記載しましたが、実際はMod_PRINTとかの英語かローマ字が多い感じです。
お礼
退社した人物から譲り受けたエクセルファイル。 マクロが40個登録されています。 Macro1....Macro40 Module1....Module40 マクロ文には説明文が入っていません。 どれが生きていて、どれが未使用で、どれがどのボタンに 貼り付いているのか不明でした。 マクロ1個づつ動作させ、 これは印刷、これは入力、これは変換、これは未使用、 とかわかった物は Macro1→印刷 とかにしようと思いました。 作成した(されていた)ボタンで「マクロの登録」を開くと Macro1....Macro40いう表示で わからないので、 Sub Macro1() → Sub 印刷()とかに変更して行きました。 でVisuai Basic Editorで見るとModulu1....Module40でこれまた 不明で、こちらの名前もかえました。 とたんコンパイルエラーが出て困りました。 でエクセルに1個のマクロとイベントチェンジを登録して実験しましたが こんがらがってきましたので、質問をしました。 質問内容は譲り受けたエクセルファイルの件ではなく テスト用に作成したシンプルな物です。 でこれでもコンパイルエラーになったので質問しました。 Macro1 Modulu1 の件、やっと仕組みが理解できました。 その上でアドバイスしていただいた方法なら 大丈夫とわかりました。 ありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
No1,No3 merlionXXです。 > Module2を印刷という名称に変更したとたん > 「コンパイルエラー モジュール名ではなくプロシージャー名を入力してください。」 > と出ました。 あたりまえです。 印刷という同じ名前のプロシージャとモジュールができてしまったのですから。 先ほどは追加で質問されたのでモジュール名の変更方法をお答えしましたが、なぜモジュール名を変えるなどという余計なことをする必要があるのですか? ご質問のエラーのうち「モジュール名ではなくプロシージャー名を入力してください」は、モジュール名と同じ名前のSubプロシージャ名を作った(変更した)ためと思います。 あと、Subプロシージャ名も同じ名を作ればコンパイルエラーになりますよ。
補足
申しわけありません。 まずマクロの記録において、 前述のとうり最初のウィンドーに「Macro1」と出ます。 あじもそっけもないと思い、「印刷」と名称を変更してマクロの記録をしました。 でツール → マクロ → Visuai Basic Editor → 標準モジュール をクリック その下にツリー表示で Module1となっていたので 「なぜマクロを記録した時に「印刷」としたのにModule1となっているのか?」と思い、 Module1 → 印刷 に変更しました。 とたんにCall 印刷()がコンパイルエラーになりました。 名は体を表したいと思い、 ・Macro1 → 印刷【Sub Macro1() → Sub 印刷()】 ・Module1 → 印刷 がいいと思ったのですが、これは駄目なのですね。 また、オートシェイプで作成したボタンにカーソルを当て右クリックで 「マクロの登録」を選択すると「登録するマクロを選択するウィンドー」が出ます。 ここに記載される数々のマクロは すべてプロシージャー(Sub ※※※)の※※※部分が表示されるという認識は正しいですか? よってマクロの記録の時にMacro1 → 印刷としてしまうと ここは「印刷」と表示される。 逆にマクロの記録の時にMacro1のまま記録しその後 ・Module1 → 印刷 と変更していても Sub Macro1()なら、Macro1と表示されるで合っていますでしょうか?。
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo1 merlionXXです。 > その下にツリー表示で Module1 とあり、それをクリックすると > ・Module1 > ・Module1 > ・オートオープン > ・初期化 > となっています。このオートオープンとか初期化はどうするとこのツリー部に > この日本語で表示ができるのでしょうか? Module1 が二つあることはないのでは? 日本語名のモジュールについては、Module3とかModule4の名前を変更しただけだと思います。 変更の手順は以下のとおりです。 プロジェクトエクスプローラで名前を変更したいモジュールを選択 ↓ メニュー[表示]-[プロパティ]をクリック ↓ プロパティウィンドウの[(オブジェクト名)]欄で名前を変更し、 [Enter]キーを押す。 上記の操作で、プロジェクトエクスプローラに表示されていたモジュールの名称が変更されます。 確定の[Enter]キーを忘れずに押してくださいね。
補足
>Module1 が二つあることはないのでは? すいません。 Module1 Module2でした。 Call 印刷 でコンパイルエラーがでました。 最初の説明のとうり標準モジュールのツリーにModule2があります。 これを開くと、 Sub 印刷() となっています。 で別のマクロ Private Sub Worksheet_Change(ByVal Target As Range) 省略 Call 印刷 でこの印刷はキチンと走ります。 先ほど教えていただいた方法で Module2を印刷という名称に変更したとたん 「コンパイルエラー モジュール名ではなくプロシージャー名を入力してください。」 と出ました。 名称をModule2→印刷に変更後の中身は 変更前も変更後も Sub 印刷()でした。 再度 名称を印刷→Module2に戻したら キチンと走って印刷されました。 >確定の[Enter]キーを忘れずに押してくださいね。 これは確実にしました。 このあたりがModule名とプロシージャー名にて不快な部分です。
- layy
- ベストアンサー率23% (292/1222)
確かに、EXCELの機能、プログラム名、処理名、ファイル名、らを「マクロのxx」と言う言い方で片付けているのはあります。 ALL-ABOUT-JAPANのサイトで「マクロとVBAの基本概念」という説明があります。まだ見ていない場合は参考に。
- merlionXX
- ベストアンサー率48% (1930/4007)
> ・マクロの記録をした時はMacro1 これはデフォルト(当初の設定でそうなる)の名前ですね。 > ・Visuai Basic Editorで見るとModulu1 Module1でしょ?これはマクロがかかれた場所です。 > ・マクロの中身はSub クリア() これがマクロの名前であり、Subプロシージャーです。 > ・Call 作成したマクロ はい、この「作成したマクロ」の部分に相当するのが、「クリア」になります。 他のプロシージャーから呼び出すときは Call クリア のように書きます。(Callをつけなくとも呼び出せますが。) それでエラーがでるなら名前の綴りを間違っているか、適切でない名前を付けたか、Subの前にPrivateがついているかでしょうか。 どんな場合にエラーメッセージがでますか? > ・Call 印刷 > とかで動作する場合もあります。これは偶然動いているのでしょうか? Sub 印刷()というプロシージャがあれば動きます。 なければ動きません。 > また名前を変更した場合 > :Sub クリア():の部分は自分で > :Sub リセット():と書き換えるのでしょうか? :の意味がわかりませんが、 Sub クリア() の名前をかえるなら、 Sub リセット() と書き換えます。
補足
>ツール → マクロ → Visuai Basic Editor → >標準モジュール をクリック >その下にツリー表示で Module1 とあり、それをクリックすると ・Module1 ・Module1 ・オートオープン ・初期化 となっています。このオートオープンとか初期化はどうするとこのツリー部に この日本語で表示ができるのでしょうか? どうやってもModule※で作成されてしまいます。 マクロの記録の時にMacro※ → 初期化 とかに変更すれば ツリー表示に初期化と表示されるのではないのですか? オートシェイプなどでボタンを作成して、そのボタンにマクロを登録する時は この場合ですと、クリアとかオートオープンで選択ができます。 ここのModule1を開くと例のようにSub クリア()となっています。 オートオープンを開くとSub Auto_open()です。 ここらあたりの結びつきが良く理解できません。 >Sub クリア() の名前をかえるなら、 >Sub リセット() と書き換えます。 こうするとModule1の表示はリセットにかわるのでしょうか? >:の意味がわかりませんが、 すいません。意味はありません。 >それでエラーがでるなら名前の綴りを間違っているか、 >適切でない名前を付けたか、Subの前にPrivateがついているかでしょうか。 >どんな場合にエラーメッセージがでますか? Privateはつけてありません。名前の綴りも大丈夫です。 エラーが出た物はCallの後が日本語だから駄目だと思い 削除しました。 また同じ状態になったら文を列記して質問してみます。
お礼
退社した人物から譲り受けたエクセルファイル。 マクロが40個登録されています。 Macro1....Macro40 Module1....Module40 マクロ文には説明文が入っていません。 どれが生きていて、どれが未使用で、どれがどのボタンに 貼り付いているのか不明でした。 マクロ1個づつ動作させ、 これは印刷、これは入力、これは変換、これは未使用、 とかわかった物は Macro1→印刷 とかにしようと思いました。 作成した(されていた)ボタンで「マクロの登録」を開くと Macro1....Macro40いう表示で わからないので、 Sub Macro1() → Sub 印刷()とかに変更して行きました。 でVisuai Basic Editorで見るとModulu1....Module40でこれまた 不明で、こちらの名前もかえました。 とたんコンパイルエラーが出て困りました。 でエクセルに1個のマクロとイベントチェンジを登録して実験しましたが こんがらがってきましたので、質問をしました。 質問内容は譲り受けたエクセルファイルの件ではなく テスト用に作成したシンプルな物です。 でこれでもコンパイルエラーになったので質問しました。 Macro1 Modulu1 の件、やっと仕組みが理解できました。 どうもありがとうございました。