एक IF सूत्र को छोटा करने के लिए समाधान की तलाश में


9

मेरे पास निम्न संरचना के साथ एक लंबा सूत्र है:

=IF(!X!<>0,!X!+A1,"")

कहाँ ! X बहुत लंबा सूत्र है।

क्या X को दोहराने से बचने का कोई उपाय है! X! दो बार? मुझे इसकी दो वजहों से ज़रूरत है:

  1. पत्रक के उपयोगकर्ता के लिए सूत्र को पठनीय बनाने के लिए
  2. प्रक्रिया के समय को कम करने के लिए

मैं किसी भी मदद की सराहना करता हूं।

धन्यवाद, डियो


1
यदि आप चाहते हैं To reduce the process timeतो जाहिर है कि आपको परिणाम को कहीं स्टोर करना होगा, अन्यथा एक्सेल को फिर से वैल्यू पुनर्गणना करनी होगी जब कंडीशन मैच होगी। डिवीजन भी एक बहुत महंगा ऑपरेशन है
फुल्विक

2
बस जिज्ञासु भी, क्या आपने लंबे समय तक फॉर्मूला "गोल्फ" किया है जितना आप कर सकते हैं? इसे छोटा करने के लिए शायद नामांकित पर्वतमाला जोड़ें?
ब्रूसवेने

लंबे सूत्र को अधिक पठनीय बनाने के लिए, अलग-अलग तर्ज पर alt + return का उपयोग करके तर्क अलग करें। एक नकारात्मक पक्ष यह है कि जब तक उपयोगकर्ता सूत्र पट्टी की ऊंचाई का विस्तार नहीं करता है, तब तक सूत्र अधूरा दिखता है।
ब्रैड स्मिथ

जवाबों:


12

एक और दृष्टिकोण दोहरे उलटा उपयोग करने के लिए है :

=IFERROR(1/(1/really_long_formula)+A1,"")

यदि वास्तव में_लग_फॉर्मूला 0 का मूल्यांकन करता है , तो आपको शून्य से भाग मिलेगा और IFERROR()वसीयत उसे पकड़ लेगी!

कृपया ध्यान दें कि इस आवश्यकता को संभालने के लिए सामान्य तरीका (और सबसे अच्छा तरीका) एक सहायक सेल के साथ है।


7
यह फ़्लोटिंग-पॉइंट डिवीज़न के कारण खोई हुई सटीकता से पीड़ित हो सकता है
phuclv

3
@ LưuV LnhPhúc आप पूरी तरह से सही हैं! AFH दृष्टिकोण सबसे अच्छा तरीका है!
गैरी की स्टूडेंट

यह एक अच्छी, गंदी चाल है। मैं इसका उपयोग करने से बहुत अधिक बचना चाहूंगा, लेकिन अंतिम उपाय के रूप में, कौन जानता है?
आंद्रे चलेला

3
नोट: यह सच है कि कुछ सटीक नुकसान हो सकता है, लेकिन यह शायद ही कभी एक प्रासंगिक मुद्दा होगा। मैंने 1/1/xएक्सेल में कई बार 100,000 यादृच्छिक संख्याओं के साथ परीक्षण किया , और केवल 1.4% उस समय एक गोल त्रुटि थी। मेरे द्वारा प्राप्त अधिकतम सापेक्ष त्रुटि 1.6e-16 थी, जो कि, अच्छी तरह से, प्रभावी रूप से शून्य है। इसके अलावा, दिलचस्प बात यह है कि पूर्णांकों ने कभी भी राउंडिंग त्रुटियों को प्रदर्शित नहीं किया (0 से 1e14 तक कई रेंज का परीक्षण किया गया)। तो, इस उत्तर को शुद्धता / निर्मलता के दृष्टिकोण से नहीं बल्कि व्यावहारिक गणना के दृष्टिकोण से देखा जा सकता है।
एंड्रे चलेला

