• 締切済み

excel VBA モジュール削除(複数ファイル)

こんにちは。 VBA初心者です。 excelでマクロを組みました。 保存先は「module1」に保存されています。 excelは「様式」ファイルにマクロを組み込んでおり、そのファイルを使用してシートに記入、別名で保存して使用しています。 最終的に200近くのファイルが出来るのですが、それら全てのmoduleを削除するのが手間なのです。  ・修正する可能性があるので、最初に保存した時点ではマクロを消したくない。  ・つまり、データが仕上がった時点でマクロを削除したい。 一括で削除できる方法は無いでしょうか?  ・マクロ削除時に不要なシートも削除しています。 方法等ございますでしょうか? この方法について検索を掛けましたが、検索の仕方が悪いのか良い方法が見つかりませんでした。 他に既に回答が在りましたら、そちらも参考にしたいのでアドレス等も教えて頂けると助かります。 よろしくお願いします。

みんなの回答

noname#154650
noname#154650
回答No.3

マクロは個人用マクロブックに保存することが可能です。記録時に保存先を選択する筈です。これにマクロを保存すると、次回以降にエクセルを立ち上げると、自動的にマクロブックも立ち上がります。マクロブックに記入されているマクロは、開いている全ブックで実行可能です。 問題は、自動記録ではなく自分で編集したマクロをマクロブックに保存出来るかどうかですが、そこは私自身も知りませんので試してみて下さい。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

理解されていないようなので明言しますが、マクロを追加削除するマクロはお答えしません。 なお、ブックを開かずにマクロを除去する方法はありません。 200冊のブックを順繰り開き、マクロを除去するマクロを組み立てて使う方法しかありません。 それで。 実は嘘:マクロはModule1にある 本当は:マクロはシートモジュールに記述している ということですね。 Sheet1のシートモジュールにマクロが記述してあるのを除去したいなら sub macro2()  worksheets.add before:=worksheets(1)  worksheets("Sheet1").cells.copy worksheets(1).range("A1")  application.displayalerts = false  worksheets("Sheet1").delete  application.displayalerts = true  worksheets(1).name = "Sheet1"  activeworkbook.close savechanges:=true end sub とでもしておけばいいです。 200冊のブックにマクロを働かせる手順は先に回答した通りです。 追加ご質問もありませんでしたので、この点はクリアしたということにします。 よっぽど遅いマシンでも、プログラムを組んでやればお茶の一杯でも飲んでいる間に終わります。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

マクロを触るマクロはマクロウィルスの方法にもつながるので、ここのような公開の質問掲示板ではあまり触れたくない話題です。 現在の手順: >excelは「様式」ファイルにマクロを組み込んでおり、そのファイルを使用してシートに記入、別名で保存して使用しています。  →修正する可能性があるので、最初に保存した時点ではマクロを消したくない。  : >データが仕上がった時点でマクロを削除したい。 「一括で」の具体的な意図が不明です。 ○200冊のブックが全部完成した後にマクロを除去するマクロを設計したい ○各ブックごとに「完成」を見た時点でマクロを除去できればよい いずれにしても、マクロを除去する方法自体はごくシンプルで 手順: 1.マクロを含んだブックを開く 2.ワークシートをまとめて新しいブックとして移動(コピー)する   マクロモジュールは置き去りにされる 3.新たなブックを名前を付けて保存する 4.手動操作でマクロ含みの原本ファイルを削除する といった段取りになります。 基本的な構文: sub macro1()  workbooks("マクロを含んだブック.xls").worksheets.copy  activeworkbook.saveas filename:="マクロなしブック.xls"  workbooks("マクロなしブック.xls").close savechanges:=false  workbooks("マクロを含んだブック.xls").close savechanges:=false end sub 加えて「200冊を一斉に」という意図だったときは、 ・フォルダに保存された200冊のブックを順繰り開く ・一冊ずつ上述のマクロを実行する といったループを追加します。 「ブックを順繰り開く」程度はネットを探せばいくらでもネタはヒットしますので、大丈夫と思います。 ブックをどのように探したらいいのか不明なのでサンプルマクロが書けない(たとえばfor to nextでbook1,2,3…を順繰り拾えばいいのか?とか )ってのが実際のところですが、あるいはわからなければVBAのヘルプでDir関数のヘルプを参照してください。

noname#200499
質問者

お礼

回答ありがとうございます。 説明不足で申し訳ありません。 補足を記入しましたので、もう一度お答えいただけると幸いです。 私も、上手く説明できないためにご迷惑をお掛けしました。 見放さず、回答いただけると嬉しいです。

noname#200499
質問者

補足

補足です。 ・一つのファイルにシートが4つあります。 ・シートをコピーする方法は検索しましたが、ブックに4シートあり、200個全てのファイルに適用するには時間が掛かり過ぎて無駄が多いので。 ・200個のファイルが出来上がり、チェックを終えた時点で完成となり、人に渡すのでマクロを除去したい。 ・全てのファイルは全てを特定の数人に配布、同時に保存用データとします。 ・マクロを使ってマクロを削除したいのではなく、シートの(module)に組み込まれたマクロを削除したい。 ・一つ一つのファイルを開く→moduleの解放では無く、何らかの方法で(例えばフォルダ内の200個のファイルの)moduleを削除したい。

関連するQ&A

専門家に質問してみよう