マクロ管理の基本とは?

このQ&Aのポイント
  • マクロを効果的に管理する方法を学びましょう。
  • マクロを分けて保存し、管理するための基本的な考え方を紹介します。
  • マクロ管理のための参考書やウェブサイトも紹介します。
回答を見る
  • ベストアンサー

作ったマクロが増えてきて、どう管理したらよいか

Excel2007を会社で使っていて、業務に小さなマクロを作って作業に利用しています 今まで何も考えずにPERSONAL.XLSB内にいくつもマクロを組んでいたのですが 最近どのマクロがいつ何のために作ったのかが把握できなくなってきました。 また、Publicで宣言した変数を関係ないSubプロシージャが読んでしまうという失敗もしてしまいました PERSONAL.XLSB 内でPublic変数を宣言すること自体良くなかったのでしょうか。 他にも「エクセルでマクロを表示すると全て表示されてしまうのでSubプロシージャを"Personal Sub"にすると良い」 と聞いたのでやってみたところユーザーフォームから呼び出せなくなってしまったり…… もう少しマクロ同士を分けて保存したり、管理したりするという方面の知識が必要だと感じています。 マクロの管理方法の常識、みたいなものはあるのでしょうか、 自分はほとんど自己流でやってきたのでその辺りの知識が全くありません。 手持ちの教科書や参考サイトには作り方は載っていても、マクロをどう整理して管理したらよいかというのはあまり見当たりません。 基本にするべき考え方や、参考になる書籍などをどなたかご紹介いただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

【要旨】 Function/Subの内容に応じてPersonal.xlsbとは別のファイルに分割して 保存した上で、  a)Personal.xlsbと同様に、ワークシート関数としてや『マクロ』ダイアログから   の呼出を行うだけなら「XLStart」フォルダに保存   (→Function/Subを定義したのとは別のブックのVBAでは使用不可)  b)別のブックのVBAからも呼び出す必要がある場合は、『参照設定』を   使用   (→フォルダはどこでも可) といった使い分けをします。 なお、これらのファイルのワークシートが表示されていると、誤った編集の 元となり得るため、これらのファイルはウィンドウを「非表示」に設定します。 【詳細】 私も自己流なのですが・・・(汗) Personal.xlsbへの記録で事足りているということですので、自分専用で 使われているマクロと推測します。 Excel2003以前のPersonal.xls、同2007以降のPersonal.xlsbは、 マクロの自動記録を行うなどして一旦作成すると、次回以降はExcel を起動するたびに自動で参照可能になるため、特別なファイルと考えて しまいがちかもしれませんが、実際に『特殊』なのはこのファイルではなく、 このファイルが保存されている『XLStart』フォルダになります。 (Personal.xlsbに限らず、このフォルダに保存されたExcelのファイルは、  Excelの起動と同時に自動で起動されます:  マクロウィルスにはこの機能を悪用したものもあるので、注意が必要) <Personal.xlsbが既存の場合のXLStartフォルダの確認方法>  1)Alt+F11キーの同時押しなどでVisual Basic Editorを開く  2)【Personals.xlsbの適当なモジュール】を選択する  3)Ctrl+Gキーの同時押しなどでイミディエイト ウィンドウを開く  4)イミディエイト ウィンドウに以下の式を入力したら、Enterキーを押す   ?Application.VBE.ActiveVBProject.FileName  5)すぐ下の行にPersonal.xlsbファイルのフルパスが表示されるので、   フォルダを確認すればOk   ※別のファイルのパスが表示された場合は、「2」の手順を再度確認 また、VBAには『参照設定』という方法もあって、これを使用すると、 別のブックで定義したSub/Functionを使用することも可能です。 <参照設定の手順> 1)VBAのメニューで「ツール(T)→参照設定(R)」を選択 2)『参照設定』ダイアログが開くので、右側にある『参照(R)』ボタンを  クリック 3)『ファイルの参照』ダイアログが開くので、一番下にある『ファイルの  種類(T)』欄で「Microsoft Office Excel Files (~)」を選択 4)必要なファイルを指定した後、『開く(O)』ボタンをクリック 上記のようにファイルを分割すれば、例えばリボンの『開発』タブの 『マクロ』ボタンで『マクロ』ダイアログを表示させた場合は、Subの前に ブック名が表示されるので、(ブック名が適切であれば)それぞれのSub の内容を推測可能になるかと思います。 また、VBA上では、『参照設定』をしない限り他のブックのFunctionや Subを呼び出そうとするとコンパイルエラーとなるので、間違って使って しまうことも回避できます。 なお、上記でも書きましたが、通常の新規ファイルにマクロを記述した だけだと、上記のどちらの方法を使用しても、Sub/Functionを定義 したブック(のシート)が表示されてしまいます。 そのままですと、新規ファイルと間違ってセルに入力をしてしまったりする 元となりますので、リボンの『表示』タブの『ウィンドウ』グループ内にある 『ウィンドウを表示しない』ボタンを使用して、ファイルを非表示に設定 することをお勧めします。 (Personal.xlsbも、この設定が行われているため、通常、起動はして  いてもシートが目に触れることがなくなっています) http://pc.nikkeibp.co.jp/article/technique/20090521/1015308/?rt=nocnt ・・・長文、失礼致しました。

