За пару дней я написал макрос go, который должен был «обрамлять» определенные ячейки / диапазоны.
Я написал это:
Sub Framer(ws As Worksheet, sAdd As String)
With ws.Range(sAdd)
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
End With
End Sub
И затем для каждого ячейка / диапазон, который нам нужно создать, просто назовите это с именем WS, на котором находится ячейка / диапазон, и адресом ячейки / диапазона.
В вашем примере, как я бы это сделал написать отдельную подпрограмму, в которой я Dim
2 ссылки диапазона, скажем, rStart
и rEnd
, и найти способ определить, на какие ячейки они ссылаются. Я бы провел oop a for
через крайний левый столбец с типом данных, который представляет для этого интерес. Go от первого ряда до последнего, и где цвет шрифта черный и цвет ячейки выше красный, сделайте следующее:
For i = [whatever] to lastrow
'[black/red], obviously you will need to find the numbers and put those here
If Range("A" & i).font.color = [black] AND Range("A" & i-1).font.color = [red]
Set rStart = Range("A" & i)
Exit For
End if
Next i
После этого я начну с первая строка черного шрифта, смотрящая на цвет шрифта i-1-й строки:
'+100, make sure it's a number larger than the count of potential black rows in-a-row
For i = rStart.Row to rStart.Row+100
If Range("A" & i+1).font.color = [red] then
Set rEnd = Range("K" & i)
Exit For
End if
Next i
(вместо того, чтобы делать Do While
или Until
, мне нравится делать циклы for
, где я пересекаюсь с конечное значение и просто сделайте Exit for
.) Как только вы назначите rStart
и rEnd
, вы просто go
Call Framer(ws, Range(rStart, rEnd).Address)
Затем просто повторите это до нижней части таблицы , Я надеюсь, что это имеет смысл.