1
मुझे गैरी का समाधान सबसे अच्छा लगता है। पहला क्योंकि यह साफ है (जैसा कि एंड्रे द्वारा भी उल्लेख किया गया है) और अन्य उपयोगकर्ताओं द्वारा पठनीय है। दूसरा, क्योंकि यह मेरी जरूरत को पूरा करता है। मेरे पास जटिल या लंबे पूर्णांक नहीं हैं। मुझे उम्मीद है कि उपयोगकर्ता, जो इस दृष्टिकोण को चुनते हैं, इस समाधान के पेशेवरों और विपक्षों के बारे में टिप्पणी करने के लिए पढ़ते हैं।
Dio

23

स्पष्ट उत्तर मुख्य पत्रक से दूर, एक फार्म सेल में सूत्र लगाने के लिए है। उदाहरण के लिए, यदि आप उपयोग करते हैं, तो H1इसे निम्न पर सेट करें:

=!X!

आपका सूत्र तब बन जाता है:

=IF(H1<>0,H1+A1,"")

यह विशिष्ट है कि कोई अन्य प्रोग्रामिंग भाषा में क्या करेगा।


मुझे एक सहायता स्तंभ जोड़ने की संभावना नहीं है। फिर भी धन्यवाद।
डियो

2
@ डियो अगर यह नहीं देखा जाना चाहिए तो बस कॉलम छिपाएं। आप कॉलम / श्रेणी को पढ़ने में आसान बनाने के लिए नाम भी दे सकते हैं
phuclv

4
@ डियो - ठीक है। आपका स्वीकृत उत्तर बल्कि चालाक है, लेकिन इस बात से अवगत 1/(1/x)रहें कि गोलाई के कारण, आप सटीकता खो सकते हैं ( हमेशा हमेशा की तरह समान नहीं होती x), खासकर यदि आप पूर्णांक डेटा के साथ काम कर रहे हैं। यह अधिक सामान्य रूप से लागू नहीं होता है (उदाहरण के लिए शून्य से कम की जाँच)। (टिप्पणी @ LưuVĩnhPhúc के साथ स्वीकृत उत्तर के साथ पार की गई।)
AFH

आपकी सलाह और टिप्पणियों के लिए धन्यवाद। मैं अभी भी खुला सुझाव छोड़ दूंगा कि क्या अभी भी नए सुझाव हैं।
डियो

2
यह लंबे सूत्र को देखने में मददगार होगा। एक कार्य प्रकोष्ठ के अलावा, एक वर्कशीट में एक नाम को परिभाषित करना संभव है जिसमें एक सूत्र शामिल है
डेटा

3

क्या आपको वास्तव ""में झूठे मामले में परिणाम की आवश्यकता है ? यदि आपको रिक्त देखने के लिए केवल कक्ष की आवश्यकता है (जैसे आप =ISNUMBER()बाद में इस पर कुछ उपयोग नहीं करेंगे ), तो आप झूठी स्थिति में सामग्री को छिपाने के लिए सशर्त स्वरूपण का उपयोग कर सकते हैं ।