WatchGoo
質問者

お礼

おっしゃる通り Personal.xlsb が毎回勝手に起動してくれて便利なのでそこばかり使っていました。 同じ業務につかうマクロは同じブックに…等とするのがよさそうですね。 良く呼び出すようなプロシージャは参照設定で登録しておけばよい感じでしょうか。 いろいろと詳しく解説していただいてありがとうございます。 お返事遅れて申し訳ありません。

その他の回答 (1)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>今まで何も考えずにPERSONAL.XLSB内にいくつもマクロを組んでいたのですが 作成したエクセルを自分以外の人が操作する、ほかの人にも配布して使ってもらう 他の人が引き継いで、新しくマクロを組みなおす事がある などを念頭において作ることでしょうね。 基本は、それぞれのブックのモジュールに記述しておいて、ボタンなどのイベントにするのが 他の人から見てもわかりやすいです。 それと、マクロ記述時に コメントを挿入しておくことも、自分にも他人にも親切です。 PERSONAL.XLSBは、自分専用のマクロをとりあえず保存しておく よく使うコード集を保存しておいてコピペ用にとか云った具合にしか使っていません。

WatchGoo
質問者

お礼

ショートカットキーへの登録が主で、ボタンへの登録は習いはしたのですが面倒であまり使っていませんでした。 確かに他人に渡す時にはそちらの方がよいですね。 コメントについては自分でもわかっているのですが、どうしてもソースをいじる方にばかり頭がいってしまってよく忘れます。 一番のご回答ありがとうございました。

