Isso pressupõe que
- cada linha na célula tem as mesmas características
color
ebold
ness - Os dados a serem processados estão na Coluna A
Algoritmo:
- Obter o intervalo a ser testado
- Divida o conteúdo da célula com
vbLf
como o delimitador - Crie uma turma com a sequência de texto, negrito e cor
- salva cada instância da classe em uma coleção, exceto se tiver a cor a ser excluída.
- recrie o texto da célula sem a linha relevante e formate os dados da célula linha por linha como o original
Módulo de turma Renomear: cLineData
Public pText As String
Public pBold As Boolean
Public pColor As Long
Public pLength As Long
Módulo regular
Option Explicit
Sub DeleteColoredLine()
Dim cLD As cLineData, Coll As Collection
Dim wsSrc As Worksheet
Dim R As Range, C As Range, V As Variant, W As Variant
Dim lineNum As Long, charPos As Long, I As Long
Set wsSrc = Worksheets("sheet4")
With wsSrc
Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
For Each C In R
Set Coll = New Collection
V = Split(C.Text, vbLf)
For lineNum = 0 To UBound(V)
Set cLD = New cLineData
charPos = charPos + Len(V(lineNum)) + 1 'include newline character
cLD.pText = V(lineNum)
cLD.pLength = Len(cLD.pText)
With C.Characters(charPos - 1, 1).Font 'last printed character in line
cLD.pBold = .Bold
cLD.pColor = .Color
End With
'Check for color to be removed
If Not cLD.pColor = RGB(0, 112, 192) Then _
Coll.Add cLD
Next lineNum
'Create the new string
I = 0
ReDim V(0 To Coll.Count - 1)
For Each cLD In Coll
V(I) = cLD.pText
I = I + 1
Next cLD
C.Offset(0, 1).Value = Join(V, vbLf)
'Format the lines
charPos = 1
With C.Offset(0, 1)
For Each cLD In Coll
With .Characters(charPos, cLD.pLength).Font
.Bold = cLD.pBold
.Color = cLD.pColor
End With
charPos = charPos + Len(cLD.pText) + 1 '+1 to include newline character
Next cLD
End With
Next C
End Sub
Note que,
- outras características de formatação podem ser adicionadas ao teste de classe para testar e / ou reproduzir
- my blue (código RGB) é um pouco diferente de seu azul
- Esta macro coloca os resultados na coluna adjacente. Você também pode optar por substituir a coluna original ou ocultá-la.
Na captura de tela abaixo, a coluna A é o original, a coluna B é o resultado da execução da macro acima.