
Excelマクロで、ワークシートの任意の行を別のセルにコピーするマクロを作ったのですが、テスト用に作ったワークシートでは正常に動作するのですが、本番用のワークシート(シート内に関数やマクロが含まれています)では動作が停止しまいます。アクセレーターのoffやマルチスレッドのoffなどオプション項目も試しましたが変わりません。
どなたかアドバイスをお願いいたします。
Sub Macro301()
'
' Macro301 Macro
'
'
' 任意のセル範囲を指定して結果表示欄にコピー
'
'
Range(Selection, Selection.Offset(0, 78)).Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=1
Range("A97:CA97").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.ScreenUpdating = False
ActiveSheet.Paste
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.Goto Reference:=Range("A30"), Scroll:=True
End Sub
No.2ベストアンサー
- 回答日時:
#1です
>Range(Selection, Selection.Offset(0, 78)).Select
止まってしまいます。
止まるとは、どのような状態ですか?1004エラーとか、出ているのですか?
どの様な選択状態で実行しているのでしょうか、
Range(Selection, Selection.Offset(0, 78)でエラーが出るのは、
行もしくは全体を選択した時でした。
貼り付け先でエラーが出るのは、列全体を選択した時と貼り付け先に
結合セルがある時でした。。
>上記の内容については申し訳ありませんが、わかりません。
試しにご指摘の項目を削除したところ、コンパイルエラーが出てしまいました。
すみません。
値のみコピーなのに後からすべてをペーストしているので、数式なども
コピペされると言う事です。
ご希望は、値のみが良いのか、すべてなのか、はたまた値と書式なのか、、
記録する時にどうされたのかなと思いまして書きました。
記録マクロを参考に、ちょっと書き直してみました。
書式と値がコピペされます。数式はコピ―されません。
Sub Macro301v()
' 任意のセル範囲を指定して結果表示欄にコピー
'
Dim Rng As Range
Set Rng = Range("A97:CA97")
Application.EnableEvents = False
Application.ScreenUpdating = False
Rng.UnMerge
Range(Selection, Selection.Offset(0, 78)).Copy 'ここでエラー?
Rng.PasteSpecial Paste:=xlPasteValues
Rng.PasteSpecial xlFormats
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Goto Reference:=Range("A30"), Scroll:=True
End Sub
止まる状況と
実行時のセル選択範囲を教えてください。
Qchan1962様
再度アドバイス、ありがとうございます。
私の説明が不十分で申し訳ありませんでした。
添付いただいたマクロを実施したところ無事に動きました。
最初に投稿したマクロの
Range(Selection, Selection.Offset(0, 78)).Select ← ここで停止
Selection.Copy
エラーというよりも矢印の部分で停止してしまいます。
実行したシートには、最初にも書きましたが、表にコメントと関数が入っていて、
一部のセルにはクリックしたときに〇が入るように「コードの表示」で
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then End
If Not (Target.Row >= 5 And Target.Row <= 17 And Target.Column >= 7 And Target.Column <= 7) Then End
If Target.Value = "○" Then
Target.Value = ""
Else
Target.Value = "○"
End If
Application.EnableEvents = True
End Sub
としています。
他には、表の印刷マクロ、入力データを他のワークシートにコピーするマクロなどが入っています。
このワークシートだと先程書いた部分で停止してしまい、別の新しいワークシートで内容は表だけで関数やマクロが無い状態だと最後まで問題なく動いていました。
上記の状態だったので、OS由来のエラーで止まるのか、ワークシート内の他のマクロや関数が何らかの障害になっているのかと思っていました。
大変助かりました、ありがとうございます!
No.3
- 回答日時:
#2のお礼を読んで理解しました。
念のため入れた、Application.EnableEvents = False で
イベント発生を抑止したので良かったです。
No.1
- 回答日時:
こんにちは、
>本番用のワークシート(シート内に関数やマクロが含まれています)では
動作が停止しまいます。
これは、エラーが出ると言う事でしょうか?
それとも、正しく動作しないと言う事でしょうか?
基本的には最後まで実行出来そうですが、
まず、エラーが出る可能性としては、Range("A97:CA97")の範囲内に
結合セルがあるのではないかと推測できますね。
結合セルが無ければ、結合セルがあるものを貼り付けられると思いますが、
2度目、Range("A97:CA97")の範囲内の結合セルを解除してから
貼り付けないと、多分、エラーになりますね。
Macro301を実行する前にVBAなどで処理している場合、
値のない行セルを選択している可能性もあります。。
まあ、事象が不明の為、いずれも推測にすぎません。
1つ気になる点は、
.PasteSpecial Paste:=xlPasteValues 値貼り付けを行った後に
ActiveSheet.Paste は、どのような意味があるのでしょう?
値貼り付けならいらないような気もしますし、書式も含めコピペするなら
PasteSpecial Pasteの意味もないのではないかと思いますが。。
処理の要件が分らないので、気のせいかもしれませんね。
アドバスありがとうございます。
確認してみましたが、Range("A97:CA97")の範囲内に結合セルは有りません。
停止するところは、任意のセル(範囲)を選択したところで、止まってしまいます。
Range(Selection, Selection.Offset(0, 78)).Select
この処理の後コピーするはずですが…
この部分は、「マクロの記録」で作成したものなので、ご指摘の
”1つ気になる点は、
.PasteSpecial Paste:=xlPasteValues 値貼り付けを行った後に
ActiveSheet.Paste は、どのような意味があるのでしょう?
値貼り付けならいらないような気もしますし、書式も含めコピペするなら
PasteSpecial Pasteの意味もないのではないかと思いますが。。”
上記の内容については申し訳ありませんが、わかりません。
試しにご指摘の項目を削除したところ、コンパイルエラーが出てしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
VBA実行後に元のセルに戻りたい
-
エクセルvbaで、別シートの最下...
-
任意フォルダから画像をすべて...
-
特定のセルが空白だったら、そ...
-
セル色なしの行一括削除
-
Excelで指定した日付から過去の...
-
【Excel VBA】指定行以降をクリ...
-
Excel vbaで特定の文字以外が入...
-
EXCELのVBA-フィルタ抽出後の...
-
エクセルVBAでコピーして順...
-
Excelのプルダウンで2列分の情...
-
Excel VBAで、 ヘッダーへのセ...
-
vb.netによるEXCEL値取得
-
Excel VBA、 別ブックの最終行...
-
連続する複数のセル値がすべて0...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
TODAY()で設定したセルの日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定のセルが空白だったら、そ...
-
Excelのプルダウンで2列分の情...
-
【Excel VBA】指定行以降をクリ...
-
任意フォルダから画像をすべて...
-
VBAでセルをクリックする回...
-
”戻り値”が変化したときに、マ...
-
VBA実行後に元のセルに戻りたい
-
Excel vbaで特定の文字以外が入...
-
【VBA】シート上の複数のチェッ...
-
Excel VBA マクロ ある列の最終...
-
Excel VBAで、 ヘッダーへのセ...
-
DataGridViewの各セル幅を自由...
-
VBからEXCELのセルの値を取得す...
-
EXCELのVBA-フィルタ抽出後の...
-
VBAでセル同士を比較して色付け
-
Application.Matchで特定行の検索
おすすめ情報