2016-07-22 6 views
-1

새로 고칠 때 데이터 배열의 크기를 조정할 템플릿 스프레드 시트를 개발 중입니다. 현재 조건부 서식을 사용하여 배열이 늘어남에 따라 테두리를 추가하고 그 반대의 경우도 마찬가지입니다.조건부 서식 대 VBA 서식 지정 속도/메모리

대부분의 시트를 조건부 서식 규칙의 적용을받는 대신 VBA를 사용하여 새로 고칠 때 서식을 지정하는 것이 더 깨끗합니까? 한 사람과 다른 사람의 장점은 무엇입니까?

감사합니다.

+0

데이터 배열은 워크 시트의 행 목록을 의미합니다. 사용자가 워크 시트를 편집 할 수 없도록하는 경우에도 여전히 조건부 서식을 사용하는 것이 좋습니다. 그러나 일부 사용자가 셀 주위를 이동하거나 조건부 서식을 갖는 열을 삽입하거나 붙여 넣기 셀을 복사 할 때 조건부 서식이 적용됩니다. –

+0

VBA 코드를 실행 한 후에 만 ​​서식이 변경되는 경우에만 성능 향상을 위해 VBA 서식을 지정해야합니다. 조건부 서식은 수식과 같으므로 워크 시트에 변경 사항이있을 때 새로 고치거나 계산합니다. –

답변

0

는 다음과 같은 코드를 생각해 내 HP-asaurus에

Option Explicit 

Private Sub fill() 
    Dim i As Long 
    Dim num As Long 

    Randomize 

    For i = 1 To 500000 
     num = Int(50 * Rnd) + 1 
     Sheet1.Cells(i, 1).Value = num 
     Sheet1.Cells(i, 2).Value = num 
    Next 
End Sub 

Sub format() 
    Dim i As Long 

    Debug.Print Now 
    With Sheet1 
     For i = 1 To .UsedRange.Rows.Count 
      If .Cells(i, 1).Value > 20 Then .Cells(i, 1).Interior.ColorIndex = 20 
     Next 
    End With 
    Debug.Print Now 
End Sub 

Sub conditionally_format() 
    Debug.Print Now 

    With Sheet1.Columns(2) 
     .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="=40" 
     .FormatConditions(1).Font.Color = -16383844 
     .FormatConditions(1).Font.TintAndShade = 0 
     .FormatConditions(1).Interior.PatternColorIndex = xlAutomatic 
     .FormatConditions(1).Interior.Color = 13551615 
     .FormatConditions(1).Interior.TintAndShade = 0 
    End With 

    Debug.Print Now 
End Sub 

을, 나는

format: 
7/22/2016 1:10:34 PM 
7/22/2016 1:10:49 PM 
conditionally_format: 
7/22/2016 1:25:06 PM 
7/22/2016 1:25:07 PM 

그러나, 그것은 주목해야한다 다음과 같은 결과가 conditionally_format 하위의 결과는 시간을 나타내는 것을 얻을 실제로 조건부로 셀을 포맷하는 것이 아니라 해당 코드를 실행해야합니다. 스프레드 시트의 값을 변경하고 소요 시간을 확인하는 것 외에는 측정 방법을 모르겠습니다. 그렇게하는 것조차 너무 빠르기 때문에 불가능합니다. 측정 할 수 없기 때문입니다. 즉, 각 셀을 순환하는 코드가 일 때 조건부 서식을 설정하는 것보다 느리게 실행됩니다. Excel이 각 Cell 개체를로드 한 다음 셀 개체 .Value을 확인한 다음 해당 평가를 기반으로 Interior.ColorIndex 속성을 설정하면 실제로 예상됩니다. VBA가 그림에서 벗어나는 것을 제외하고는 조건부 서식에서도 동일한 작업이 수행됩니다. 이 작업을 수행하는 Excel의 기본 (최적화 된) 컴파일 된 코드입니다. 속도 차이가 큰가요? 그렇지 않아. 느린 랩톱은 15 초 만에 50 만회 비교를했는데 조건부 서식 규칙을 사용하여 본질적으로 즉각적인 서식을 적용했습니다.

장점 ... 힘든 통화입니다. 더 많은 최종 사용자가 조건부 서식 규칙을 이해할 것이라고 생각합니다. 최종 사용자가 더 많은 원숭이를 가질 수 있다는 의미입니다. 이것은 바람직하지 않을 수 있습니다. 더 깨끗한가요? 힘든 통화. UI에서 서식 지정 규칙을 설정하면 개발자가 조건부 서식 규칙을 찾지 않을 수도 있으며 조건부 서식에 대한 IDE에 아무 것도 표시되지 않기 때문에 바람직하지 않은 결과가 발생할 수 있습니다. 과거에는 bugs with conditional formatting이 있었지만 여전히 문제가 있는지는 알 수 없습니다. 궁극적으로 선택하는 방법은 최종 사용자에게 얼마나 많은 제어 권한을 부여할지, 얼마나 많은 코드를 작성하려고하는지에 달려 있다고 생각합니다.