Friday, 10 August 2018

अॅडव्हान्स एक्सेल : भाग सहावा ( Nested IF )

मागील भागात आपण IF Function आणि AND Function यांचा वापर करून एखादा विद्यार्थी त्याला मिळालेल्या मार्कांवरून पास की नापास हे कसे ठरवायचे ते पाहिले. पण त्याच वेळेस मी Nested IF याबद्दलही दोन शब्द सांगितले होते. आणि असेही म्हटले होते की Nested IF वापरताना तुमची कन्सेप्ट क्लिअर असली पाहिजे. तेच आज आपण इथे पाहणार आहोत. नाही नाही... घाबरू नका... इतकेही अवघड नाहीये हे. फक्त एका IF Function मध्ये परत IF Function येत असल्यामुळे ते काहीसे क्लिष्ट वाटू शकते. अर्थात वाटणे आणि असणे यात खूप फरक असतो. हे फक्त क्लिष्ट वाटते... असत नाही. चला तर मग...

Nested IF वापरण्यासाठी आपण मागील उदाहरणाचाच पुढील भाग पाहू. मागील उदाहरणात आपण काही विद्यार्थ्यांच्या तीन विषयांचे मार्क घेऊन त्यानुसार त्यांचा रिझल्ट काढला होता. म्हणजे जर ते सगळ्या विषयात पास असतील तर “पास” आणि तीन पैकी कोणत्याही एका विषयात नापास असतील तर “नापास” ठरवत होतो. पण यात दोनच गोष्टी येतात... एकतर पास किंवा नापास. पण प्रत्यक्ष निकालपत्रकात मात्र रिझल्ट बरोबरच त्यांच्या मार्कांची टक्केवारी आणि त्यावर आधारलेली ग्रेड देखील दिलेली असते. मार्कांची टक्केवारी ३५% ते ४४% असल्यास ‘Pass Class’, ४५% ते ५९% असल्यास ‘Second Class’, ६०% ते ७४% असल्यास ‘First Class’ आणि त्यापेक्षाही जास्त असल्यास ‘Dinstintion’. यासाठी आज आपण IF Functionचाच वापर करणार आहोत. पण एका पेक्षा जास्त वेळेस... आणि तेही एकात एक असलेले.

अनेकांनी महाभारत सीरिअल पाहिले असेल. त्यात द्रोणाचार्य अभिमन्यूला चक्रव्यूह रचून पराभूत करतात. इथेही हे एक प्रकारचे चक्रव्यूहच आहे. पण याची रचना माहित झाल्यावर विद्यार्थ्यांचा अभिमन्यू नाही तर अर्जुन बनतो. चक्रव्युहात जसे मध्यभागी मुख्य योद्धा असतो आणि त्याच्या भोवताली वेगवेगळे कडे बनवले जाते. आधी पहिले कडे फोडले की दुसरे, दुसरे फोडले की तिसरे... याप्रमाणे. आणि समजा पहिले कडे तुम्हाला फोडताच आले नाही तर तुम्हाला अगदी मध्यभागी जाण्याची वेळच येत नाही. तसेच हे Nested IF Function असते.
Picture 1.1

सोबतच्या चित्रात एक टेबल दाखवले आहे. ज्यात काही विद्यार्थ्यांची नावे, त्यांना तीन विषयात मिळालेले मार्क, त्या मार्कांची बेरीज, त्यांचा रिझल्ट, त्यांची टक्केवारी आणि त्यांची श्रेणी ( ग्रेड हो ) देण्यात आली आहे. यापैकी नाव, आणि त्यांच्या विषयांचे मार्क आपणच भरणार आहोत. एकूण मार्कांसाठी SUM हा फोर्मुला वापरला आहे. रिझल्ट साठी मागील भागात पाहिलेले IF AND Function वापरले आहे. त्यांच्या मार्कांची टक्केवारी काढण्यासाठी एकूण मिळविलेले मार्क भागिले एकूण असलेले मार्क गुणिले १०० हा फोर्मुला वापरण्यात आला आहे.

=(F4/300)*100 – [ 131/300*100 = 43.67 ]

इथपर्यंत काहीच अवघड नाही. त्यापुढे ग्रेडच्या रकान्यातील सेलमध्ये आपण पुढील फोर्मुला वापरणार आहोत.

