Excel 조건부 서식 매크로 적용하기

  • 최초 작성일: 2024년 5월 14일(화)

목차

[TOC]


소개

이 글에서는 Excel에서 조건부 서식으로 설정(변경)된 셀 서식을 그대로 다른 셀들에도 똑같이 적용할 수 있는 매크로 기능을 설명한다. 매크로를 사용하면 반복적인 작업을 자동화하여 생산성을 높일 수 있다.

매크로 예제

아래는 조건부 서식을 포함한 셀 서식을 다른 범위로 복사하는 매크로 코드이다. 이 매크로는 셀의 배경색, 글꼴 색상, 그리고 조건부 서식으로 인해 변경된 테두리를 복사한다.

Sub CopyColorsAndBorders()
    Dim sourceRange As Range, destRange1 As Range, destRange2 As Range
    Dim i As Integer, j As Integer
    Dim sourceCell As Range, destCell1 As Range, destCell2 As Range
    
    Set sourceRange = Sheets("Sheet1").Range("B1:AQ2048") ' 1번 매트릭스 범위 설정
    Set destRange1 = Sheets("Sheet1").Range("AU1:CJ2048") ' 2번 매트릭스 첫 번째 대상 범위 설정
    Set destRange2 = Sheets("Sheet1").Range("CN1:EC2048") ' 2번 매트릭스 두 번째 대상 범위 설정
    
    For i = 1 To sourceRange.Rows.Count
        For j = 1 To sourceRange.Columns.Count
            Set sourceCell = sourceRange.Cells(i, j)
            Set destCell1 = destRange1.Cells(i, j)
            Set destCell2 = destRange2.Cells(i, j)
            
            ' 배경색 복사
            destCell1.Interior.Color = sourceCell.DisplayFormat.Interior.Color
            destCell2.Interior.Color = sourceCell.DisplayFormat.Interior.Color
            
            ' 글꼴 색상 복사
            destCell1.Font.Color = sourceCell.DisplayFormat.Font.Color
            destCell2.Font.Color = sourceCell.DisplayFormat.Font.Color
            
            ' 조건부 서식으로 인해 변경된 테두리가 있는 경우에만 테두리 복사
            CopyBordersIfChanged sourceCell, destCell1
            CopyBordersIfChanged sourceCell, destCell2
        Next j
    Next i
End Sub

Sub CopyBordersIfChanged(ByVal sourceCell As Range, ByRef destCell As Range)
    Dim borderIndex As Variant
    
    For Each borderIndex In Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight, xlInsideVertical, xlInsideHorizontal)
        With sourceCell.DisplayFormat.Borders(borderIndex)
            ' 조건부 서식에 의해 스타일이 변경된 경우에만 복사
            If .LineStyle <> sourceCell.Borders(borderIndex).LineStyle Or _
               .Weight <> sourceCell.Borders(borderIndex).Weight Or _
               .Color <> sourceCell.Borders(borderIndex).Color Then
                
                destCell.Borders(borderIndex).LineStyle = .LineStyle
                destCell.Borders(borderIndex).Weight = .Weight
                destCell.Borders(borderIndex).Color = .Color
            End If
        End With
    Next borderIndex
End Sub

코드 설명

  • CopyColorsAndBorders 매크로는 원본 범위(sourceRange)의 서식을 첫 번째 대상 범위(destRange1)와 두 번째 대상 범위(destRange2)에 복사한다.
  • 셀의 배경색과 글꼴 색상을 복사하며, 조건부 서식으로 인해 변경된 테두리도 복사한다.
  • CopyBordersIfChanged 함수는 셀의 각 테두리를 확인하여 조건부 서식으로 인해 변경된 경우에만 해당 테두리를 복사한다.