関連するQ&A

  • Excelのマクロ

    よろしく御願い致します Excel2007でマクロを作り「個人用マクロ」PERSONAL.XLSBに登録しましたそこで質問ですが、Excel起動のたび、前には作成した名前で開いていましたが、今は必ずPERSONAL.XLSBの画面が開きその後でファイル名で開きますがマクロをPERSONAL.XLSBに保存するとこう言うものでしょうか。 出来れば、マクロを使いたい時のみPERSONAL.XLSBで開きたいのです それと、オーズEX_12 オーズカレンダー.xlsと言うソフトを使いたいのでオーズカレンダー.xlsを開くと {このアプリケーションと他のExcelブックを 同時に使用することは出来ません。 他のブックを全て閉じてからもう一度起動してください} と表示されて、OKをクリックしても使用出来ませんが何か関係が有るでしょうか。

  • 【Excel2013】 マクロの一括コピー

    自宅PCをWin7 64bit & office2010 32bit から Win10 64bit & office2013 64bit へ買い替えました。 Win7で使用していたマクロ(PERSONAL.XLSB)をそのままWin10(C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Excel\XLSTART)へ保存してマクロが正常に動くのを確認しました。 しかし、Excel2013を再度開くと二重に開いてしまいました。 「Excel2013 二重に開く」で解決法をググっても「XLSTRATフォルダを削除」もしくは「PERSONAL.XLSBを作り直す」しか出てこなかったので、PERSONAL.XLSBを作り直して1個ずつコピペしました。 近々会社PCもWin7 32bit & office2010 32bit から Win10 64bit & office2013 64bit へ交換する予定ですが、マクロの数が20個以上あります。 自宅ではマクロの数が3個でしたので「PERSONAL.XLSBを作り直す」方法でもよかったのですが、20個以上あるマクロを1件ずつコピペするには膨大な時間と手間がかかります。 Excel2010のPERSONAL.XLSBからExcel2013のPERSONAL.XLSBへ一括コピーする方法はありませんか?

  • 個人用マクロブックについて

    ユーザー名 \AppData\Roaming\Microsoft\Excel\XLSTART のフォルダ内にある、PERSONAL.XLSB を開いた状態じゃないと、使用できなくなりました。 これでは、通常の各エクセルに保存しているマクロと同じです。。(むしろ、普段使用しないフォルダに入っているこのファイルを毎回開くほうが大変です。。 上記ファイルを開かないで、、 例えば、開発>マクロの記録 をクリックし、保存先を個人用マクロブックを選ぶと、 下記エラーが出ます。 " 起動フォルダにある個人用マクロブックは、記録のために開かれた状態でなければなりません。 " 上記ファイルを開かないで、、 例えば、開発のマクロを開くと、個人用マクロブックに保存したマクロは表示されません。 個人用マクロブックのお悩みによく出てくる、ヘルプ内の 使用できないアイテムも、念のためチェックしましたが、PERSONAL.XLSBの表示はありませんでした。 解決方法をご存知でしたら、教えてください。 どうぞ、よろしくお願いします。

  • Excel2010のマクロの記録について

    Windows 7でExcel2010を使用しています。 マクロの記録ボタンを押して、マクロの保存先を「個人用マクロブック」とすると 「起動フォルダーにある個人用マクロブックは、記録のために開かれた状態でなければなりません」 と出てきます。 色々検索をして調べてみました。 すると、ヘルプの中で「使用できないアイテム」を確認しましたか? という意見が圧倒的に多かったのですが、Excel2010のヘルプにはそんな物はありませんでした。 そこで、Alt+F11でVBAをあけてみて、左側のプロジェクト一覧を見たら、 atpvban.xls(ATPVBAEN.XLAM) VBAProject(Book1) VBAProject(FUNCRES.XLAM) があり、 Excel2007にあった VBAProject(PERSONAL.XLSB) がありません。 検索によるとPersonal.xlsbが必要なのかどうかわかりませんが、Excel2007にはそれがあり、記録もできました。 いったい、何が起こっているのかさっぱり分かりません。 個人的には、いつも「個人用マクロブック」が使えて、マクロの記録がどのファイルでもできたらよいと思っています。 どうすればよい顔してください。 よろしくお願いいたします。

  • エクセル マクロが表示&保存できません

    すごく困っているので教えていただけると助かります! エクセル マクロに関することです。 https://okwave.jp/qa/q6262479.html ↑ こちらに似たような質問がありますが、この解決法ではマクロ表示されませんでした。 状況としては以前まで問題なく使えていたマクロ記録が全て消えてしまい、個人用マクロブックが消えてしまったのかと思い確認してみると確かに存在していました。 よく見る解決方法として「ファイル」→「オプション」→「アドイン」→「管理」→「使用できないアイテム」→「有効にする」とありますが、ここには最初からPERSONAL.xlsbは表示されていませんでした。 もともとエクセルには詳しくないので、どなたかご教授いただければ幸いです。宜しくお願いいたします。

  • 個人用マクロブックについてなんですけど、何個作っても保存場所がみつかり

    個人用マクロブックについてなんですけど、何個作っても保存場所がみつかりません。「スタート」メニューの検索で「PERSONAL.XLSB」を検索するとファイルの保存場所を確認することができますとのことですがそれが該当しません。排除したいのにできません。Excel2007でWindows 7 です。ご教授お願いします。

  • WINDOWS XP EXCEL2003の環境で、個人用マクロブックP

    WINDOWS XP EXCEL2003の環境で、個人用マクロブックPERSONAL.XLSを作成しました。それに、ユーザー設定でツールバーとボタンを設け、ボタンにマクロ(PERSONALに入っている)を登録しました。PERSONAL.XLSは読み取り専用にしています。WINDOWS XP EXCEL2003では、問題はないのですが、別のPC(WINDOWS XP EXCEL2000)に、PERSONAL.XLS やツールバーのファイルをコピーして使ったところ、問題が発生しました。一つのEXCEL(EXCEL2000)で、複数のファイルを開く時は問題はないのですが EXCEL(EXCEL2000)を複数起動させ、ツールバーのマクロのボタンを押すと、次のメッセージが表示されてしまいます。'PERSONAL.XLS'と同じ名前のファイルが既に開いています。保存先が別のフォルダでも、同じ名前のファイルを同時に開くことはできません。2つめのファイルを開く場合は、一方のファイルを閉じるか、またはいずれかのファイルの名前を変更してください。 これは、EXCEL2000だから仕方のないことなのでしょうか?メッセージを表示させず、ツールバーのボタンのマクロを実行させる方法はないのでしょうか?

  • エクセル2007マクロで画像を表示

    マクロは変数やfor~nextなどを今、猛勉強中です。 アクティブシートにJpeg画像を順番に表示させるマクロを組んで、それを表示させるためのボタンを置こうとしたのですが、一応ググリながらマクロを組んでみたのですが、実行させたところ、シートは真っ白です。 ちなみに自分が組んだプロシージャは下記のものです。 根本的に、画像を表示させる命令(プロパティ?)が間違っているとは思うのですが…。 Sub 自習() Dim i As Integer For i = 1 To 8 ActiveSheet.Select getfiles = "images" & i & ".jpg" Next i End Sub あと、画像ファイルはExcelブックと同じフォルダに8枚置いてあります。 どなたか、ご教授願います。

  • マクロ subプロシージャーは指定できない?

    accessのマクロの アクション:プロシージャの実行 は、 subプロシージャーは指定できないのでしょうか? 標準モジュールに Sub test1() MsgBox "プロシージャーの実行のテストです" End Sub Function test2() MsgBox "プロシージャーの実行のテストです" End Function と作り、 マクロのプロシージャの実行で プロシージャ名をtest2()にすると、うまく表示されますが、 test1()だと、失敗します。 subプロシージャーをマクロで呼び出す方法を教えてください。

  • 個人用マクロブックの有無

    エクセルVBAで現在ユーザーが使っているパソコンに個人用マクロブックが存在するかどうかを取得する方法を考えました。 まず、開いているBOOKを総当りして、エクセル2003までなら PERSONAL.XLS、2007からは"PERSONAL.XLSM がひらいているかどうかを調べる方法。 Sub test1() Dim wb As Workbook For Each wb In Workbooks If wb.Name Like "PERSONAL.XLS*" Then MsgBox "個人用マクロブックがあります。" Exit Sub End If Next MsgBox "個人用マクロブックはありません。" End Sub 最初から個人用マクロブックがあるものとして変数に入れ、エラーになったら無いと判断する方法。 Sub test2() Dim wb As Workbook Dim v As String v = IIf(Val(Application.Version) > 11, "PERSONAL.XLSM", "PERSONAL.XLS") On Error Resume Next Set wb = Workbooks(v) On Error GoTo 0 MsgBox "個人用マクロブックが" & IIf(wb Is Nothing, "ありません。", "あります。") End Sub でも、自分の端末はまだ2000で、しかも個人用マクロブックがあるので、ちゃんと判定できているのかどうか自信がありません。 これで正しいのでしょうか? また、test1とtest2ではどちらをつかえばいいのでしょうか? あるいは、もっと簡単なやりかたはないのでしょうか?

専門家に質問してみよう