Добавляя значение диапазона ("B6") каждый раз, когда он считает ячейку Range ("B1: B5"), которая имеет зеленый фон и значение = 0 - PullRequest
0 голосов
/ 13 февраля 2020

Мне нужен код, который добавляет значение диапазона ("B6") каждый раз, когда он считает ячейку Range ("B1: B5"), которая имеет зеленый фон и значение = 0 в событии worksheet_Change.

Вот мой код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Set ws = ActiveSheet
lastRow = 5
For i = 2 To lastRow
With ws.Cells(i, 2)
If .Interior.ColorIndex = 4 And .Value = 0 Then
MsgBox "Test" ' <----- supposedly range("B6").value .add
End If
End With
Next
End Sub

1 Ответ

0 голосов
/ 13 февраля 2020

Пожалуйста, попробуйте этот код:

Работает только для ячеек, измененных в диапазоне "B1:B" & lastRow. Хотели бы вы работать на любую ячейку, измененную на всех листах? Я думаю, это может раздражать ...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet, rng As Range, lastRow As Long
Dim i As Long, iCount As Long, iCountC As Long
 Set ws = ActiveSheet
 lastRow = 5
 Set rng = ws.Range("B1:C" & lastRow)
  If Not Intersect(Target, rng) Is Nothing Then
    For i = 1 To lastRow
        With ws.Cells(i, 2)
            If .Interior.ColorIndex = 4 And .Value = 0 Then
                iCount = iCount + 1
            End If
            If .Offset(0, 1).Interior.ColorIndex = 4 And _
                            .Offset(0, 1).Value = 0 Then
                iCountC = iCountC + 1
            End If
        End With
    Next
    ws.Range("B" & lastRow + 1).Value = iCount
    ws.Range("C" & lastRow + 1).Value = iCountC
  End If
End Sub

Возвращает количество зеленых клеток сразу после lastRow. Итак, если вы измените это число (от 5 до 15), оно вернется в "B16" ...

Для вашего второго запроса я использовал .Offset(0, 1), что означает соседнюю ячейку справа ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...