2016-07-19 9 views
9

अगर मैं जब मैं कोशिकाओं (1, 1) और सेल (2, 1) सूत्र ISBLANK() का उपयोग कर जाँच निम्नलिखित कोड.Value = "" और .ClearContents के बीच क्या अंतर है?

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

चलाने दोनों परिणाम सही लौट आते हैं। तो मैं सोच रहा हूं:

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 से अधिक है। क्या यह सामान्य रूप से सच है? ऐसा क्यों?

+0

मुझे लगता है कि आपने अपने समय परीक्षण के साथ सिर पर नाखून मारा। मेरा अनुमान है कि स्पष्ट conte एनटीएस फायदेमंद है यदि संख्या स्वरूपण है जिसे आप संरक्षित करना चाहते हैं, जिसे खाली स्ट्रिंग द्वारा लिखा जा सकता है। इसके मुकाबले ज्यादा बारीकियां हो सकती हैं, लेकिन यदि ऐसा है, तो मुझे इसके बारे में पता नहीं है – RGA

+2

'। वैल्यू =" "बस सेल में शून्य-लंबाई वाली स्ट्रिंग रख रहा है, इसलिए आप इसे केवल एक नया मान लिख रहे हैं (_it तकनीकी रूप से रिक्त नहीं है ..._) 'क्लीयरकंट्स' वास्तव में सेल की 'वाल्यू' को हटा रहा है, जिसे मैं कल्पना करता हूं कि स्मृति प्रबंधन के मामले में थोड़ा अधिक ओवरहेड है। –

+0

@MacroMan गणित समानता का उपयोग करते हुए, क्या आप इसका अर्थ यह बता रहे हैं कि '। Value = "" '0 के बराबर है और' क्लेयरकंट्स 'एक खाली सेट के बराबर है? वैसे भी, मेरे प्रश्न को संपादित करने के लिए धन्यवाद आरजीए। –

उत्तर

1

जो मैंने पाया है, यदि आपका लक्ष्य सरल है तो खाली सेल है और आप स्वरूपण के बारे में कुछ भी नहीं बदलना चाहते हैं, तो आपको वैल्यू = vbNullString का उपयोग करना चाहिए क्योंकि यह सबसे कुशल है।

'ClearContents' सेल में अन्य गुणों की जांच और परिवर्तन कर रहा है जैसे प्रारूपण और सूत्र (जो तकनीकी रूप से मूल्य से अलग संपत्ति है)। वैल्यू = "" का उपयोग करते समय आप केवल एक संपत्ति बदल रहे हैं और इसलिए यह तेज़ है। VbNullString का उपयोग करने से संकलक को संकेत मिलता है कि आप डबल कोट्स के साथ दूसरी तरफ एक खाली स्ट्रिंग का उपयोग कर रहे हैं, यह एक सामान्य स्ट्रिंग की अपेक्षा कर रहा है। चूंकि vbNullString इसे खाली स्ट्रिंग की अपेक्षा करने के लिए संकेत देता है, इसलिए यह कुछ चरणों को छोड़ने में सक्षम है और आपको प्रदर्शन लाभ मिलता है।

+1

एक सेल के 'वाल्यू' को बदलने से सेल के 'फोर्मुला' को बदलने से कैसे बचता है? यह ज्यादा समझ में नहीं आता है। साथ ही, सेल मान को हटाने की विधि स्वरूपण को प्रभावित नहीं करती है। – Comintern

+0

यदि आप मैक्रो के साथ सूत्र दर्ज कर रहे हैं तो आपको रेंज सेट करना चाहिए। फोरमुला प्रॉपर्टी या रेंज। फोरमुलाआर 1 सी 1 प्रॉपर्टी। आप '.Value' प्रॉपर्टी का उपयोग करके एक फॉर्मूला सेट कर सकते हैं और एक्सेल स्वचालित रूप से महसूस करेगा कि यह एक सूत्र है और इसे आपके लिए ले जाया गया है (मुझे यकीन नहीं है, लेकिन मुझे लगता है कि एक्सेलवीबीए के पुराने संस्करण स्वचालित रूप से आपके लिए इसे स्थानांतरित नहीं करते हैं) । तो रेंज का उपयोग कर। क्लेयरकंट्स। फार्मूला पैरामीटर और वैल्यू की जांच कर रहा है। यदि आपका। वैल्यू शुरू नहीं होता है और "=" यह समझ में आता है कि यह कुछ भी करने वाला नहीं है। शायद इसे छोड़कर या इसे अनदेखा करने के अलावा। – NPComplete

+0

तो आप कह रहे हैं कि 'value' सेट करते समय, एक्सेल को यह देखने के लिए जांचना होगा कि' .Formula' को बदलने की आवश्यकता है, लेकिन यह जांचने की आवश्यकता नहीं है कि आप 'क्लीयरकंट्स' कहें कि यह किसी भी तरह से तेज़ है क्योंकि यह और काम कर रहा है? यह भी कम समझ में आता है। – Comintern

-1

आप Excel स्प्रेडशीट में एक बड़ा अंतर देख सकते हैं।

कि बी 1 मान लें समीकरण द्वारा भरा जाता है देता है खाली ए 1 = 5 बी 1 = "= अगर (ए 1 = 5," "," एक्स ")

इस मामले में, आप समीकरण है कि आप कर सकते हैं सी 1 (1) सी 1 = < = ISBLANK (बी 1)> में लिखने (2) सी 1 =

समाधान 1 झूठे के रूप में सेल समीकरण से भर जाता है वापस आ जाएगी, समाधान 2 यह सच है वापस आ जाएगी

संबंधित मुद्दे