みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel マクロのFor~Nextで再起動エラー

勤務表を作っています。
下記の’OKまでは希望どうりうまく出来ていたのですが、勤務表の下セルに各列の人員(行)10名分位A,B,Cの計を表示させたい。実行するとエラー「Microsoft office Excel 再起動」を求められます。
 for~が判断指令が<重い>のでしょうか。なんとか回避さする方法を教えてください。
Win XP Sp2 Office Excel 2007です。今回これを作るにあたり初VBA使用者です。


' C入力後の翌日は休をセット。CC連続は休休セット。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim cnt As Variant
Dim a1 As Byte
Dim b1 As Byte
Dim c1 As Byte
Dim nin As Variant
Dim retsu As Variant

If Target.Count > 1 Then Exit Sub '複数セルの入力は無視

'A
If Target.Value = "A" Or Target.Value = "A" Then
Target.Value = "A"
Range("AV16").Value = Target.Column
End If

'B
If Target.Value = "B" Or Target.Value = "B" Then
Target.Value = "B"
Range("AV16").Value = Target.Column
End If

'C
If Target.Value = "C" Or Target.Value = "C" Then
Range("AV16").Value = Target.Column
Target.Value = "C"
Else
End If
'
If Target.Value = "C" Then
If Target.Offset(0, -1).Value = "C" Then 'Cが連続したら
Target.Offset(0, 1).Resize(1, 2).Value = ("休") '連休に
Else
End If
Target.Offset(0, 1).Value = ("休")   'そうでなければ休
End If

'A,B,C の数をカウントする。

nin = Range("AV15")  '別のプログラムから入力した人員数
retsu = Range("AV16")  ' A,B,Cのいずれかを入力したセル列。Target.Column

’OK

For cnt = 7 To (6 + nin)
If cells(cnt, retsu) = "A" Then
a1 = a1 + 1
End If
If cells(cnt, retsu) = "B" Then
b1 = b1 + 1
End If
If cells(cnt, retsu) = "C" Then
c1 = c1 + 1
End If
Next cnt

cells(nin + 7, retsu) = a1 'A番
cells(nin + 8, retsu) = b1 'B番
cells(nin + 9, retsu) = c1 'C番

End Sub

投稿日時 - 2011-07-08 03:04:06

QNo.6861736

すぐに回答ほしいです

質問者が選んだベストアンサー

チェンジ処理中にシートにデータを書き込んでいるので
その際、またチェンジ割り込みが発生し同じ処理を繰り返しているのです

チェンジ処理の実行文先頭にこれを
Application.EnableEvents=False '割込み停止

処理から出る(end sub)直前にこれを
Application.EnableEvents=true '割込み再開

でわ

投稿日時 - 2011-07-10 01:37:29

お礼

確かにそうですね。良く理解できました。
ご回答ありがとうございました。

投稿日時 - 2011-07-11 03:24:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問