=IF(G4="Fail","Fail",IF(H4<45,"Pass Class",IF(H4<60,"Second Class",IF(H4<75,"First Class","Distinction"))))

काहीसा डेंजर दिसतोय ना फोर्मुला? पण तो फक्त लांबच लांब असल्यामुळे तसा वाटतोय. आपण त्याचे विभाजन केल्यास तो तितका अवघड वाटणार नाही. मी तर त्यासाठी कॉपी पेस्टचाच जास्त वापर करतो. बाकी काही नाही हो... टाईप करण्याचे कष्ट वाचतात.

सुरुवात करू पहिल्या IF पासून. यातील logical test या भागात G4=”Fail” ही condition दिली आहे. म्हणजे G4 या सेलमधील रिझल्ट “Fail” असा असेल तर त्याच्या True Value या भागात “Fail” जसेच्या तसे लिहिले आहे. कारण जर मुलगा नापास असेल तर त्याची ग्रेड काढली जात नाही. पण समजा G4 या सेल मधील रिझल्ट “Pass” असा असेल तर IF Functionच्या False Value भागातील माहिती दाखविण्यात येईल. पण वरील फंक्शन मध्ये आपण त्या भागात कोणताही शब्द किंवा शब्दसमूह न देता तिथे अजून एक IF Function दिले आहे. ( IF Function No. 2 - चित्रात त्याची फोड केलेली तुम्हाला दिसेल. )

दुसऱ्या नंबरचे जे IF Function आहे त्यातील logical test मध्ये H4<45 ही कंडीशन दिली आहे. H4 का? कारण H4 या सेलमध्येच त्या मुलाची टक्केवारी काढण्यात आली आहे म्हणून. एक गोष्ट इथे लक्षात घ्या. पहिल्या IF मध्ये कंडीशन देताना आपण value ला अवतरण चिन्ह ( “ “ - डबल कोटेशन मार्क ) वापरले होते. दुसऱ्या IF मध्ये मात्र कंडीशन देताना value अवतरण चिन्हात दिलेली नाही. का? कारण पहिल्या value चा DataType हा Text ( शब्द ) आहे तर दुसऱ्या value चा DataType हा Numeric ( संख्या ) आहे. जर दुसऱ्या value ला देखील आपण अवतरण चिन्हात दाखवले असते तर एक्सेलने त्याला संख्या न मानता शब्द मानले असते आणि मग त्यामुळे त्याच्या सोबत कोणत्याही प्रकारचे Mathematical Calculation करणे शक्य होऊ शकले नसते. हे इथे सांगण्याचे कारण म्हणजे ही गोष्ट दिसताना अगदी लहान दिसली तरीही त्यामुळे मिळणारा रिझल्ट चुकीचा असू शकतो. असो... ज्या वेळेस एक्सेल H4<45 ही कंडीशन चेक करेल त्यावेळेस त्याला जर H4 cell मधील value 45 पेक्षा लहान दिसली तर “Pass Class” हे शब्द आपल्याला दिसू लागतील. ( इथे मी फक्त ‘<’ हेच Operator वापरले आहे. कारण या कंडीशन मध्ये 45 ही संख्या घेतली आहे. जर ती संख्या 44 असती तर ‘<’ operator बरोबरच ‘=’ हे operator देखील वापरावे लागले असते. [ H4<=44 ] ) जर H4 या सेल मधील संख्या 45 किवा त्यापेक्षा मोठी असेल तर दुसऱ्या IF Function च्या false value या सेक्शन मधील माहिती आपल्याला मिळेल. हीच गोष्ट बाकी दोन IF Function मध्येही लागू होते. आहे की नाही सोप्पं? आता अजून एक गोष्ट... या आधीच्या भागात मी असेही म्हटले होते की यासाठी सगळ्यात महत्वाचे म्हणजे कन्सेप्ट क्लिअर असावी लागते म्हणून. बरोबर ना? त्याबद्दल थोडेसे. इथे पहिल्या फंक्शन मध्ये रिझल्ट चेक केला आहे, दुसऱ्या मध्ये Pass Class, तिसऱ्या मध्ये Second Class आणि चौथ्या मध्ये First Class तसेच Distinction असे चढत्या क्रमाने logical test देण्यात आली आहे. समजा ती जर उतरत्या क्रमाने दिली असती तर? Function ने योग्य रिझल्ट दिला असता? पहा बरे करून... जमतंय का?

No comments:

Post a Comment