source

와의 차이점은 무엇입니까?값 = " " 및 .내용 지우기?

manysource 2023. 10. 7. 12:01

와의 차이점은 무엇입니까?값 = " " 및 .내용 지우기?

다음 코드를 실행하면

Sub Test_1()
   Cells(1, 1).ClearContents
   Cells(2, 1).Value = ""
End Sub

Cells(1, 1)와 Cells(2, 1)를 식으로 체크했을 때ISBLANK()두 결과 모두 TRUE로 반환됩니다. 그래서 궁금한 점이 있습니다.

사이의 차이점은 무엇입니까?Cells( , ).Value = ""그리고.Cells( , ).ClearContents?

그들은 본질적으로 똑같습니까?


그런 다음 다음 코드를 실행하여 메소드 간의 시간 차이를 테스트하면 다음과 같습니다.

Sub Test_2()
Dim i As Long, j As Long
Application.ScreenUpdating = False

For j = 1 To 10
    T0 = Timer
    Call Number_Generator
    For i = 1 To 100000
        If Cells(i, 1).Value / 3 = 1 Then
            Cells(i, 2).ClearContents
           'Cells(i, 2).Value = ""
        End If
    Next i
    Cells(j, 5) = Round(Timer - T0, 2)
Next j

End Sub

Sub Number_Generator()
Dim k As Long
Application.ScreenUpdating = False

For k = 1 To 100000
    Cells(k, 2) = WorksheetFunction.RandBetween(10, 15)
Next k

End Sub

컴퓨터에서 런타임에 대해 다음과 같은 출력이 나타납니다.

.ClearContents  .Value = ""
4.20            4.44
4.25            3.91
4.18            3.86
4.22            3.88
4.22            3.88
4.23            3.89
4.21            3.88
4.19            3.91
4.21            3.89
4.17            3.89

이 결과를 바탕으로 우리는 그 방법이.Value = ""보다 빠릅니다..ClearContents평균적으로이것이 일반적으로 사실입니까?왜 그럴까요?

제가 확인한 바로는, 단순히 빈 셀을 사용하는 것이 목표이고 포맷을 변경하고 싶지 않다면 Value = vbNullString을 사용하는 것이 가장 효율적입니다.

'ClearContents'는 셀의 다른 속성인 서식 및 수식(Value와는 엄밀히 별개의 속성)을 확인하고 변경합니다.Value = ""를 사용할 때 속성을 하나만 변경하면 되므로 더 빠릅니다.vbNullString을 사용하면 컴파일러가 빈 문자열을 사용하는 것과 큰따옴표를 사용하는 다른 방식을 사용하는 것을 묻는 메시지가 표시됩니다. 즉, 컴파일러는 일반 문자열을 사용해야 합니다.vbNullString은 빈 문자열을 예상하라는 메시지를 표시하기 때문에 몇 가지 단계를 건너뛸 수 있으며 성능 향상 효과를 얻을 수 있습니다.

단세포에 둘 다 적용할 때는 합리적인 차이가 없다고 생각하지만 범위 내에서 적용할 때는Range("A1:Z1000").ClearContents사용보다 쉽고 빠릅니다.cell(i,j).value=""중첩 루프 또는 하나의 루프에 있음

저는 주목할만한 한가지 차이점을 발견했습니다.ClearContents는 다음과 같은 유형의 값을 반환합니다.Boolean나의 제한된 시험에서 ( docs 언급)Variant활자).

Option Explicit

Public Sub ClearA1()
    Dim a As Range
    Dim b As Boolean
    Set a = Range("A1")
    
    Debug.Print b 'It's False, the default value
    b = a.ClearContents
    Debug.Print b 'Set to True, as the action was completed
End Sub

제 생각에 그 간접비의 일부는 그 사실에 기인한 것 같습니다.ClearContents값을 반환합니다. 여기서 방금 설정하고 있는 값을 설정하고 있습니다.value대체 케이스의 속성.

궁극적으로, 값을 설정하는 결과의 관점에서 두 방법은 기능적으로 동일하게 나타납니다.

사용.clearcontent공식을 가진 세포에 대해 다른 행동을 합니다.값이 하나만 있으면 동작은 동일하지만 공식이 있을 때는 다릅니다.

Excel 스프레드시트에서 큰 차이를 볼 수 있습니다.

식으로 B1이 채워졌다고 가정하면 빈 A1 = 5 B1 = "=if(A1=5", "x")가 됩니다.

