|
>E列には各行の1で始まる値を持つセル(=黄色に染まったセル)の数を返したい
これは簡単なようにみえて、結構ややこしいロジックになります。
なぜなら追加は単純に +1 すればいいのだけど、クリアしたときに元の値の先頭
の文字が 1 だったかどうかを判定しないと、正しくマイナスすることが
出来ないからです。そのためにはクリアのときだけ Undo して、いったん元の値を
復活させるという方法も考えられますが、今回は "全て清算してから数え直す"
というやり方にしてみました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TgR As Long, myNO As Long
Dim GetV As Variant
Dim r As Range, rb As Range, MyR As Range
With Target
If .Column < 6 Then Exit Sub
TgR = .Row
End With
Application.EnableEvents = False
For Each r In Target
myNO = -4142
If IsEmpty(r.Value) Then
r.Interior.ColorIndex = myNO
myNO = 6: GoTo MyLine
End If
GetV = Left(r.Value, 1)
If IsNumeric(GetV) Then
Select Case GetV
Case "1": myNO = 6
Case "2": myNO = 4
Case "3": myNO = 8
Case "4": myNO = 3
End Select
End If
r.Interior.ColorIndex = myNO
MyLine:
If myNO = 6 Then
Cells(TgR, 5).Value = 0
Set MyR = Cells(TgR, 6).Resize(, 251)
If WorksheetFunction.CountA(MyR) > 0 Then
For Each rb In MyR.SpecialCells(2)
If Left(rb.Value, 1) = 1 Then
Cells(TgR, 5).Value = Cells(TgR, 5).Value + 1
End If
Next
End If
Set MyR = Nothing
End If
Next
Application.EnableEvents = True
End Sub
|
|