アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

#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

止まる状況と
実行時のセル選択範囲を教えてください。
    • good
    • 0
この回答へのお礼

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由来のエラーで止まるのか、ワークシート内の他のマクロや関数が何らかの障害になっているのかと思っていました。

大変助かりました、ありがとうございます!

お礼日時:2020/09/25 14:40

#2のお礼を読んで理解しました。


念のため入れた、Application.EnableEvents = False で
イベント発生を抑止したので良かったです。
    • good
    • 0

こんにちは、


>本番用のワークシート(シート内に関数やマクロが含まれています)では
動作が停止しまいます。
これは、エラーが出ると言う事でしょうか?
それとも、正しく動作しないと言う事でしょうか?
基本的には最後まで実行出来そうですが、
まず、エラーが出る可能性としては、Range("A97:CA97")の範囲内に
結合セルがあるのではないかと推測できますね。
結合セルが無ければ、結合セルがあるものを貼り付けられると思いますが、
2度目、Range("A97:CA97")の範囲内の結合セルを解除してから
貼り付けないと、多分、エラーになりますね。

Macro301を実行する前にVBAなどで処理している場合、
値のない行セルを選択している可能性もあります。。

まあ、事象が不明の為、いずれも推測にすぎません。

1つ気になる点は、
.PasteSpecial Paste:=xlPasteValues 値貼り付けを行った後に
ActiveSheet.Paste は、どのような意味があるのでしょう?
値貼り付けならいらないような気もしますし、書式も含めコピペするなら
PasteSpecial Pasteの意味もないのではないかと思いますが。。
処理の要件が分らないので、気のせいかもしれませんね。
    • good
    • 0
この回答へのお礼

アドバスありがとうございます。
確認してみましたが、Range("A97:CA97")の範囲内に結合セルは有りません。
停止するところは、任意のセル(範囲)を選択したところで、止まってしまいます。
Range(Selection, Selection.Offset(0, 78)).Select
この処理の後コピーするはずですが…

この部分は、「マクロの記録」で作成したものなので、ご指摘の
”1つ気になる点は、
.PasteSpecial Paste:=xlPasteValues 値貼り付けを行った後に
ActiveSheet.Paste は、どのような意味があるのでしょう?
値貼り付けならいらないような気もしますし、書式も含めコピペするなら
PasteSpecial Pasteの意味もないのではないかと思いますが。。”

上記の内容については申し訳ありませんが、わかりません。
試しにご指摘の項目を削除したところ、コンパイルエラーが出てしまいました。

お礼日時:2020/09/25 13:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!