- ベストアンサー
マクロについて
教えてくださいm(__)m Excel2000です。 マクロでコトを簡単にして作業したいとおもうのですが、 (マクロ初心者です) たとえば、ツール→マクロ→新しいマクロの記録 で、操作した内容を記録するマクロで、 作成したマクロは、そのシートでしかつかえないのでしょうか?同じブック内なら大丈夫ですか? そのマクロを他のシートとかブックでつかうには なにか操作が他に必要ですか? visual basic editor の画面でなにか記述しないとだめですか? たとえば、ほかのブックやシートで使うには どのような操作をするのでしょう?具体的に 説明してもらえたらうれしいのですが。。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#2さんも書いていますが、補足を。 マクロの記録をした後、エディタでどのように書かれているかを見ると、 場合によっては”これはいらないのに…”と思われることが 記録されている場合があります。 例えば、セルを選択するときに、下のほうにスクロールして選択した、 ということであれば、スクロールも記録されます。 また、グラフのデータ系列の色だけを変えたいのに、記録で行うと、 輪郭の線の色や種類をどうするか?ということまで記録されてしまいます。 このように、マクロの記録については、普段の操作により プログラムができることから、一から書く必要がないという メリットがありますが、場合によってはいらないもの、 さらには汎用性がきかなくなるものが記録されてしまう場合があります。 そのことが#2さんがおっしゃっていることなのです。 基本的には、マクロが入っているファイルを開いていれば マクロを動かすことが可能なのですが、場合によっては そのファイル内でしか動かないものやファイル名、シート名を 指定する場合があるので、ご注意ください。 ここで例として、まっさらのExcelのブックを開き、 新しいマクロの記録、で、シート2に移って、何もせずに シート1に戻る、で、記録を終了してエディタを見てください。 そうすると、 Sheets("Sheet2").Select という形で、シートの名前で指定されていると思います。 そうすると、2番目のシートの名前が別の名前だったら ”そんな名前のシートはないぞ!”ってエラーが出ます。 これを Sheets(2).Select とすると、Sheet2という名前でなくてもできるようになります。 ここで、2はシート番号で、はじめの状態では2番目のシートですが、 新しくシートを挿入した場合、順番が変わります。エディタのところに シート番号とシート名が出ています。 というわけで、エディタにどのように書いてあるか ご注意ください。
その他の回答 (4)
- papayuka
- ベストアンサー率45% (1388/3066)
#2です。 「開いているすべてのブック」や「PERSONAL.XLS」の表示はマクロ実行(ツール-マクロ-マクロ)の時に出るダイアログの表示ですよね? これは実行したいマクロを探したい時などに表示の絞込みをするためのものなので、既に保存されているマクロ名が表示されるだけです。ここに「PERSONAL.XLS」が出ていると言うことは、「個人用マクロブック」に保存した事があるのだと思います。 ツール-マクロ-新しいマクロの記録で出てくるダイアログではマクロの保存先に「個人用マクロブック」「新しいブック」「作業中のブック」のように出ると思います。 新しいマクロを記録する時に「個人用マクロブック」を選んで記録すると「PERSONAL.XLS」に記録されます。「PERSONAL.XLS」はExcel起動時に自動的にバックグラウンドで開き、いつでも記録したマクロを使える状態にしてくれます。 ただ、しつこいようですがどのブックでも使えるような汎用性を持たせるには、マクロ記録そのままではダメな場合が多いです。
- papayuka
- ベストアンサー率45% (1388/3066)
#2です。 ちょっと勘違いされているようなので、補足します。 汎用的に使いたい場合は、マクロの保存先を個人用マクロブックに記録します。 マクロの記録を開始する際に「マクロの保存先」で「個人用マクロブック」を指定して記録すれば、Excelを起動した時に「個人用マクロブック」が自動的に起動し、どのブックでも使えるようになります。 但し、先に書いた通り単純なマクロ記録は他のブックで動かす時に不具合が出る記述がされる事があり、その部分を修正しないと上手く動かないかも知れないって事です。 先の例では記録された部分の内、Windows("Book1.xls").Activate の記述をVBE画面で消してしまえば、通常の使用ならどのブックのどのシートでも動くようになります。
お礼
なるほど!本当によくわかりましたm(__)m なんどもありがとうございました いままで「開いているすべてのブック」に保存していました。 そうすると、どのブックでもつかえそうな気がして。。。 実は汎用的につかうには「個人用マクロブック」だったのですね では、「開いているすべてのブック」って。。。??・ わたしのExcelでは、「個人用マクロブック」ではなくて "PERSONAL.XLS" となっているのですが、これでいいですよね
- papayuka
- ベストアンサー率45% (1388/3066)
#1さんが回答しています通り、他のブックやシートでも可能ですが、記録マクロの場合、VBE画面で修正が必要になるケースが多いです。 例えば下記のように記述された場合、1 の部分で処理するブックを「Book1.xls」に固定しているので他のブックでは動きません。この場合であれば、1 の部分を消してしまえば動作します。 Sub Macro1() Windows("Book1.xls").Activate '1 Range("A1:C4").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub 記録マクロの修正から始めて、徐々に ループ処理や条件分岐の処理をマスターしていけばより汎用性の高いマクロを作る事が出来るようになります。
お礼
やはり、同じシート(たとえばA)でないとだめなのですね。。 すると、別のデータを扱うときも、“A”シートにコピー すれば大丈夫ということでしょうか。 勉強します。ありがとうございましたm(__)m
同じブック内だけでなく、同時に開いている他のブックでも マクロを使うことができます。 マクロを実行するとき、ツール-マクロ-マクロで、 マクロを選んで実行する場合、その画面で下のほうに、 マクロの保存先、開いているすべてのブック、という形で 出ていると思います。というわけで、マクロが入っているブックを用意し、 新しいまっさらのブックを開き、ツール-マクロ-マクロとすると、 マクロの入っているブックのマクロを選ぶことができると思います。 なので、よく使うマクロをひとつのブックにまとめておき マクロ集みたいなブックをつくり、それを開いた状態で他のブックで作業する というのも1つの手だと思います。
補足
ご回答ありがとうございますm(__)m ・・・ それを開いた状態で他のブックで作業する ・・・ →マクロの記録されたブック(たとえば“A”)さえ開いておけば (タスクバーに表示された状態であれば?) ほかのブックで(たとえば“B”)Aで記録したマクロを 実行しても正常に動作するということでしょうか? #2様のご回答では、VBAを書き直さないと 他のブック、シートでは動作しないとよみとれるのですが。。。
お礼
なるほど!私は大きな勘違いをしてたのですね(^^ゞ 本当にありがとうございますv 前に書いてくださった 汎用性を持たせるための書き換えの例も とても参考になりましたm(__)m