• ベストアンサー

【Excel VBA】シートコピー時、マクロコードはコピーしたくない

ws.copy Before:=Workbooks(File).Sheets(1) Windows(File).Activate Cells.Select Selection.copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 上記コードで、シートのコピー・貼付を行っていますが、 コピー元シートのコードも引き継がれてしまいます。 引き継がれないようにコピーしたいのですが、可能でしょうか? 可不可について、 可能ならばそのやり方(コード)を教えていただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは ご質問で求められている結果に対する理解が不充分かも知れませんが、   シート(ws)のコピーを、ブック(file)Sheet1の直前に 挿入   作成したシートの、数式の戻り値を 値に 直す   シートモジュールのコピーを除いたコード、、、 というお話だと理解しました。 #2さんと殆ど同じなのですが、 元のシート(ws)の書式が新しいシートに反映されるようになってます。 コメントはコピーされますが、他のShapeは残りません。 もし、Shapeまでコピーするのでしたら、別途、ご質問されるとよいと思います。 #3も禁じ手と仰っていますが、 VBAのコードそのものを書き換える方法は、 それ以外に方法がない場合の非常手段だとしても、 余程パーソナルな用途でしか考えない方が良いです。 仕事で使うことが内規違反になる可能性もあるし、 使えない環境もありますので、 私も回答には書きたくないですね。   ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇ Sub TEST() Const sFile As String = "ファイル名.xls" ' ※ Dim ws As Worksheet ' ※   Application.ScreenUpdating = False ' ※   Set ws = ThisWorkbook.Sheets(1) ' ※   With Workbooks(sFile).Worksheets   With .Add(Before:=.Item(1))     ws.Cells.Copy .Cells     .UsedRange.Value = .UsedRange.Value     .Activate   Application.ScreenUpdating = True ' ※ '    MsgBox "Done" ' ※ '    .Delete ' ※   End With   End With End Sub   ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇      ' ※ の行は、便宜的な記述です。 ご質問と関係ないことを書くことを、お許し下さい。 どうしても書いておきたいので、、、 Wendy02 さん あなたがいないと、困ります。 出来れば、考え直して頂きたいけれど、 多く学ばせて頂いた一人として、感謝しています。 ありがとう ござい ます!!

motsu2006
質問者

お礼

ご回答、ありがとうございました。 ご理解、まさにその通りです。 私が詳細を記述しなかったのでたいへんお手数をおかけしました。 なるほど、私にとって禁じ手を使用するのはまだ危険なようですね。 もう少し上達してから、参考にさせていただきます。 追伸:私もWendy02さんには非常に助けられた一人です。    何かあったのか存じ上げませんが、    Wendy02さんはじめこのカテに回答してくださる皆様、    今後ともよろしくお願いします。

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

可能ですが、推奨はできません。禁じ手とか。 コピーされたコードを削除すればいいですよね。 貼り付けられたSheetの名前のコードを削除する。 参考 http://okwave.jp/qa3859010.html の ANo.4

motsu2006
質問者

お礼

ご回答ありがとうございます。 リンク、拝見しました。 私のような初心者には厳しいというかやらない方がよさそうですね、 おっしゃるとおりです。 >注意 うまくできないとExcelの動作がおかしくなることがあるかもしれない。 →怖いですね。  コピー元の方は半年かけて作成した大作(自分的に^^;)なので リンク先のやりとりはローカルに保存させていただき、 もっとVBAスキルが向上したら使わせていただくかもしれません。

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

こんばんは。 ws.copy Before:=Workbooks(File).Sheets(1) ws を明記していませんし、前の部分でどんな設定されているかは、想像の範囲しかありませんが、おそらく、その部分で、シートのマクロのコピーが出来ています。 '------------------------------- Set ws = ThisWorkbook.Worksheets(1) With Workbooks(File).Sheets.Add(Before:=Workbooks(File).Sheets(1))   ws.Cells.Copy   .Range("A1").PasteSpecial Paste:=xlPasteValues   .Name = ws.Name & "_"  'シート名の設定 End With '-------------------------------

motsu2006
質問者

お礼

Wendy02さん、いつもお世話になっています。 私、いつまで経っても初心者の域を抜け出せず、お恥ずかしい限りです、、、。 ご想像の通りです。 教えていただいたソース、参考にさせていただきます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

私がモジュール1にVBAコードのある、あるブックを開いて、シートの範囲指定して、コピーし、新しいエクセルを開きSheets(1)に貼り付けました。 保存して開きましたが、モジュール1は現れません。 事実は間違いないですか。 Personal.xlsとの関連(そっちを見ていること)無いですか。 http://www.relief.jp/itnote/archives/002060.php >PERSONAL.XLSファイルが存在している場合、Excelが起動する際に非表示状態でPERSONAL.XLSも一緒に開かれているので、個人用マクロブックに保存したマクロは、どのExcelファイルからでも利用することができるようになっています。

motsu2006
質問者

お礼

ご回答ありがとうございます。 >シートの範囲指定して、コピーし、新しいエクセルを開きSheets(1)に貼り付けました。 いえ、私の場合はシートそのものを別ブックにコピーしています(範囲指定ではない)。 また標準モジュールではなく、シートモジュールのコードがそのまま引き継がれないことが希望なのですが、、、。

motsu2006
質問者

補足

失礼しました! 私のもある意味範囲指定でした(シート全体を範囲指定している、という意味でした)。 お礼欄は上記を読み替えてください。申し訳ありません。

関連するQ&A

専門家に質問してみよう