와의 차이점은 무엇입니까?값 = " " 및 .내용 지우기?
다음 코드를 실행하면
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-다.다.ClearContents
0.5초밖에 걸리지 않았습니다.tPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)
이것이 왜 일어나고 있는지 또는 정확히 무슨 일이 일어나고 있는지 설명해 줄 수 있는 사람이 있다면 감사하겠습니다.
언급URL : https://stackoverflow.com/questions/38455405/what-is-the-difference-between-value-and-clearcontents
'source' 카테고리의 다른 글
스프링 - applicationContext.xml이 없으므로 열 수 없습니다. (0) | 2023.10.07 |
---|---|
부트스트랩 중앙 수직 및 수평 정렬 (0) | 2023.10.07 |
테이블에 ON DELETE 제약 조건을 추가하려면 어떻게 해야 합니까? (0) | 2023.10.07 |
이 C 코드의 취약한 점은 무엇입니까? (0) | 2023.10.07 |
Woocommerce 체크아웃 페이지에서만 총 가격에 텍스트 추가 (0) | 2023.10.07 |