आप जिस सशर्त प्रारूप को सेल पर लागू करेंगे, ताकि वह कुछ भी प्रदर्शित न करे कस्टम प्रारूप है "", इस तरह (यह पुर्तगाली में है लेकिन आपको यह विचार मिलता है:

रिक्त कक्षों के लिए कस्टम प्रारूप

सेल में सूत्र, जैसा कि अपेक्षित होगा, बस =!X!+A1

सशर्त स्वरूपण सूत्र हो सकता है =!X!=0, लेकिन यह पुनर्गणना को बाध्य करेगा !X!, जिसे आप नहीं चाहते हैं (आपका "प्वाइंट 2")। यह बेहतर है कि सेल का उपयोग करके खुद को =B1=A1नुकसान पहुँचाएं (हमारे सेल को बी 1 का उपयोग करके ) - इसका मतलब होगा !X! = 0

यहां तक ​​कि अगर आपको वास्तव में होने के लिए सेल सामग्री की आवश्यकता है "", तो आमतौर पर कार्यपत्रक में मामूली बदलाव किए जा सकते हैं ताकि इस दृष्टिकोण का उपयोग किया जा सके। यदि ऐसा है, तो स्थिति का वर्णन करते हुए एक टिप्पणी छोड़ दें।


1

मुझे एक सहायता स्तंभ जोड़ने की संभावना नहीं है। फिर भी धन्यवाद।

यदि आप एक सहायक स्तंभ नहीं जोड़ सकते हैं , तो पूरी वर्कशीट क्यों नहीं जोड़ सकते? इसके कई फायदे हैं:

  • आपका सहायक सेल स्थान नहीं लेता है जो अन्यथा उपयोग किया जा सकता है, क्योंकि यह एक अलग वर्कशीट में है।
  • आप सेल को नाम दे सकते हैं , फिर नाम से संबोधित कर सकते हैं , जैसे=IF(X<>0,X+A1,"")
  • यदि आपको एक से अधिक सेल में यह करने की आवश्यकता है, तो आप कर सकते हैं:
    1. सहायक सहायक "हेल्पर" का नाम बदलें
    2. मुख्य समीकरण के रूप में उसी सेल में सहायक समीकरण रखो (चलो इसे कॉल करें D5
    3. सेल को helper!D5मुख्य पत्रक के रूप में संबोधित करें ।
  • यदि आवश्यक हो तो आप सहायक शीट छिपा सकते हैं।
  • यह दो बार मूल्यांकन करने से तेज है।
  • यह सटीकता खो नहीं है।

नुकसान मैं देख सकता हूँ:

  • आपको मुख्य शीट में अनाम कोशिकाओं sheetname!D5को केवल इसके बजाय संदर्भित करना है D5
  • अब सूत्र एक के बजाय दो भागों में है।
  • वर्कशीट प्रसार।

फायदे और नुकसान का वजन, मुझे लगता है कि कई उपयोग के मामलों के लिए यह एक अच्छा समाधान है। ऐसी स्थितियां मौजूद हैं जहां यह इष्टतम नहीं है, हालांकि मैं इस समय किसी के बारे में नहीं सोच सकता।


1
बहुत बढ़िया जवाब। मेरे द्वारा देखे गए नुकसान इस प्रकार हैं: 1. यह उपयोगकर्ता के लिए गणना को सरल बनाने में बहुत मदद नहीं करता है , क्योंकि अब बड़ा सूत्र छिपा हुआ है। 2. कई वर्कबुक में पहले से ही चादरों की भीड़ होती है। यहां तक ​​कि अगर आप इसे छिपाते हैं, तो आपको इसे अनहाइड करने के लिए बहुत सारी छिपी हुई चादरों से गुजरना पड़ सकता है। इसके अलावा, यह एक अच्छा समाधान है।
आंद्रे चलेला

@ AndréNeves इसके लिए धन्यवाद! वह पहला मेरे साथ हुआ था, लेकिन जब तक मैं नुकसान की धारा लिख रहा था तब तक मैं इसे भूल गया ।
wizzwizz4

1

उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन बनाने के लिए अभी तक सुझाया गया विकल्प नहीं है। आपको मेनू बार (इसे Google) में डेवलपर टैब चालू करना होगा और एक मॉड्यूल बनाना होगा।

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

सूत्र पट्टी में आप तब करेंगे

=udf_myCalc(A1)

नोट: यह अब एक .xlsx (मैक्रोज़ के साथ) फ़ाइल बन जाता है और कॉर्पोरेट नेटवर्क में अतिरिक्त अनुमतियों की आवश्यकता हो सकती है क्योंकि मैक्रोज़ का उपयोग दुर्भावनापूर्ण उद्देश्यों के लिए किया जा सकता है और कुछ ईमेल फ़िल्टर उन्हें ब्लॉक कर देंगे। फ़ंक्शंस अनिर्दिष्ट हैं, इसलिए आपको अपने कार्यों को करने के लिए नोट्स प्रदान करने की आवश्यकता होगी और मुझे अपने सभी फ़ंक्शंस udf_xxxxx को कॉल करने के लिए उपयोगी लगता है ताकि यह स्पष्ट हो कि यह एक निर्मित फ़ंक्शन नहीं है

UDF के साथ कुछ अन्य GOTCHAs भी हैं। कुछ अच्छे सुझावों के लिए इस लिंक को देखें http://www.decisionmodels.com/calcsecretsj.htm

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.