Это, возможно, не самый чистый способ, но он сделает свое дело.
Sub InsertSequenceAndColours()
Dim ws As Worksheet
Dim rng As Range
Dim iLast As Integer
Dim i As Integer
Dim iSeq As Integer
Dim iColRGB(2, 3) As Integer
Dim iIncremColour As Integer 'used to determine the colour to use
Dim iColour As Integer
'set RGB Colours; change as needed
'colour 0 (green)
iColRGB(0, 1) = 146
iColRGB(0, 2) = 208
iColRGB(0, 3) = 80
'colour 1 (pink)
iColRGB(1, 1) = 255
iColRGB(1, 2) = 225
iColRGB(1, 3) = 236
'change to 0 if you want to start with colour 1 (pink)
iIncremColour = 1
'declare worksheet to work on
Set ws = ThisWorkbook.Worksheets(Sheet1.Name)
With ws
'find last row
iLast = .Cells(.Rows.Count, "C").End(xlUp).Row
'loop through column C
For i = 2 To iLast
iSeq = iSeq + 1
If .Cells(i, 3).Value <> .Cells(i - 1, 3).Value Then
iSeq = 1
iIncremColour = iIncremColour + 1
End If
'assign Seq. No. to cell (column E)
.Cells(i, 5).Value = iSeq
'find if iIncremColor is odd or even. output: 0 or 1
iColour = iIncremColour Mod 2
'assign colour to col C D E
.Range(Cells(i, 3), Cells(i, 5)).Interior.Color = _
RGB(iColRGB(iColour, 1), iColRGB(iColour, 2), iColRGB(iColour, 3))
Next i
End With
End Sub
Он обнаруживает Seq "1" (Col E), находя первое вхождение "Нет" (ColС);Последовательности «2, 3» являются просто инкрементными (поэтому он будет работать также с более чем 3 случаями).То же самое с цветом.Для каждого "Seq 1" он увеличивает число;проверив, является ли это число нечетным или даже назначает один или другой цвет.
Обратите внимание, что для работы я использую кодовое имя листа (если вы не знакомы с ним, пожалуйста, запустите его в Google), что я настоятельно рекомендуютак как он будет работать, даже если вы решите изменить имя вашего рабочего листа в Excel.Когда VBA запрашивает работу с именем или индексом листа, вы можете обмануть его, используя codename.Name
или codename.Index
.