वीबीए में, केस स्टेटमेंट चुनें का एक विकल्प है यदि-तब कथन, आपको यह जांचने की अनुमति देता है कि क्या शर्तें पूरी होती हैं, प्रत्येक शर्त के लिए विशिष्ट कोड चला रहा है। प्रोसेस करने के लिए कई शर्तें होने पर सेलेक्ट स्टेटमेंट इफ स्टेटमेंट के लिए बेहतर होता है।
केस उदाहरण चुनें
यह उदाहरण उपयोगकर्ता को YesNoCancel MessageBox के साथ संकेत देता है और परीक्षण करता है कि उपयोगकर्ता ने कौन सा विकल्प चुना है:
1234567891011121314 | उप Select_Case_Yes_No_Cancel ()VbMsgBoxResult के रूप में मंद nResultnResult = MsgBox ("…", vbYesNoCancel)केस nResult का चयन करेंकेस वीबीहांसंदेश बॉक्स "हाँ"केस vbNoसंदेश बॉक्स "नहीं"केस वीबीरद्द करेंसंदेश बॉक्स "रद्द करें"अंत चयनअंत उप |
नीचे हमने इसके बजाय इफ स्टेटमेंट का उपयोग करके समकक्ष लिखा है। आप देखेंगे कि केस सेलेक्ट स्टेटमेंट में थोड़ा कम टाइपिंग शामिल है - कई मानदंडों का परीक्षण करते समय यह लाभ बढ़ाया जाता है।
12345678910111213 | उप अगर_हां_नहीं_रद्द करें ()VbMsgBoxResult के रूप में मंद nResultnResult = MsgBox ("…", vbYesNoCancel)अगर nResult = vbहाँ तोसंदेश बॉक्स "हाँ"ElseIf nResult = vbNo तोसंदेश बॉक्स "नहीं"ElseIf nResult = vbरद्द करें तोसंदेश बॉक्स "रद्द करें"अगर अंतअंत उप |
केस स्टेटमेंट सिंटैक्स
केस स्टेटमेंट का चयन करें सिंटैक्स इस प्रकार है:
12345678910 | केस चुनें [टेस्ट एक्सप्रेशन]मामला [शर्त 1][कार्रवाई यदि शर्त 1 सत्य है]मामला [शर्त 2][कार्रवाई यदि शर्त 2 सत्य है]मामला [शर्त n][कार्रवाई यदि शर्त n सत्य है]मामला अन्य[कार्रवाई अगर कोई सत्य नहीं है]अंत चयन |
कहा पे:
[टेस्ट एक्सप्रेशन] - मूल्यांकन करने के लिए मूल्य है। आमतौर पर यह एक चर है।
[कार्रवाई यदि शर्त n सत्य है] - क्या शर्त पूरी होने पर चलाने के लिए सिर्फ कोड है (ठीक उसी तरह जैसे इफ स्टेटमेंट के साथ)
[शर्त एन] - परीक्षण की शर्त है। स्थितियों का परीक्षण करने के कई अलग-अलग तरीके हैं। हम नीचे उनकी चर्चा करेंगे।
केस स्टेटमेंट पहली शर्त के लिए कोड निष्पादित करेगा जो TRUE पाया जाता है। यदि कोई शर्त पूरी नहीं होती है, तो कोई कोड निष्पादित नहीं किया जाएगा, जब तक कि कोई अन्य खंड नहीं जोड़ा जाता है।
केस मानदंड चुनें
चुनिंदा मामलों का उपयोग संख्यात्मक मानों और पाठ दोनों का मूल्यांकन करने के लिए किया जा सकता है। पहले हम चर्चा करेंगे कि संख्यात्मक व्यंजकों का मूल्यांकन करने के लिए मामलों का चयन कैसे करें।
सटीक मिलान - अंक
आप केस स्टेटमेंट के साथ सटीक मिलान के लिए आसानी से परीक्षण कर सकते हैं:
1 | केस 10 |
या एकाधिक संख्याओं के साथ सटीक मिलान के परीक्षण के लिए अल्पविराम जोड़ें:
1 | केस 20, 30, 40 |
1234567891011121314 | उप ExactMatch_Numbers ()डिम एन अस इंटीजरएन = सीआईएनटी (इनपुटबॉक्स ("…"))केस नंबर चुनेंकेस 10'अगर n 10 है तोकेस 20, 30, 40' अगर n 20/30/40 है तोमामला अन्य' अगर n 10/20/30/40 नहीं है तोअंत चयनअंत उप |
सीमाओं
आप जांच कर सकते हैं कि कोई संख्या इस तरह की सीमा के भीतर आती है या नहीं:
1 | केस 55 से 74 |
यह प्रक्रिया एक छात्र के लिए उनके संख्यात्मक स्कोर के आधार पर एक अक्षर स्कोर उत्पन्न करेगी:
12345678910111213141516171819202122 | उप कैल्क_ग्रेड ()पूर्णांक के रूप में मंद स्कोरस्ट्रिंग के रूप में मंद लेटरग्रेडस्कोर = इनपुटबॉक्स ("छात्र स्कोर दर्ज करें")केस स्कोर चुनेंकेस 90 से 100लेटरग्रेड = "ए"केस 80 से 90लेटरग्रेड = "बी"केस 70 से 80लेटरग्रेड = "सी"केस 60 से 70लेटरग्रेड = "डी"मामला अन्यलेटरग्रेड = "एफ"अंत चयनMsgBox "छात्र का ग्रेड है:" और लेटरग्रेडअंत उप |
आप Case Is . के साथ श्रेणियों का परीक्षण भी कर सकते हैं
केस का चयन करें
1234 | मामला <55 . है'कुछ नहीं करनाकेस <= 74MsgBox "रेंज में" |
याद रखें कि केस स्टेटमेंट केवल पहले मैच के लिए कोड निष्पादित करेगा।
यह प्रक्रिया केस टू के बजाय केस इज़ का उपयोग करके छात्र के ग्रेड की गणना करेगी।
12345678910111213141516171819202122 | उप Select_Case_Is_Grade ()पूर्णांक के रूप में मंद स्कोरस्ट्रिंग के रूप में मंद लेटरग्रेडस्कोर = इनपुटबॉक्स ("छात्र स्कोर दर्ज करें")केस स्कोर चुनेंकेस है>= 90लेटरग्रेड = "ए"केस है>= 80लेटरग्रेड = "बी"केस है>= 70लेटरग्रेड = "सी"केस है>= 60लेटरग्रेड = "डी"मामला अन्यलेटरग्रेड = "एफ"अंत चयनMsgBox "छात्र का ग्रेड है:" और लेटरग्रेडअंत उप |
मामला अन्य
यदि कोई शर्त पूरी नहीं होती है तो आप कुछ करने के लिए अपने केस स्टेटमेंट के अंत में "केस एल्स" जोड़ सकते हैं:
1 | मामला अन्य |
केस एल्स का उपयोग कैसे किया जा सकता है, यह देखने के लिए पिछले कोड उदाहरण का अंत देखें।
केस चुनें - टेक्स्ट और लाइक ऑपरेटर
अब तक हमारे Select Case उदाहरणों ने केवल संख्याओं के साथ काम किया है। आप टेक्स्ट के साथ सेलेक्ट केस स्टेटमेंट का भी उपयोग कर सकते हैं।
सटीक मिलान - टेक्स्ट
आप परीक्षण कर सकते हैं कि क्या अभिव्यक्ति इस तरह एक सटीक वाक्यांश से मेल खाती है:
1 | मामला "बीट्स" |
या यह जांचने के लिए अल्पविराम का उपयोग करें कि क्या अभिव्यक्ति एक से अधिक वाक्यांशों से सटीक रूप से मेल खाती है:
1 | केस "ऐप्पल", "केला", "ऑरेंज" |
इसे एक साथ रखना ऐसा लगता है:
12345678910 | उप ExactMatch_Food ()केस रेंज ("a1") चुनें। मानमामला "बीट्स"MsgBox "सब्जी"केस "ऐप्पल", "केला", "ऑरेंज"संदेश बॉक्स "फल"अंत चयनअंत उप |
अपर व लोअरकेस
डिफ़ॉल्ट रूप से, वीबीए केस सेंसिटिव है. इसका मतलब है कि वीबीए "टेक्स्ट" को "टेक्स्ट" से अलग मानता है। केस-सेंसिटिविटी को बंद करने के लिए विकल्प जोड़ें अपने मॉड्यूल के शीर्ष पर टेक्स्ट की तुलना करें:
1 | विकल्प टेक्स्ट की तुलना करें |
टेक्स्ट के साथ काम करते समय यह उदाहरण केस सेलेक्ट को केस-असंवेदनशील बना देगा:
123456789101112 | विकल्प टेक्स्ट की तुलना करेंउप ExactMatch_Food ()केस रेंज ("a1") चुनें। मानमामला "बीट्स"MsgBox "सब्जी"केस "ऐप्पल", "केला", "ऑरेंज"संदेश बॉक्स "फल"अंत चयनअंत उप |
केस लाइक
लाइक ऑपरेटर आपको सटीक तुलना करने की अनुमति देता है। यदि टेक्स्ट मेल खाता है, तो लाइक TRUE लौटाता है, यदि यह मेल नहीं खाता है तो यह FALSE लौटाता है। यह इफ स्टेटमेंट के साथ लाइक ऑपरेटर का उपयोग करना आसान बनाता है, हालांकि यह केस स्टेटमेंट के साथ आसानी से काम नहीं करेगा।
केस लाइक - एक असफल परीक्षण
निम्न कोड दर्शाता है कि लाइक ऑपरेटर सेलेक्ट केस के साथ काम नहीं करता है:
1234567891011 | उप Select_Case_Like_DoesnotWork ()स्ट्रिंग के रूप में मंद शब्दशब्द = "कोकोआ"केस शब्द चुनेंकेस वर्ड2 जैसे "*सी*सी*"संदेश बॉक्स "अच्छा"मामला अन्यMsgBox "अच्छा नहीं"अंत चयनअंत उप |
केस लाइक - सही तरीका
हालाँकि, हम चयन कथन को लाइक ऑपरेटर के साथ काम करने के लिए TRUE एक्सप्रेशन में जोड़ सकते हैं:
1234567891011 | उप Select_Case_Like_CorrectWay ()स्ट्रिंग के रूप में मंद शब्दशब्द = "कोकोआ"केस ट्रू चुनेंकेस शब्द जैसे "*सी*सी*"संदेश बॉक्स "अच्छा"मामला अन्यसंदेश बॉक्स "अच्छा नहीं"अंत चयनअंत उप |
केस - कोलन
केस स्टेटमेंट का उपयोग करते समय आप प्रत्येक शर्त के साथ जितनी चाहें उतनी पंक्तियाँ जोड़ सकते हैं। हालाँकि, यदि आपको केवल कोड की एक पंक्ति चलाने की आवश्यकता है। सब कुछ एक ही पंक्ति में लिखने के लिए आप एक कोलन ( : ) का उपयोग कर सकते हैं।
कोड को छोटा करने के लिए कोलन का उपयोग करने के अलावा, यहां पहले जैसा ही छात्र ग्रेड उदाहरण दिया गया है:
1234567891011121314151617 | उप Calc_Grade_colon ()पूर्णांक के रूप में मंद स्कोरस्ट्रिंग के रूप में मंद लेटरग्रेडस्कोर = इनपुटबॉक्स ("छात्र स्कोर दर्ज करें")केस स्कोर चुनेंकेस ९० से १००: लेटरग्रेड = "ए"केस 80 से 90: लेटरग्रेड = "बी"केस 70 से 80: लेटरग्रेड = "सी"केस 60 से 70: लेटरग्रेड = "डी"केस एल्स: लेटरग्रेड = "एफ"अंत चयनMsgBox "छात्र का ग्रेड है:" और लेटरग्रेडअंत उप |
केस चयन - और / या - एकाधिक शर्तें
आप चयन मामले के साथ अतिरिक्त मानदंड का परीक्षण करने के लिए और/या ऑपरेटरों का उपयोग कर सकते हैं।
इस उदाहरण में हम 'आयु' चर पर एक सेलेक्ट केस का उपयोग कर रहे हैं, लेकिन हम सेक्स का परीक्षण भी करना चाहते हैं। इसलिए हम अधिक जटिल परीक्षण करने के लिए एंड ऑपरेटर का उपयोग करते हैं:
123456789101112131415161718 | सब नेस्टेड सेलेक्टकेस ()स्ट्रिंग के रूप में मंद सेक्समंद आयु पूर्णांक के रूप मेंलिंग = "पुरुष" 'या महिलाउम्र = 15केस की उम्र चुनेंकेस है <20 और लिंग = "पुरुष"Msgbox "20 वर्ष से कम आयु का पुरुष"केस है <20 और लिंग = "महिला"Msgbox "20 साल से कम उम्र की महिला"केस है>= 20 और लिंग = "पुरुष"Msgbox "20 से अधिक पुरुष"केस है>= 20 और लिंग = "महिला"Msgbox "20 से अधिक महिला"अंत चयनअंत उप |
नेस्टेड केस स्टेटमेंट
इफ स्टेटमेंट्स की तरह ही, आप केस स्टेटमेंट्स को एक दूसरे के अंदर नेस्ट कर सकते हैं:
123456789101112131415161718192021222324 | सब नेस्टेड सेलेक्टकेस ()स्ट्रिंग के रूप में मंद सेक्समंद आयु पूर्णांक के रूप मेंलिंग = "पुरुष" 'या महिलाउम्र = 15केस की उम्र चुनेंमामला है <20केस सेक्स चुनेंमामला "पुरुष"MsgBox "20 वर्ष से कम आयु का पुरुष"मामला "महिला"MsgBox "20 साल से कम उम्र की महिला"अंत चयनकेस है>= 20 और लिंग = "महिला"केस सेक्स चुनेंमामला "पुरुष"MsgBox "20 से अधिक पुरुष"मामला "महिला"MsgBox "20 से अधिक महिला"अंत चयनअंत चयनअंत उप |
केस स्टेटमेंट बनाम अगर स्टेटमेंट
परीक्षण के लिए जितनी अधिक शर्तें होंगी, केस स्टेटमेंट की तुलना इफ स्टेटमेंट से उतनी ही अधिक उपयोगी होगी। आइए एक उदाहरण देखें।
यह जांचने के लिए आवश्यक कोड है कि क्या वर्कशीट का नाम इफ स्टेटमेंट का उपयोग करके मानों के एक सेट के बराबर है:
12345 | यदि नाम = "बजट" या नाम = "पूर्वानुमान" या नाम = "अनुगामी 12" या _नाम = "फ्लेक्स" या नाम = "अन्य अनुपात" या नाम = "तुलना" या _नाम = "BudReview" या नाम = "P&L_Review" या नाम = "अन्य" तो'कुछ करोअगर अंत |
यहाँ वही कोड है जो इसके बजाय Select Statement का उपयोग करता है:
12345 | केस का नाम चुनेंकेस "बजट", "पूर्वानुमान", "ट्रेलिंग12", "फ्लेक्स", "अन्य अनुपात", _"तुलना", "BudReview", "P&L_Review", "अन्य"'कुछ करोअंत चयन |
आप देख सकते हैं कि इस परिदृश्य में चयन कथन का उपयोग करना बहुत आसान है। यह काफी कम टाइपिंग है, और इसे पढ़ना बहुत आसान है।
VBA सेलेक्ट केस उदाहरण
उदाहरण 1. केस स्टेटमेंट उपयोगकर्ता परिभाषित कार्य (यूडीएफ)
आइए ऊपर दिए गए हमारे ग्रेड गणना उदाहरण को दोहराएं और एक छात्र के स्कोर की गणना करने के लिए एक UDF बनाएं:
12345678910111213141516 | फ़ंक्शन गेटग्रेड (पूर्णांक के रूप में स्कोर) स्ट्रिंग के रूप मेंकेस स्कोर चुनेंकेस 90 से 100गेटग्रेड = "ए"केस 80 से 90गेटग्रेड = "बी"केस 70 से 80गेटग्रेड = "सी"केस 60 से 70गेटग्रेड = "डी"मामला अन्यगेटग्रेड = "एफ"अंत चयनअंत समारोह |
अब हम छात्र ग्रेड की शीघ्र गणना करने के लिए अपने एक्सेल वर्कशीट में फंक्शन गेटग्रेड का उपयोग कर सकते हैं:
Ex 2. टेस्ट शीट का नाम / लूप केस स्टेटमेंट
यह कोड एक कार्यपुस्तिका में सभी कार्यपत्रकों के माध्यम से लूप करेगा, कुछ मानदंडों को पूरा करने वाली अनप्रोटेक्टिंग शीट:
123456789101112 | सब केस_अनप्रोटेक्टशीट ()वर्कशीट के रूप में डिम WSवर्कशीट में प्रत्येक ws के लिएकेस ws.Name 'अनुपात वाली सभी शीटों की सूची' चुनेंकेस "बजट", "पूर्वानुमान", "ट्रेलिंग12", "फ्लेक्स", "अन्य अनुपात", _"तुलना", "BudReview", "P&L_Review", "अन्य"ws.असुरक्षितअंत चयनअगला wsअंत उप |
उदाहरण 3. केस चुनें - सेल वैल्यू
यह उदाहरण एक सेल में एक छात्र के स्कोर का परीक्षण करेगा, पत्र ग्रेड को सीधे सेल में दाईं ओर आउटपुट करेगा।
12345678910111213141516 | उप टेस्टसेलवैल्यू ()रेंज के रूप में मंद सेलसेल सेट करें = रेंज ("सी 1")केस सेल का चयन करें। मानकेस 90 से 100सेल। ऑफसेट (0, 1) = "ए"केस 80 से 90सेल। ऑफसेट (0, 1) = "बी"केस 70 से 80सेल। ऑफसेट (0, 1) = "सी"केस 60 से 80सेल। ऑफसेट (0, 1) = "डी"अंत चयनअंत उप |
उदाहरण 4. केस चुनें - तिथियां
यह केस सिलेक्ट उदाहरण एक फंक्शन है जो यह जांचता है कि कोई तारीख किस तिमाही में आती है।
123456789101112131415161718 | सब टेस्टडेट ()MsgBox GetQuarter(CDate("7/20/2019"))अंत उपफ़ंक्शन GetQuarter (दिनांक के रूप में डीटी) पूर्णांक के रूप मेंवर्कशीट के रूप में मंद शटकेस का चयन करें dtकेस सीडीएटी("01/01/2019") टू सीडीएटी("03/31/2019")गेटक्वार्टर = 1केस सीडीएटी("04/01/2019") टू सीडीएटी("06/30/2019")गेटक्वार्टर = 2केस सीडीएटी("07/01/2019") टू सीडीएटी("09/30/2019")गेटक्वार्टर = 3केस सीडीएटी("10/01/2019") टू सीडीएटी("12/31/2019")गेटक्वार्टर = 4अंत चयनअंत समारोह |
क्योंकि यह एक फ़ंक्शन है, आप इसे एक्सेल के अंदर एक फ़ंक्शन के रूप में उपयोग कर सकते हैं:
भूतपूर्व। 5 जांचें कि क्या संख्या विषम या सम है
यह उदाहरण परीक्षण करता है कि कोई संख्या विषम है या सम है।
123456789101112 | उप चेकऑडईवन ()डिम एन अस इंटीजरn = इनपुटबॉक्स ("एक नंबर दर्ज करें")केस एन मॉड 2 . का चयन करेंकेस 0MsgBox "संख्या सम है।"मामला एकMsgBox "संख्या विषम है।"अंत चयनअंत उप |
भूतपूर्व। 6 टेस्ट अगर तारीख वीकडे या वीकेंड पर है
ये उदाहरण परीक्षण करेंगे कि कोई तिथि सप्ताह के दिन या सप्ताहांत पर पड़ती है या नहीं।
123456789101112131415161718192021 | उप चेकवीकडे ()दिनांक के रूप में मंद डीटीडीटी = सीडीएटी ("1/1/2020")केस वीकडे चुनें (दिनांक)मामला वीबीसोमवारMsgBox "यह सोमवार है"मामला वीबीमंगलवारMsgBox "यह मंगलवार है"मामला वीबीबुधवारMsgBox "यह बुधवार है"मामला वीबीगुरुवारMsgBox "यह गुरुवार है"मामला वीबीशुक्रवारMsgBox "यह शुक्रवार है"मामला वीबीशनिवारMsgBox "यह शनिवार है"मामला वीबीरविवारMsgBox "यह रविवार है"अंत चयनअंत उप |
123456789101112 | उप चेक वीकेंड ()दिनांक के रूप में मंद डीटीडीटी = सीडीएटी ("1/1/2020")केस वीकडे चुनें (दिनांक)मामला वीबीशनिवार, वीबीरविवारMsgBox "यह एक सप्ताहांत है"मामला अन्यMsgBox "यह सप्ताहांत नहीं है"अंत चयनअंत उप |
एक्सेस में वीबीए सेलेक्ट केस
उपरोक्त सभी उदाहरण एक्सेस वीबीए में ठीक उसी तरह काम करते हैं जैसे एक्सेल वीबीए में।
123456789101112131415161718192021 | उप टेस्टसेलवैल्यू ()डेटाबेस के रूप में मंद डीबीएसरिकॉर्डसेट के रूप में पहले डिम करेंडीबीएस सेट करें = करंटडीबीसेट rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)rst के साथ.मूवफर्स्टसंपादित करेंकेस rst.Fields("City") चुनेंमामला "ऑस्टिन".rst.Fields("TelCode") = "512"मामला "शिकागो".rst.Fields("TelCode") = "312"मामला "न्यूयॉर्क".rst.Fields("TelCode") = "1212"मामला "सैन फ्रांसिस्को".rst.Fields("TelCode") = "415"अंत चयन।अद्यतनके साथ समाप्त करनाअंत सूस |