最速怪談選手権

以前ワークシートのイベントのプログラムを教えていただきありがとうございました。
参考に作ったプログラムなのですが・・・範囲をもう少しだけでかくしてやると画面がゆれて困っています。
値を入れてコピーしているときが特にひどいです。
複数セルを選択して消去しても大丈夫なようにかつ揺れない方法はないでしょうか?

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim r As Range
For Each r In Target
MyProc r
Next
End Sub

Sub MyProc(Target As Range)
Dim i As Long

Application.EnableEvents = False
If Selection.Cells.Count <> 1 Then Exit Sub

' 変更したセルに値が入った場合条件成立
If Trim(Target.Value) <> "" Then

' 行番号が10以上65530以内のとき条件成立
If Target.Row >= 10 And Target.Row <= 65530 Then

' BCD列で、5の倍数の行のとき条件成立
If (Target.Column >= 2) And (Target.Column <= 4) Then
If (Target.Row Mod 5) = 0 Then
If Target.Value <> "" Then
For i = 0 To 4
Target.Copy
Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues
Next
If (Target.Column = 2) Then
Worksheets("Sheet4").Range("A2:K6").Copy Target.Offset(5, -1)
End If
End If
Else
Exit Sub
End If
End If

End If
Application.CutCopyMode = False
End If
Application.EnableEvents = True
End Sub

A 回答 (1件)

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)


  Dim r As Range
  ' 画面の更新を一時停止する
  Application.ScreenUpdating = False
  For Each r In Target
    MyProc r
  Next
  ' 画面更新の再開
  Application.ScreenUpdating = True
End Sub
としてみましょう

Application.EnableEventsの設定もSelectionChange側のForループの外で1度実行すればいいのでは?
    • good
    • 0

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