お世話になります
excelシート イベントでセルの値が変わった時にマクロが実行されるVBAを作成していて、
1行毎の入力作業はうまくいくのですが、式の入っていないセルを複数行をコピペ、
例えばA,Bセルの値が同じものが5件ほどあった場合、最初の入力のものをしたにドラッグして
貼り付けると、画面がフリーズして強制終了せざる負えなくなります。
エラーを回避する方法をご教示お願いいたします。以下VBAの内容です。
Dim sh1 As Worksheet
Dim i As Integer
Private Sub Worksheet_Calculate()
'detailに指標をセット
i = 9
シートをworkエリアにセット
Set sh1 = Worksheets(4)
'カードルシート,2ページ(予備)まで指標を回す
For i = 9 To 66
'画面ちらつき防止
Application.ScreenUpdating = False
'2ページ(予備)目ヘッダーは処理しない
If i < 33 Or i > 41 Then
'サンプル番号が入力されている時
If sh1.Cells(i, "E") <> "" Then
'サンプル年月が入力されている時
If IsError(sh1.Cells(i, "K")) <> True Then
'基準年月 >= サンプル年月 の時
If sh1.Cells(7, "O") >= sh1.Cells(i, "K") Then
'次回サンプル年月 <= 当年月 の時
If sh1.Cells(i, "Q") <= sh1.Cells(8, "O") Then
sh1.Cells(i, "M") = "出荷禁止"
'該当行を赤色で塗りつぶし
With sh1
.Cells(i, "A").Interior.ColorIndex = 3
.Cells(i, "B").Interior.ColorIndex = 3
.Cells(i, "C").Interior.ColorIndex = 3
.Cells(i, "D").Interior.ColorIndex = 3
.Cells(i, "E").Interior.ColorIndex = 3
.Cells(i, "F").Interior.ColorIndex = 3
.Cells(i, "G").Interior.ColorIndex = 3
.Cells(i, "H").Interior.ColorIndex = 3
.Cells(i, "I").Interior.ColorIndex = 3
.Cells(i, "J").Interior.ColorIndex = 3
.Cells(i, "K").Interior.ColorIndex = 3
.Cells(i, "L").Interior.ColorIndex = 3
.Cells(i, "M").Interior.ColorIndex = 3
End With
Else
'次回サンプル年月 <= 当年月 でない時
sh1.Cells(i, "M") = "OK"
End If
End If
End If
Else
'該当行を無色で塗りつぶし
With sh1
.Cells(i, "A").Interior.ColorIndex = 0
.Cells(i, "B").Interior.ColorIndex = 0
.Cells(i, "C").Interior.ColorIndex = 0
.Cells(i, "D").Interior.ColorIndex = 0
.Cells(i, "E").Interior.ColorIndex = 0
.Cells(i, "F").Interior.ColorIndex = 0
.Cells(i, "G").Interior.ColorIndex = 0
.Cells(i, "H").Interior.ColorIndex = 0
.Cells(i, "I").Interior.ColorIndex = 0
.Cells(i, "J").Interior.ColorIndex = 0
.Cells(i, "K").Interior.ColorIndex = 0
.Cells(i, "L").Interior.ColorIndex = 0
.Cells(i, "M").Interior.ColorIndex = 0
.Cells(i, "M") = ""
End With
End If
End If
Next i
End Sub
No.1ベストアンサー
- 回答日時:
Application.ScreenUpdating = False
とあるので、
Application.ScreenUpdating = True
をNextの下あたりに入れるべきです。
また Application.ScreenUpdating = False はFor文の前に行って下さい。
無駄に繰り返されています。
余談ですが、
.Cells(i, "A")
~
.Cells(i, "M")
の部分はRangeを使うとスッキリします。
Range(Cells(i, 1), Cells(i, 13)).Interior.ColorIndex = 3
Rugi_sasakiさん
お世話になります。
早速の回答ありがとうございます。
>Application.ScreenUpdating = False はFor文の前に行って下さい。
>Range(Cells(i, 1), Cells(i, 13)).Interior.ColorIndex = 3
うまくいきました。ありがとうございます。
しかしコピペすると画面はフリーズしたままで強制終了するしかないです。
処理対象のセル以外のイベント発生を抑えるしかないでしょうか?
それとも異なるイベント、たとえばダブルクリックとか?
宜しくおねがいします。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
VBAでセルをクリックする回...
-
【Excel VBA】指定行以降をクリ...
-
VBからEXCELのセルの値を取得す...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定の文字を条件に行挿入とそ...
-
TODAY()で設定したセルの日付...
-
【Excel】指定したセルの名前で...
-
Excel VBA、 別ブックの最終行...
-
VBAの計算で@が出てしまう件
-
DataGridViewのセル編集完了後...
-
Excelのプルダウンで2列分の情...
-
Excel ユーザーフォームをモー...
-
EXCELのVBA-フィルタ抽出後の...
-
VB6のDataGridコントロールが良...
-
”戻り値”が変化したときに、マ...
-
Sub 要具ライフ() ActiveSheet....
-
RC表示に変数を入れる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報