• ベストアンサー

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

いつもお世話になっております。 マクロのことで 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

  • ブックA(マクロ含む)をコピーしたブックBを・・

    こんにちは。過去の質問を検索しましたが、見つけられないので失礼します。 Aというブックにa,b,c,dというシートがあります。 これらのシートは全て同じマクロを使っています(違うのはセルに入力されている一部の文字や図のみ)。 シートbだけを別のブックにコピー&保存(ブックB)しました。 するとマクロもブックBに保存されますが 保存されたマクロはブックAのものを参照しますので 手元にブックAが無いと、ブックBのマクロは使えません。 しかし、ブックBをメール等で別の人に送信し ブックAが無い人でも同じようにマクロを使えるようにしたいのですが そのようなことは可能でしょうか。 どなたかご回答お願いします。

  • Excel 違うBookのシートをコピーする

    Excelでわからないことがあり質問させていただきました。 原紙のBookに 資料のBookのシートをコピーさせたいのですが 資料Bookには シートが sheet1~sheet50まであり 原紙のBookにマクロのボタンやフォームを作成し 毎回資料のBookの違うシート名を選択しコピーをさせることは可能なのでしょうか? たとえば 原紙のシートに入力フォームを作り sheet名を入力 → 「コピー」のボタンを押すとコピーができる。 といった感じに・・・ フォームでなくてもリストなんかでもいいのですが・・・

  • 新しく開いたブックをアクティブにするマクロ

    マクロ 新しく作ったブックをアクティブにする マクロ初心者です。 マクロを使って同階層にあるファイルのアクティブのシートを ひとつのブックにコピーして保存するマクロを作りたいと思ってます。 他の質問を参照して下記のコードを途中まで作成しました。 参照した質問では、 マクロの入っているブックにシートをコピーするようでしたが、 そうすると保存した時にマクロも保存されてしまうので 私なりに調べて、新しいブックにシートコピーするようにしましたが、 この記述の後、新しいブックをアクティブにする記述がわからず、 保存できなくなってしまいました。 ここまで終わるとマクロの入っているブックがアクティブになって終わります。 このあと新しく開いたブックをアクティブにして、 ブックのsheet1~3を削除して、名前をつけて保存したいのですが 開いたブックをアクティブにするマクロをご伝授ください。 あたらしくブックをつくるとbook1~・・・と名前が変わってしまうので 変数で名づけたいのですが、やり方が良くわかりませんのでよろしくお願いします。 何卒よろしくお願いします。 Sub consolid_test() Dim shCnt As Integer Dim Wb As Workbook Dim i As Integer Dim sh As Worksheet Dim nSh As Worksheet Dim fName As String Dim ka As String Application.ScreenUpdating = False '画面更新を一時停止 Application.DisplayAlerts = False Set mb = Workbooks.Add '新しいコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fName = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fName = Empty '全て検索 If fName <> mb.Name Then 'ブック名がこのブックの名前でなければ Set Wb = Workbooks.Open(myfdr & "\" & fName) 'そのブックを開きwbとする。 Wb.ActiveSheet.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く ActiveSheet.Name = Range("B16") 'シート名の変更 ActiveSheet.Unprotect 'シート全体をコピーして値にする Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Wb.Close (False) '保存の有無を聞かずに保存しないで閉じる N = N + 1 'ブック数をカウント End If fName = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す ・ ・ ・ ・

  • ExcelVBAで、ユーザーフォームを新規Bookにコピーしたい

    シートをコピーして新規Bookで保存するマクロを作成しています。 このシートには「クリックするとユーザーフォームを開く」ボタンをつけているのですが、コピー先のBookにユーザーフォームをコピーすることができません。 (全て自動化したいので、両方のBookをVBEで開いてドラッグでコピーするようなことは考えていません。) 良い方法がありましたら、アドバイスください。 よろしくお願いします。

  • 【Excel 2003】複数のブックのシートを一つのブックにコピーにしたい

    お世話になっております。 【Excel 2003】を使っております。 複数のブックには、複数のシートがありまして、 複数のシートを一つのブックにコピーしたいのですが、 手作業ですと、大変時間がかかります。 現在は、一つ一つブックをあけて、シートのコピーで 一つの新しいブックにいれてます。 なにか、これを簡単にできる方法は、ありませんでしょうか? フリーのソフトでも、マクロでも、教えていただけたら 助かります。よろしくお願いします。

  • Excelのコピー&ペーストについて

    Excelでコピー&ペーストするとき、コピー先領域の内容を全て削除してからコピーしてくれるような 機能はないでしょうか? <理由>  マクロ実行ボタン付きのシートがあり、セルの内容を毎回書き換えてから、別のブックのシートにコピーしています。  しかし、コピー時、前回のボタンはそのまま残るため、ボタンが沢山溜まっていきます。  コピー先でもマクロを使用したいため、ボタンはコピーしたいです。    以前は、初回コピー時のみ、ボタンをコピーし、以降はオプションでコピーしないように設定していました。しかし、Excelのオプションはブックごとに指定できないため、別のブックを開くときは、オプションを戻さなければなりません。  そこで、コピー時にコピー先領域を削除してからコピーするようにしましたが、毎回削除を行うのは面倒です。  コピー先シートの内容を全て削除してからペーストするような機能はないのでしょうか。  あるいは、ブック毎にオプション指定をする方法でも良いのですが・・・ よろしくお願い申し上げます。

  • Book間でのコピー

    エクセルで以下の処理を実行するマクロを知りたいのですが。 Book1とBook2が開いています。 Book2のSheet1のA1~A10を、Book2のSheet1のA1~A10にコピーします。 この処理を任意の2つのBook間で実行するためにはどんなマクロになるでしょうか。(Book3とBook5で行ったり、Book25とBook46で行ったり等) アクティブになってないBookからアクティブになっているBookにコピーするようにしたいのですが。 宜しくお願いします。

  • エクセル ブック間コピー マクロ

    ブックA(ブック名は固定)のシートA(シート名は毎回違います)を ブックB(ブック名は固定)の一番左へコピーしたいのですがうまくいきません。 動作 :シートAでマクロを実行しブックBへシートのコピー(挿入)します。 まず第一段階のブックAのシートAをブックBへのコピーがうまくいきません。 シートAが固定シート名ならコードは Sheets("A").Select Sheets("A").Copy Before:=Workbooks("B.xls").Sheets(1) ですが・・・・ Sheets("A").SelectをWith ActiveSheet.Selectにすれば良いのですか? 申し訳ないのですが、後教授お願いします。

  • excelでマクロシートをコピーしたとき

    excelでbook1のsheet1のセルA1に「1」を入力→プリントアウト→A1に「11」を入力→プリントアウト・・・以下「31」まで繰り返し。 というマクロが組んであります。 (ボタンにマクロが登録されています。) このシートをbook2にコピーをしたときに マクロを実行する(ボタンを押す)とbook1が開いてしまいます。 これをbook1を開かずにbook2でマクロを実行するには どのようにしたらよいでしょうか。 book2でマクロを作成し直して さらにボタンにマクロを登録していますが、 bookの数が多いのでけっこうな手間になります。 簡単な方法があれば教えて下さい。

  • マクロで複数ブックのデータを一つのブックにコピー

    マクロ超初心者です。 1つのフォルダの中に複数のbook(sheetも複数)があります。 これを新しい1つのbookにまとめたいです。 sheetは「bookを開いた時に表示されるsheetだけ」を新しいbookにまとめたいです。 どなたかの回答に下記マクロがありました。 Sub consolid() Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook 'このコピー先ブックをmbとする。 myfdr = ThisWorkbook.Path fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until fname = Empty '全て検索 If fname <> mb.Name Then 'ブック名がこのブックの名前でなければ Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのブックを開きwbとする。 wb.Worksheets.Copy After:=mb.Sheets(mb.Sheets.Count) 'コピーしてコピー先ブックの末尾に置く wb.Close '開いたブックを閉じる n = n + 1 'ブック数をカウント End If fname = Dir 'フォルダ内の次のExcelブックを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックをコピーしましました。" End Sub このマクロを使わせていただき、 これでいける!と思ったのですが、255文字以上のコピーが出来ません。 どのようにすればよいでしょうか?

専門家に質問してみよう