2012-05-03 11 views
7

एक्सेल का if फ़ंक्शन तीन तर्क, एक शर्त, एक if-true मान, और एक if-false मान लेता है। क्या एक्सेल सभी तीन तर्कों के मूल्य को काम करता है, या क्या यह केवल स्थिति के मूल्य और इसी परिणाम का काम करता है?क्या एक्सेल आईएफ फ़ंक्शन को प्रदान किए गए परिणाम तर्क दोनों का मूल्यांकन करता है?

स्पष्टीकरण: मैं सोच नहीं कर रहा हूँ क्या परिणाम if की हो जाएगा, मैं सोच रहा हूँ या नहीं, यह फ़ंक्शन के परिणाम की गणना से पहले सभी तर्कों का मूल्यांकन।

यह पूछने के बराबर है कि if फ़ंक्शन आलसी या सख्त मूल्यांकन का उपयोग करता है या नहीं। उदाहरण के लिए, निम्नलिखित स्यूडोकोड:

x = 5; 
print x>2 ? "Bigger" : "Smaller" + 1/0 

एक डिवाइड-दर-शून्य अपवाद एक भाषा में पूरी तरह से सख्त मूल्यांकन के साथ, के रूप में यह 1/0 का मूल्यांकन होता है, फेंक भले ही परिणाम ?: के लिए आवश्यकता नहीं होगी ऑपरेटर।

आलसी मूल्यांकन भाषा में, ?: ऑपरेटर मूल्यांकन करने के लिए कौन सी अभिव्यक्ति का निर्धारण करने से पहले x>2 का मूल्यांकन करेगा।

समस्या यह है कि Excel में, 1/0 एक वैध मान (जो #DIV/0! होता है) उत्पन्न करता है जो अभिव्यक्तियों में मौजूद हो सकता है। इसलिए, बस =if(true,1,1/0) पर कॉल करना यह नहीं दिखाता कि Excel 1/0 का मूल्यांकन कर रहा है या नहीं।

+0

मेरा अद्यतन उत्तर देखें। –

उत्तर

6

बहुत

? iif(true, 1, 1/0) 'run-time error: division by zero 

परीक्षण करने के लिए मैं क्या तुम सच में IIF() मतलब यह सोचते कर रहा हूँ पूर्व - VBA में यह नहीं "शॉर्ट सर्किट" है, तो आप मामलों में If..Then..Else..End If का उपयोग करना चाहिए है जहां कि एक समस्या हो सकती है ।

ठीक है - परीक्षण क्या तुम सच में पूछा:

'In a VBA module 
Function TruePart() 
     MsgBox "True part" 
     TruePart = "True" 
End Function 


Function FalsePart() 
     MsgBox "False part" 
     FalsePart = "False" 
End Function 

एक सेल में: =IF(TRUE,truepart(),falsepart())

ही अगर() सेल की गणना प्रति एक MsgBox मिलता है।

आगे मान्यता के रूप में, यह आप दो MsgBox देता है - प्रत्येक के लिए एक:

Sub Tester() 
    Debug.Print IIf(True, TruePart(), FalsePart()) 
End Sub 
+0

मैं वास्तव में एक्सेल फ़ंक्शन 'if' के बारे में बात कर रहा हूं, एक्सेल वीबीए कथन' if' नहीं। – Joe

+0

बहुत बढ़िया! मैंने अनुमान लगाया नहीं होगा कि आप 'फंक्शन' में 'Msgbox' का उपयोग कर सकते हैं। – Joe

+0

बहुत अच्छा, टिम! +1 –

0

मैं टिम के विपरीत उत्तर है, एक्स्ट्रा लार्ज 2010 को बजाय आधारित हैं फंक्शन:

=IF(TRUE,1,1/0) 

नहीं करता ' टी # डीवी/0 त्रुटि उत्पन्न नहीं,

=IF(FALSE,1,1/0) 

करता है। इसके अलावा, my reading का तात्पर्य है कि केवल उचित स्थिति का मूल्यांकन किया जाता है।

+0

होने के लिए अच्छा यह वास्तव में यह नहीं कहता कि Excel पहले '1/0' की गणना करता है या नहीं। यह सभी तर्कों का मूल्यांकन कर सकता है, जिससे 'IF (TRUE, 1, # DIV/0)' होता है, फिर फ़ंक्शन का मूल्यांकन किया जाता है। – Joe

+0

@Doug - मैं एक अलग ट्रैक पर बंद था ... –

+1

@TimWilliams, यह देखने के लिए अच्छा है कि आप मानव हैं :)। –

