• ベストアンサー

マクロ ブックをマクロなしでコピー

いつもお世話になっております。 マクロのことで 2つ教えて頂きたく書き込みをさせて いただきまいした。 よろしくお願いいたします。 ブックに何枚かシートがあり、 そのシートには全て同じマクロが入ってます。 このブックのシート全てを マクロを削除し新しいブックにコピーをしたいです。 また、コピーをする際に マクロがついているオブジェクト(ボタン) もとってコピーをしたいです。 自力で調べたのですが うまくわからずまた、こちらで質問 させていただきました。 よろしくお願いいたします

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 基本的には、#1さんのマクロでよいはずです。 マクロでマクロコードを操作するのは、ウィルスライクになるので、それは、掲示板で、あまり書くのは好ましくありません。 以下のコードを、標準モジュールに以下を入れてください。 使い方は、マクロを実行すれば、新しいブックにマクロなしで、コピーされます。 一つないし、複数のシート(作業グループ)を選択したものをコピーしたい場合は、以下の行頭の(')コメントブロックを外します。  'Set sWh = ActiveWorkbook.Worksheets  ''選んでコピー  Set sWh = ActiveWindow.SelectedSheets ただし、以下の現在のマクロは、ワークシート以外のグラフシートは、コピーできません。多少、以下のマクロには、いろんなシートの形態が混じると、問題が出てくるとは思いますが、通常の使用ならトラブルはないと思います。 --------------------------------------------- Sub SheetsCopy()   Dim i As Integer   Dim j As Integer   Dim sh As Object   Dim sWh As Sheets   Dim msg As String   'すべてコピー   Set sWh = ActiveWorkbook.Worksheets      ''選んでコピー   'Set sWh = ActiveWindow.SelectedSheets      With Workbooks.Add     If i > .Worksheets.Count Then       .Worksheets.Add After:=.Worksheets(.Worksheets.Count), _       Count:=i - .Worksheets.Count     End If     j = 1     For Each sh In sWh       If TypeName(sh) = "Worksheet" Then         sh.Cells.Copy .Sheets(j).Cells(1, 1)       Else         msg = msg & "," & sh.Name       End If       j = j + 1     Next sh   End With   If Len(msg) > 2 Then     MsgBox Mid(msg, 2) & " は現在のマクロではコピーできません。", 64   End If End Sub

sovico
質問者

お礼

ありがとうございます! うまくできました。 あとは教えて頂いた記述を理解していきたいと思います。 皆さんどうしてそんなに わかるのでしょうか。 ありがとうございました。

その他の回答 (2)

  • tossy005
  • ベストアンサー率38% (7/18)
回答No.2

手動で削除する場合は2つの作業が必要になります。 (1)マクロを解放する EXCELを立ち上げてALT+F11を押下するとVBE(マクロを作成するツール)が立ち上がります。 VBEの画面の左のほうに標準モジュールというものがあります。 標準モジュールのすぐ近くに小さな+があると思いますので、それを押下します。いろいろな名前のモジュール(もしかしたらModule1だけかもしれません)が表示されると思いますので、 それぞれのモジュールを選択して右クリック→解放を選択します。 保存するか聞かれると思いますが、いいえを選択します。 すべてのモジュールの解放が終わったら(2)に進みます。 (2)ボタンを削除する それぞれのシートに貼ってあるボタンを選択し、Deleteキーを押下します。 上記作業が終わったら、上書きではなく別の名前で保存をしてください。

sovico
質問者

お礼

ありがとうございます。 うまく伝えられなかったのですが tossy05様が教えてくださったことの コードが知りたかったのです。 しかしとても勉強になりました。 ご回答ありがとうございます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

マクロを消すマクロなんてのも考えられますが、エクセルのバージョンが上がってくると制約が厳しくなって難しい様です。 行番号と、列番号の交差する左上隅をクリックすると全セルが選択できますので、それをコピーして複写すると、当然ながらマクロは複写されません。但し、セル内に256文字以上の文字があると、切り捨てられてしまいます(XL2000の場合) この方法でボタンを複写しないようにするには、ボタンに対して、「セルに合わせて移動やサイズ変更をしない」に設定しておくと良い様です。 マクロでやるなら、 Sub test dim bk as workbook    Set bk = Workbooks.Add    Cells.Copy bk.Worksheets(1).Range("a1") End Sub といったところです。ご参考まで。

sovico
質問者

お礼

ありがとうございます。 私があまりにもマクロにつてわかっていない ということが原因でもあるのですが 教えて頂いた記述をコピーしたところ 新しいブックができました。 教えて頂いた記述を 私が、必要な部分を書き換える ということだったと思うのですが あまりに無知でこれ以上できませんでした。 もう少し勉強していきたいです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう