- ベストアンサー
【Excel】 マクロが止まってしまいます。
こんにちは。 マクロを記録し、その内容をA1セルをダブルクリックで実行するようにしたいと思います。 記録したマクロを、[ツール]から実行すると、正常に再生されましたが、以下のようにダブルクリックで実行するようにすると、 「Columns("C:N").Select」のところで止まってしまいます。 どのように書くと良いのか教えてください。 -------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$A$1" Then Exit Sub Cancel = True Columns("A:U").Select Selection.Copy Sheets("一覧").Select Range("A1").Select Sheets("一覧").Select Sheets.Add ActiveSheet.Paste Columns("C:N").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.EntireColumn.Hidden = True Range("O4").Select End Sub --------------------------------------------------------
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なぜエラーが出るかどうか考える前に、とりあえず無駄なコードが多いのですっきりさせてみました。このコードではエラーは出ません。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$A$1" Then Exit Sub Dim R As Range Set R = Columns("A:U") Worksheets.Add Before:=Worksheets("一覧") With ActiveSheet R.Copy .Cells(1, 1) With .Columns("C:N") .Copy .PasteSpecial Paste:=xlPasteValues .Hidden = True End With End With Application.CutCopyMode = False End Sub マクロの自動記録では、操作したように記録されるので、セルを選択してコピーし、別のセルを選択して貼り付け、という処理などが、いちいちSelectしてSelectionをCopyしてまたSelectしてSelectionにPasteして、という冗長なマクロになってしまいます。実際にはCopyメソッドにはコピー先をダイレクトに指定できるので、そのようにしています。 その他にも無駄な部分を省いているので、どこがどう違うのか、自動記録されたマクロと見比べてみるとよいかと思います。
その他の回答 (2)
- masa_019
- ベストアンサー率61% (121/197)
こんにちは。 >「Columns("C:N").Select」のところで止まってしまいます。 Sheets("一覧")以外のシートがアクティブシートになっているのに、 Sheets("一覧")のColumns("C:N")を選択しようとするから止まるのです。 ActiveSheet.Columns("C:N").Select と書き換えると良いと思います。 最後の >Range("O4").Select の部分も同様です。 もしくは、 Worksheet_BeforeDoubleClick から 標準モジュールの記録マクロを呼び出す方法も有ります。 記録マクロのマクロ名が"Macro1"だとして、 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$A$1" Then Exit Sub Cancel = True Macro1 End Sub
>If Target.Address <> "$A$1" Then Exit Sub この意味はもちろん分かってますよね。