- ベストアンサー
Excel365マクロ削除マクロの作成方法
- Excel365において、特定のシートに組み込まれた画像のマクロを削除する方法について教えてください。
- シートAをコピーして編集し、保存する作業を行っている際に、シートBにも画像のマクロが残ってしまい、削除する方法がわかりません。
- また、シートAと同じレイアウトや書式を持つシートを作成するマクロの提示も求めています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No.1の一部修正です。 回答No.1はシートBが既に存在していた時のエラー回避はしていますが、シートBがあると有無を言わさずコピーしてしまいます。念のためにコピーするかどうか確認したほうがいい気もしますので一応確認を入れた修正です。 回答No.2は新規ブックなので、同じ名前のシートがあっても空のシートですのでそのままコピーして問題は無いと思います。 Sub Test() Dim WS As Worksheet, flg As Boolean For Each WS In Worksheets If WS.Name = "シートB" Then flg = True Next WS If flg = True Then If MsgBox("既にシートBが存在します、上書きしますか?", vbYesNo + vbQuestion) = vbYes Then Sheets("シートA").Cells.Copy Sheets("シートB").Range("A1") Else Exit Sub End If Else Worksheets.Add(After:=Worksheets("シートA")).Name = "シートB" Sheets("シートA").Cells.Copy Sheets("シートB").Range("A1") End If End Sub
その他の回答 (4)
- kkkkkm
- ベストアンサー率66% (1719/2589)
回答No.1,2,4の補足です。 多分勘違いはされないと思うのですが、No.1の前半の説明にシートをコピーして手動でマクロを削除したほうが早いとあるので、シートのコピーだけのコードだと勘違いされる方もいらっしゃる可能性も考えて念のために補足しておきます。 > シートAとそっくりなシート(ページレイアウトや書式もそのままでデータのみ値コピー)を作成するマクロ で、マクロはコピーされないコードです。 なお、式は式としてコピーされますので値にしたい場合は最後に Sheets("シートB").UsedRange.Value = Sheets("シートB").UsedRange.Value を追加して試してみてください。
お礼
何度もご回答ありがとうございました。 この貼り付け方法では0から始まるデータが数値になってしまいました。
- SI299792
- ベストアンサー率47% (772/1616)
マクロを除いてコピーした方が手っ取り早いです。 ' Sub Macro1() ' Sheets.Add After:=Sheets("シートA") Sheets("シートA").Cells.Copy [A1] ActiveSheet.Name = "シートB" End Sub 他のマクロを残したいのであれば、この方法ですが、私としてはお勧めしません。 Option Explicit ' Sub Macro2() Dim Sheet As Worksheet ' Set Sheet = Sheets("シートB") ' With ThisWorkbook.VBProject.VBComponents(Sheet.CodeName).CodeModule .DeleteLines .ProcBodyLine("Worksheet_Change", 0), _ .ProcCountLines("Worksheet_Change", 0) - 1 End With End Sub
お礼
ご回答ありがとうございました。
- kkkkkm
- ベストアンサー率66% (1719/2589)
> いろいろ編集した後にxlsxとして保存する という事でしたら新しいブックにシートAをコピーしたほうがいいのかなと思って蛇足ながら追加しておきます。 Sub Test2() Dim WS As Worksheet, flg As Boolean Dim WB1 As Workbook, WB2 As Workbook Set WB1 = ThisWorkbook Set WB2 = Workbooks.Add For Each WS In WB2.Worksheets If WS.Name = "シートB" Then flg = True Next WS If flg = True Then WB1.Sheets("シートA").Cells.Copy WB2.Sheets("シートB").Range("A1") Else WB2.Worksheets.Add(After:=WB2.Worksheets(Worksheets.Count)).Name = "シートB" WB1.Sheets("シートA").Cells.Copy WB2.Sheets("シートB").Range("A1") End If End Sub
お礼
再度のご回答ありがとうございました。 シートをコピーした後の編集作業もすべてマクロで行っていますし、コピー後のシートから数式を持ってきている別のシートがありますので、新規ブックへのコピーは考えておりません。
- kkkkkm
- ベストアンサー率66% (1719/2589)
マクロを削除するマクロは難しいですし、実行する前にマクロの設定を手動で変更して実行し設定を戻さなくてはいけないので手間がかかります、それならシートをコピーして不要なマクロを手動で削除したほうが早いですね。 シートAをマクロ以外をコピーするマクロで試してみてください。 シートAをシートBにコピーします。シートBが無ければ自動で作ります。 Sub Test() Dim WS As Worksheet, flg As Boolean For Each WS In Worksheets If WS.Name = "シートB" Then flg = True Next WS If flg = True Then Sheets("シートA").Cells.Copy Sheets("シートB").Range("A1") Else Worksheets.Add(After:=Worksheets("シートA")).Name = "シートB" Sheets("シートA").Cells.Copy Sheets("シートB").Range("A1") End If End Sub
お礼
ご回答ありがとうございました。
お礼
何度もご回答ありがとうございました。 こちらのマクロを利用させていただきます。 ただ、ページレイアウトがコピーされていなかったので、マクロで再設定するようにしました。 以前よりマクロ実行時間が長くなってしまいましたが、それよりも手作業を省く方を最優先ですね。