2

एक जोड़े को सरल परीक्षण:

=IF(TRUE,1,1/0)

=IF(FALSE,1/0,1)

एक div/0 त्रुटि में न तो परिणाम है, तो एक शर्त के केवल इसी परिणाम निष्कर्ष निकाल सकता है वास्तव में मूल्यांकन किया जाता है। जाहिर है कि स्थिति भी मूल्यांकन किया जाना चाहिए।

अधिक जटिल सूत्रों में आप यह देखने के लिए मूल्यांकन फॉर्मूला टूल का भी उपयोग कर सकते हैं कि IF कथन कैसे पार्स किए गए हैं।

+0

मेरे उत्तर और @ डौग ग्लेन्सी के बीच दिलचस्प अंतर। मैंने एक्सएल 2007 का इस्तेमाल किया। –

+0

एक्सेल अभी भी '1/0' की गणना कर सकता है, फिर फ़ंक्शन के परिणामस्वरूप अन्य तर्क लौटा सकता है। – Joe

+0

हमारे दूसरे सूत्र अलग हैं। मेरा गलत मूल्यांकन करता है और इसलिए त्रुटि उत्पन्न करता है। हमारे परिणाम एक ही हैं। –

2

ऐसा नहीं है।

एक्सेल 2013 केवल आवश्यक कोड का मूल्यांकन करता है।

मेरे पास कुछ सौ हजार पंक्तियों के माध्यम से प्रतिलिपि बनाने के लिए एक बहुत जटिल और समय लेने वाला सेल सूत्र था। गणना करने में कुछ घंटे लगेंगे। लेकिन सौभाग्य से, परिणाम शून्य होने पर कुछ अन्य मानदंडों के आधार पर निर्धारित करना आसान था।

तो अगर किसी अन्य वक्तव्य का सुझाव दिया गया है तो यह गणना से बचने के लिए एक स्टेटमेंट का उपयोग करके यह शून्य होना चाहिए, और जब आवश्यक हो तो गणना पूरी तरह से बढ़ जाती है, प्रक्रिया के समय को लगभग 10% तक काटने का समय।

यदि एक्सेल दोनों अभिव्यक्तियों का मूल्यांकन कर रहा था, तो अगर वक्तव्य में केवल जटिलता और समय जोड़ा जाएगा।

1

एक्सेल IF() फ़ंक्शन के लिए उत्सुक मूल्यांकन का उपयोग करने लगता है (i। ई। हमेशा तीनों तर्कों का मूल्यांकन करता है)। VBA के बिना परीक्षण करने के लिए, स्वत: कार्यपुस्तिका गणना चालू करते हैं और नई कार्यपुस्तिका के सेल में प्रवेश:

=IF(TRUE, 0, RAND()) 

सहेजें और बंद कार्यपुस्तिका। कार्यपुस्तिका को फिर से खोलें और फिर बंद करें, और एक्सेल "परिवर्तन सहेजें" संकेत दिखाएगा क्योंकि अस्थिर फ़ंक्शन RAND() का मूल्यांकन किया गया है।

RAND() से 1 बदलें और एक्सेल प्रॉम्प्ट नहीं दिखाता है।

+0

यह सबूत नहीं है। मेरी राय में, यह होता है: एक्सेल यह मानता है कि सेल में एक सूत्र है जिसमें *** अस्थिर *** फ़ंक्शन ('रैंड()') है, इसलिए यह सूत्र को पुन: गणना करता है और इस प्रकार आपको कार्यपुस्तिका को सहेजने के लिए संकेत देता है। – Teejay

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