programing

Excel VBA 코드를 사용한 조건부 포맷

lastmoon 2023. 8. 15. 11:27
반응형

Excel VBA 코드를 사용한 조건부 포맷

Range 개체를 호출했습니다.DestinationRange어느 범위의 참조B3:H63

Excel VBA 코드를 사용하여 다음 두 가지 조건부 형식 규칙을 동적으로 적용합니다(범위가 변경될 수 있음).

  1. 셀 열 D가 비어 있으면 형식 지정을 적용할 수 없습니다(참인 경우 중지 사용).
  2. E 열의 셀 값이 F 열의 셀 값보다 작으면 전체 행의 배경이 녹색이어야 합니다.

녹음을 해봤는데 녹음이 제대로 안 돼요.VBA를 사용하여 이 조건부 포맷을 수행하려면 어떻게 해야 합니까?

이렇게 하면 간단한 사례에 대한 답을 얻을 수 있지만, 비교해야 할 열(이 경우 B 및 C)과 초기 범위(A1:D5이 경우)는 어떻게 됩니까?그러면 제가 좀 더 완벽한 답변을 드릴 수 있습니다.

Sub setCondFormat()
    Range("B3").Select
    With Range("B3:H63")
        .FormatConditions.Add Type:=xlExpression, Formula1:= _
          "=IF($D3="""",FALSE,IF($F3>=$E3,TRUE,FALSE))"
        With .FormatConditions(.FormatConditions.Count)
            .SetFirstPriority
            With .Interior
                .PatternColorIndex = xlAutomatic
                .Color = 5287936
                .TintAndShade = 0
            End With
        End With
    End With
End Sub

참고: 이 테스트는 Excel 2010에서 테스트되었습니다.

편집: 주석을 기반으로 코드가 업데이트되었습니다.

VBA를 사용하여 예상되는 방식으로 중복 조건을 적용할 수 있는 방법을 방금 발견한 것 같습니다.몇 시간 동안 다양한 접근 방식을 시도한 결과, 모든 접근 방식이 생성된 후에 조건부 형식 규칙의 "적용 대상" 범위를 변경하는 것이 효과적이라는 것을 알게 되었습니다.

다음은 제 작업 예입니다.

Sub ResetFormatting()
' ----------------------------------------------------------------------------------------
' Written by..: Julius Getz Mørk
' Purpose.....: If conditional formatting ranges are broken it might cause a huge increase
'               in duplicated formatting rules that in turn will significantly slow down
'               the spreadsheet.
'               This macro is designed to reset all formatting rules to default.
' ---------------------------------------------------------------------------------------- 

On Error GoTo ErrHandler

' Make sure we are positioned in the correct sheet
WS_PROMO.Select

' Disable Events
Application.EnableEvents = False

' Delete all conditional formatting rules in sheet
Cells.FormatConditions.Delete

' CREATE ALL THE CONDITIONAL FORMATTING RULES:

' (1) Make negative values red
With Cells(1, 1).FormatConditions.add(xlCellValue, xlLess, "=0")
    .Font.Color = -16776961
    .StopIfTrue = False
End With

' (2) Highlight defined good margin as green values
With Cells(1, 1).FormatConditions.add(xlCellValue, xlGreater, "=CP_HIGH_MARGIN_DEFINITION")
    .Font.Color = -16744448
    .StopIfTrue = False
End With

' (3) Make article strategy "D" red
With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""D""")
    .Font.Bold = True
    .Font.Color = -16776961
    .StopIfTrue = False
End With

' (4) Make article strategy "A" blue
With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""A""")
    .Font.Bold = True
    .Font.Color = -10092544
    .StopIfTrue = False
End With

' (5) Make article strategy "W" green
With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""W""")
    .Font.Bold = True
    .Font.Color = -16744448
    .StopIfTrue = False
End With

' (6) Show special cost in bold green font
With Cells(1, 1).FormatConditions.add(xlCellValue, xlNotEqual, "=0")
    .Font.Bold = True
    .Font.Color = -16744448
    .StopIfTrue = False
End With

' (7) Highlight duplicate heading names. There can be none.
With Cells(1, 1).FormatConditions.AddUniqueValues
    .DupeUnique = xlDuplicate
    .Font.Color = -16383844
    .Interior.Color = 13551615
    .StopIfTrue = False
End With

' (8) Make heading rows bold with yellow background
With Cells(1, 1).FormatConditions.add(Type:=xlExpression, Formula1:="=IF($B8=""H"";TRUE;FALSE)")
    .Font.Bold = True
    .Interior.Color = 13434879
    .StopIfTrue = False
End With

' Modify the "Applies To" ranges
Cells.FormatConditions(1).ModifyAppliesToRange Range("O8:P507")
Cells.FormatConditions(2).ModifyAppliesToRange Range("O8:O507")
Cells.FormatConditions(3).ModifyAppliesToRange Range("B8:B507")
Cells.FormatConditions(4).ModifyAppliesToRange Range("B8:B507")
Cells.FormatConditions(5).ModifyAppliesToRange Range("B8:B507")
Cells.FormatConditions(6).ModifyAppliesToRange Range("E8:E507")
Cells.FormatConditions(7).ModifyAppliesToRange Range("A7:AE7")
Cells.FormatConditions(8).ModifyAppliesToRange Range("B8:L507")


ErrHandler:
Application.EnableEvents = False

End Sub

언급URL : https://stackoverflow.com/questions/13661965/conditional-formatting-using-excel-vba-code

반응형