이 경우 C1 (1) C1 = <= is blank(B1)> (2) C1 =로 적을 수 있는 방정식이 필요합니다.

셀이 방정식으로 채워지면 솔루션 1은 거짓을 반환합니다. 솔루션 2는 참을 반환합니다.

제가 이 주제를 조금 늦게 접했지만, 제 코드의 약간과 제가 알아차린 것을 공유하고 싶습니다. 충분히 설명할 수는 없을 것 같지만 최선을 다하겠습니다.

For Each Cell In ws.Range("D12:D161") 'Order feed colom
Select Case Cell.Value
    Case 0
        Cell.Interior.Color = Cell.Offset(0, -1).Interior.Color
    Case 1
        Cell.Interior.Color = 10198015
    Case 2
        Cell.Interior.Color = 11854022
End Select
Cell.value = "" 
Next Cell

이것은 내가 일부 필드를 지우고 D12:D161 범위에 약간의 색상을 주기 위해 사용한 약간의 코드입니다. 여기서 특별한 것은 없습니다. 값이 0이면 이웃을 복사하고 1이면 빨간색, 2면 녹색입니다.그리고 그 후에 감방을 비웁니다.

하지만 이 코드가 실행되기 위해서는 약 5-6초가 걸렸는데, 작은 코드를 쓰기에는 꽤 많은 시간이 걸렸다고 생각했습니다.는 이것을요 A에했습니다.Private Sub Workbook_SheetActivate(ByVal Sh As Object)이로 인해 사용자는 화면 전환을 위해 5-6초를 기다려야 하는 불편함을 겪었습니다.그래서 저는 연속으로 빈 것을 확인하기 위해 루프를 넣은 다음에 건너뜁니다.

이것은 스크립트의 일부이며, 예, 이 코드 조각 동안 화면이 꺼지고, 계산이 꺼지고, 이벤트가 꺼집니다.

For Each Cell In ws.Range("D12:D161") 'Order feed colom
Select Case Cell.Value
    Case 0
        Cell.Interior.Color = Cell.Offset(0, -1).Interior.Color
        Erow = Erow +1
    Case 1
        Cell.Interior.Color = 10198015
        Erow = 0
    Case 2
        Cell.Interior.Color = 11854022
        Erow = 0
End Select
Cell.value = ""
if Erow = 10 then exit for
Next Cell

이제 열에 있는 데이터에 따라 149개의 행을 수행하는 대신 대략 58개의 행을 수행했습니다.하지만 완전히 달리기 위해서는 3-4초가 걸렸습니다.디버그 모드 중에는 전혀 지연이 발생하지 않았습니다.시트에 이미 나와 있는 상태에서 수동으로 코드를 실행하면 지연이 0으로 발생했습니다. 더 후만이 거의 사용됩니다.Private Sub Workbook_SheetActivate(ByVal Sh As Object)이 코드로 3-4초 동안 작동했습니다.후다에를 했습니다..Value = "" 코드에서 이 줄을 제거하면 0.5초만에 실행됩니다.그래서 이제 저는 제 문제가 어디에 있는지 알게 되었습니다. 여러 가지 방법으로 제 세포를 비우도록 말이죠.나는 그것을 알아챘다..clearcontents제가 제일 빨랐어요.시트에서 시트로 이동하는 경우에는 ws. 시간이 많이 걸렸습니다.

For Each Cell In ws.Range("D12:D161") 'Order feed colom
Select Case Cell.Value
    Case 0
        Cell.Interior.Color = Cell.Offset(0, -1).Interior.Color
        Erow = Erow +1
    Case 1
        Cell.Interior.Color = 10198015
        Erow = 0
    Case 2
        Cell.Interior.Color = 11854022
        Erow = 0
End Select
Cell.ClearContents 'DONT USE .Value = "", makes the code run slow
if Erow = 10 then exit for
Next Cell

결론적으로 g.와 함께 .value = "" 4-다가 ..value = VbNullstring가 걸렸습니다. 3-다.다.ClearContents0.5초밖에 걸리지 않았습니다.tPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)

이것이 왜 일어나고 있는지 또는 정확히 무슨 일이 일어나고 있는지 설명해 줄 수 있는 사람이 있다면 감사하겠습니다.

언급URL : https://stackoverflow.com/questions/38455405/what-is-the-difference-between-value-and-clearcontents