Faixa de formato que é dinamicamente baseada em outros valores de célula

0

Considere a seguinte planilha do Excel:

Eugostariadeformatarascélulasnalinha1:2deacordocomosvaloresnascélulasA4:B7.Seeualterarosvalores,ascélulasdalinha1:2devemsermescladas,delimitadas,preenchidasecoloridasdeacordo.

Seeualterarascélulasdeformataçãoparaoseguinte:

    
por Dlockhart104 09.03.2015 / 00:42

1 resposta

0

Aqui está uma solução VBA. Ele copia as cores de plano de fundo e de fonte da sua tabela Format , portanto, se desejar texto branco, use texto branco nessa tabela. Você pode querer ajustar as configurações de borda (linhas 39 e 47), bem como onde procura as condições de formato a serem usadas (linhas 27 - 30). Isto é especialmente verdadeiro se o seu exemplo for um mockup puro com pouca relação com seus dados reais.

Option Explicit
Sub MadeFormattedHeadings()

    'Declarations
    Dim ws As Worksheet
    Dim headerRange As Range
    Dim rangeSize As Integer
    Dim rangeStart As Integer
    Dim r As Long
    Dim c As Integer

    'Choose the worksheet to use
    '(Pick one of these two methods)
    Set ws = Worksheets("Sheet1")   'This uses the name on the tab seen in Excel
    Set ws = Sheet1                 'This uses the code name seen in VBA

    With ws

        'Remove previous headers
        If UCase(.Range("A1").Value) = UCase(.Range("A5").Value) Then
            .Rows("1:2").Delete
            .Rows("1:2").Insert
        End If

        'Add new headers
        rangeStart = 1
        For r = 5 To 8  '<<<< There are other methods to iterate. This is just one option.
            'Save the settings
            Set headerRange = .Range("A" & r)
            rangeSize = .Range("B" & r).Value

            'Format the first row
            With .Range(.Cells(1, rangeStart), .Cells(1, rangeStart + rangeSize - 1))
                .Merge
                .Value = headerRange.Value
                .HorizontalAlignment = xlCenter
                .Font.Color = headerRange.Font.Color
                .Interior.Color = headerRange.Interior.Color
                .BorderAround xlSolid, xlThin
            End With

            'Format the second row
            With .Range(.Cells(2, rangeStart), .Cells(2, rangeStart + rangeSize - 1))
                .Merge
                .Value = rangeSize
                .HorizontalAlignment = xlCenter
                .BorderAround xlSolid, xlThin
            End With

            'Iterate to the next section
            rangeStart = rangeStart + rangeSize
        Next

    End With

End Sub
    
por 12.03.2015 / 20:45