勤務表を作っています。
下記の’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