こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

こんにちは。

VBA初心者です。


excelでマクロを組みました。
保存先は「module1」に保存されています。

excelは「様式」ファイルにマクロを組み込んでおり、そのファイルを使用してシートに記入、別名で保存して使用しています。

最終的に200近くのファイルが出来るのですが、それら全てのmoduleを削除するのが手間なのです。
 ・修正する可能性があるので、最初に保存した時点ではマクロを消したくない。
 ・つまり、データが仕上がった時点でマクロを削除したい。

一括で削除できる方法は無いでしょうか?
 ・マクロ削除時に不要なシートも削除しています。

方法等ございますでしょうか?


この方法について検索を掛けましたが、検索の仕方が悪いのか良い方法が見つかりませんでした。
他に既に回答が在りましたら、そちらも参考にしたいのでアドレス等も教えて頂けると助かります。

よろしくお願いします。

投稿日時 - 2012-04-01 21:03:43

QNo.7396876

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

マクロは個人用マクロブックに保存することが可能です。記録時に保存先を選択する筈です。これにマクロを保存すると、次回以降にエクセルを立ち上げると、自動的にマクロブックも立ち上がります。マクロブックに記入されているマクロは、開いている全ブックで実行可能です。

問題は、自動記録ではなく自分で編集したマクロをマクロブックに保存出来るかどうかですが、そこは私自身も知りませんので試してみて下さい。

投稿日時 - 2012-04-03 09:30:14

ANo.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冊のブックにマクロを働かせる手順は先に回答した通りです。
追加ご質問もありませんでしたので、この点はクリアしたということにします。
よっぽど遅いマシンでも、プログラムを組んでやればお茶の一杯でも飲んでいる間に終わります。

投稿日時 - 2012-04-01 22:20:25

ANo.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関数のヘルプを参照してください。

投稿日時 - 2012-04-01 21:38:11

補足

補足です。

・一つのファイルにシートが4つあります。
・シートをコピーする方法は検索しましたが、ブックに4シートあり、200個全てのファイルに適用するには時間が掛かり過ぎて無駄が多いので。
・200個のファイルが出来上がり、チェックを終えた時点で完成となり、人に渡すのでマクロを除去したい。
・全てのファイルは全てを特定の数人に配布、同時に保存用データとします。

・マクロを使ってマクロを削除したいのではなく、シートの(module)に組み込まれたマクロを削除したい。
・一つ一つのファイルを開く→moduleの解放では無く、何らかの方法で(例えばフォルダ内の200個のファイルの)moduleを削除したい。

投稿日時 - 2012-04-01 22:03:08

お礼

回答ありがとうございます。

説明不足で申し訳ありません。

補足を記入しましたので、もう一度お答えいただけると幸いです。
私も、上手く説明できないためにご迷惑をお掛けしました。

見放さず、回答いただけると嬉しいです。

投稿日時 - 2012-04-01 22:05:14

あなたにオススメの質問