Esta macro deve obter as bordas que você deseja.
Sub wrap_border()
Dim r As Long, br As Long, lColumns_Wide As Long, lColumn_With_Solid_Data As Long
lColumns_Wide = 17
lColumn_With_Solid_Data = 16
With ActiveSheet
For r = 2 To .Cells(Rows.Count, lColumn_With_Solid_Data).End(xlUp).Row
If CBool(Len(.Cells(r, 1).Value)) Then
If CBool(Len(.Cells(r + 1, 1).Value)) Then
br = r
ElseIf CBool(Application.CountA(.Cells(r + 1, 1).Resize(Rows.Count - r, 1))) Then
br = .Cells(Rows.Count, lColumn_With_Solid_Data).End(xlUp).Row
br = Application.Evaluate("MIN(INDEX(ROW(" & (r + 1) & ":" & br & ")+NOT(LEN(A" & (r + 1) & ":A" & br & "))*1E+99,,))")
Else
br = .Cells(Rows.Count, lColumn_With_Solid_Data).End(xlUp).Row + 1
End If
.Cells(r, 1).Resize(br - r, lColumns_Wide).BorderAround ColorIndex:=13, Weight:=xlThick
End If
Next r
End With
End Sub
Depois de executá-lo em sua planilha, você pode esperar resultados semelhantes aos seguintes.
Osparâmetrosparamodificaroestilodebordacom.BorderAround
podemserencontradosemColor:=
ou ColorIndex:=
, mas não ambos. Eu acho ColorIndex
mais fácil de trabalhar, desde que você consiga usar a paleta limitada. Aqui está uma tabela ColorIndex para escolher.
No que diz respeito à classificação, você terá que preencher as células em branco na coluna A ou usar uma coluna auxiliar para a direita para ajudar a manter os valores juntos.
Modificação: Eu adicionei funcionalidades adicionais para que a largura da região da borda possa ser definida. Isso requer que uma das colunas que não tenha células em branco também seja identificada. Veja as linhas 2 e amp; 3 no código revisado.