Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Hekuri
  • Funksioni i përzgjedhjes së rastit kontrollon të gjitha kushtet. Operatori i degës "Select Case"

Funksioni i përzgjedhjes së rastit kontrollon të gjitha kushtet. Operatori i degës "Select Case"

Strukturat e kontrollit ju lejojnë të kontrolloni sekuencën e ekzekutimit të programit. Pa deklaratat e kontrollit, të gjitha deklaratat e programit do të ekzekutohen nga e majta në të djathtë dhe nga lart poshtë. Sidoqoftë, ndonjëherë kërkohet që në mënyrë të përsëritur të ekzekutohet automatikisht një grup i caktuar udhëzimesh, ose të zgjidhet problemi ndryshe në varësi të vlerave të variablave ose parametrave të specifikuar nga përdoruesi në kohën e ekzekutimit. Për këtë përdoren konstruktet e kontrollit dhe sythe.

VBA mbështet konstruktet e mëposhtme të vendimeve:

Nëse. ... ... Pastaj. ... ... Përndryshe

6.1 Konstruksioni If. ... ... Pastaj

Nëse. ... ... Pastaj përdoret kur është e nevojshme të ekzekutohet një ose një grup deklaratash në varësi të disa kushteve. Sintaksa për këtë konstrukt ju lejon ta specifikoni atë në një rresht ose në disa rreshta të programit:

If kusht atëherë shprehja If kusht Pastaj shprehja Fund If

Kushti është zakonisht një krahasim i thjeshtë, por mund të jetë çdo shprehje me një vlerë të llogaritur. Kjo vlerë interpretohet si E gabuar nëse është zero, dhe çdo jozero konsiderohet e vërtetë. Nëse kushti është i vërtetë, atëherë ekzekutohen të gjitha shprehjet pas fjalës kyçe Pastaj. Për të ekzekutuar me kusht një deklaratë të vetme, mund të përdorni sintaksë me një rresht dhe sintaksë me shumë rreshta (ndërtimi i bllokut).

Dy operatorët e mëposhtëm janë ekuivalent:

Nëse ka Data< Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

Vini re se sintaksa e deklaratës If. ... ... Atëherë nuk e përdor deklaratën End If për një rresht të vetëm. Për të ekzekutuar një sekuencë deklaratash nëse një kusht është i vërtetë, përdorni klauzolën e bllokut If. ... ... Pastaj. ... ... Fundi Nëse.

Nëse ka Data< Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

Nëse kushti është false, atëherë deklaratat pas fjalës kyçe Pastaj nuk ekzekutohen dhe kontrolli kalon në rreshtin tjetër (ose rreshtin pas deklaratës End If në një ndërtim blloku).

6.2 Nëse konstrukt. ... ... Pastaj. ... ... Përndryshe

përcakton disa blloqe deklaratash, njëri prej të cilëve do të ekzekutohet në varësi të kushtit:

Nëse kushti1 Atëherë shprehja1 ElseNëse kushti2 Pastaj shprehja2. ... ... Shprehje tjetër -n Fund Nëse

Kur ekzekutohet, së pari kontrollohet kushti 1. Nëse është e gabuar, VBA kontrollon kushtin tjetër 2, dhe kështu me radhë, derisa të gjejë një kusht të vërtetë. Kur VBA e gjen atë, ajo ekzekuton bllokun e duhur të deklaratave dhe më pas transferon kontrollin në deklaratën pas deklaratës End if. Në këtë konstrukt, mund të përfshini një bllok të deklaratave Else që VBA e ekzekuton nëse asnjë nga kushtet nuk plotësohet.

Nëse. ... ... Pastaj. ... ... ElseIf është me të vërtetë vetëm një rast i veçantë i konstruksionit If. ... ... Pastaj. ... ... Përndryshe. Vini re se ky ndërtim mund të përmbajë çdo numër blloqesh ElseIf, ose edhe asnjë. Blloku Else mund të përfshihet pavarësisht nga prania ose, anasjelltas, mungesa e blloqeve ElseIf.

Nënshembulli 1 () Dim a Si Single, b Si Single, x Si Single Dim z Si Leximi i dyfishtë i thirrjes ("A1", a) Leximi i thirrjeve ("B1", b) Le të jetë x = CSng (InputBox ("hyni x" , "Hyrja e të dhënave", 0)) Nëse x<= a Then z = Sin(x) ElseIf x >= b Pastaj z = Tan (x) Tjetër: z = Cos (x) Fundi nëse Call out ("C1", z) Fundi Sub

Vini re se mund të shtoni çdo numër blloqe Elself në deklaratën tuaj If. ... ... Pastaj. Megjithatë, numri i blloqeve Elself mund të bëhet aq i madh sa If. ... ... Atëherë do të bëhet shumë e rëndë dhe e papërshtatshme. Në një situatë të tillë, duhet të përdoret një konstrukt tjetër vendimmarrës - Select Case.

6.3 Zgjidhni ndërtimin e rastit

Konstrukti Select Case është një alternativë ndaj konstruksionit If. ... ... Pastaj. ... ... Përndryshe në rast të ekzekutimit të një blloku të përbërë nga një grup i madh deklaratash. Konstruksioni Select Case ofron një aftësi të ngjashme me konstruktin If. ... ... Pastaj. ... ... Përndryshe, por e bën kodin tuaj më të lexueshëm kur keni zgjedhje të shumta.

Konstrukti Select Case funksionon në një shprehje të vetme të testueshme, e cila vlerësohet një herë pas hyrjes në konstrukt. VBA më pas krahason rezultatin me vlerat e specifikuara në deklaratat Case të konstruktit. Nëse gjendet një përputhje, blloku i deklaratave i lidhur me deklaratën Case ekzekutohet:

Zgjidhni Rastin test_shprehje]]. ... ... ] Përfundim Zgjidh

Çdo listë shprehjesh është një listë me një ose më shumë vlera. Nëse ka më shumë se një vlerë në një listë, ato ndahen me presje. Çdo bllok deklaratash përmban deklarata të shumta ose asnjë. Nëse rezulton se vlera e llogaritur e shprehjes së testuar korrespondon me vlerat nga disa deklarata Case, atëherë ekzekutohet blloku i deklaratave të lidhura me deklaratën e parë Case nga të gjitha ndeshjet e gjetura. VBA ekzekuton një bllok deklaratash të lidhur me një deklaratë Case Else (vini re se është opsionale) nëse nuk gjendet asnjë përputhje midis vlerës së shprehjes së vërtetuar dhe vlerave nga të gjitha listat e deklaratave Case.

Le të shqyrtojmë një shembull të llogaritjes së funksionit

Nënshembulli2 () Konstumi pi2 = 1,57 Dim x Si Single Dim z Si Dyfish Lejo x = CSng (InputBox ("fut x", "hyrja e të dhënave", 0)) Zgjidh rastin x Rasti -pi2 z = Sin (x) Rasti 0 z = Cos (x) Rasti pi2 z = Tan (x) Rasti tjetër MsgBox "Të dhëna hyrëse të pavlefshme!" Dilni në fund Përzgjidhni Call out ("D1", z) Përfundoni nën

Vini re se konstrukti Select Case vlerëson shprehjen vetëm një herë kur e fut atë, dhe në If. ... ... Pastaj. ... ... Përndryshe, një shprehje e ndryshme vlerësohet për çdo deklaratë Elself. Nëse. ... ... Pastaj. ... ... Else mund të zëvendësohet me Select Case vetëm nëse deklarata If dhe çdo deklaratë Elself vlerësojnë të njëjtën shprehje.

GJUHA E PROGRAMIMIT VISUAL BASIC. PROGRAMIMI I DEGËVE

Degëzimi në Visual Basic organizohet duke përdorur:

  • deklaratë e kushtëzuar IF;
  • funksioni i integruar IIF;
  • zgjidhni operatorin CASE.

Për të kontrolluar një kusht dhe për të ekzekutuar një operator ose bllok deklaratash, përdorni kushtëzuar NËSE ... PASTAJ... Ky operator mund të përdoret me sintaksa të ndryshme: me një rresht (linear) dhe me shumë rreshta (bllok).

Operatori linear ka sintaksën e mëposhtme:

Nëse<условие>Pastaj<операторы!>

Deklarata e bllokut ka sintaksën e mëposhtme:

Nëse<условие>Pastaj
<блок операторов 1>
Fundi Nëse

Nëse kushti i specifikuar është i vërtetë, ekzekutohet blloku i deklaratave, përndryshe, blloku i deklaratës2. Nëse klauzola Tjetër nuk është e specifikuar,Nëse kushti është i plotësuar, kontrolli i kalon menjëherë operatorit të ardhshëm pas If.

Deklarata If mund të jetë e mbivendosur, domethënë, mund të jetë brenda blloqeve të deklaratave. Për të testuar më shumë se një kusht dhe për të ekzekutuar një nga disa blloqe deklaratash, përdoret një operator i kushtëzuar i zgjeruar i formularit:

Nëse<условие 1>Pastaj
<блок операторов 1>
Vetveten<условие 2>Pastaj
<блок операторов 2>
Vetveten<условие n>Pastaj
<блок операторов n>
Fundi Nëse

Për të zgjedhur një nga vlerat në varësi të përmbushjes ose mospërmbushjes së një kushti të caktuar, përdoret funksioni i kushtëzuar IIF, i cili ka sintaksën e mëposhtme:

IIF (<условие>, <значение1>, <значение2>)

Ky funksion kthen vlerën 1 nëse kushti është i vërtetë dhe vlerën 2 nëse kushti është false.

Si kusht, mund të përdorni një shprehje Boolean që kthen True ose

E gabuar, ose ndonjë shprehje aritmetike (zero është e barabartë me False dhe jozero është e vërtetë).

ZGJIDH deklaratën e rastit përdoret për të testuar një kusht dhe për të ekzekutuar një nga disa blloqe deklaratash.

Formati i regjistrimit të operatorit:

Zgjidhni Rastin<проверяемое выражение>
Rast<список выражений 1>
<операторы 1>Rast<список выражений 2>
<операторы 2>Rast<список выражений 3>
<операторы 3>
Rast tjetër
<операторы группы Else>
Fund Zgjidh

Shprehja që testohet vlerësohet në fillim të deklaratës Select Case. Kjo shprehje mund të kthejë çdo lloj vlere (boolean, numerike, string).

Një listë shprehjesh është një ose më shumë shprehje të ndara nga një karakter ndarës standard (pikëpresje).

Kur operatori ekzekutohet, kontrollohet nëse të paktën një nga elementët e kësaj liste përputhet me shprehjen që testohet.

Ushqimi në listën e shprehjeve mund të marrë një nga format e mëposhtme:

  • <выражение>- kontrollon koincidencën e shprehjes së dhënë me një nga shprehjet - elementet e listës;
  • <выражение 1>Se<выражение 2>- kontrollon nëse shprehja e specifikuar është brenda intervalit të caktuar;
  • < Is <логический оператор> < выражение>- kontrollon përmbushjen e kushtit të caktuar për shprehjen e caktuar.

Dhe në postimin e sotëm do të diskutojmë rreth deklaratës së rastit të përzgjedhur të VBA. VBA Select Case mund të përdoret në vend të deklaratave komplekse Excel Nested If. Kjo e bën kodin VBA më të shpejtë për t'u ekzekutuar dhe më të lehtë për t'u kuptuar.

Deklarata Select-Case (e quajtur edhe si Switch Case në disa gjuhë) kontrollon një variabël ose një shprehje për raste (vlera) të ndryshme. Nëse ndonjë nga rastet bëhet e vërtetë, atëherë vetëm ai rast ekzekutohet dhe programi i injoron të gjitha rastet e tjera.

Nëse ju kujtohet në postimin tonë të fundit për të cilin folëm, "si mundesh".

Sintaksa e deklaratës së rastit të përzgjedhur të VBA:

Sintaksa është si më poshtë:

Zgjidhni gjendjen e rastit
Vlera e rastit_1
Kodi për t'u ekzekutuar kur kushti = vlera_1
Vlera e rastit_2
Kodi për t'u ekzekutuar kur kushti = vlera_2
Vlera e rastit_3
Kodi për t'u ekzekutuar kur kushti = vlera_3
Rast tjetër
Kodi për Ekzekutim Kur të gjitha rastet e tjera janë False
Fund Zgjidh

Këtu, "Kushti" i referohet ndryshores ose shprehjes që do të testohet dhe në bazë të së cilës do të ekzekutohet secili nga segmentet e kodit.

"Vlera_1", "vlera_2" dhe "vlera_3" janë rezultatet e mundshme të "Kushtit". Sa herë që ndonjë nga këto vlera përputhet me 'Kushtin', atëherë blloku i tij përkatës Case do të ekzekutohet.

"Else" është një lloj vlere e paracaktuar e rastit, e cila do të ekzekutohet vetëm kur të gjitha deklaratat e mësipërme të Rastit rezultojnë në False. Rasti "Tjetër" është fakultativ, por përgjithësisht konsiderohet një praktikë e mirë për ta përdorur atë.

Shembuj të Select-Case në VBA:

Tani le të kalojmë te disa shembuj praktikë të Deklaratave të rastit.

Shembulli 1: Zgjidhni deklaratën e rastit me një shprehje.

Në shembullin e mëposhtëm, ne kemi dhënë një kusht (d.m.th. a = b) në deklaratën Select Case. Nëse kjo është e vërtetë, atëherë blloku "Rasti i vërtetë" do të ekzekutohet dhe nëse është i gabuar, atëherë do të ekzekutohet blloku "Rasti i gabuar".

Sub Select_Case_Example () "Fut vlerën për variablat a = InputBox (" Fut vlerën për A: ") b = InputBox (" Fut vlerën për B: ")" Vlerësimi i shprehjes Zgjidh Rastin a = b Rasti i vërtetë MsgBox "The shprehja është e vërtetë "Rasti i rremë MsgBox" Shprehjet është FALSE "Fund Zgjidh End Sub

Shënim: Në këtë kod përdoret për marrjen e vlerave nga përdoruesi.

Shembulli 2: Deklarata e rastit për të kontrolluar vargjet e tekstit

Në këtë shembull ne do të krahasojmë vargjet e tekstit në deklaratat Case. Nëse gjendet një përputhje, atëherë blloku përkatës i rasteve do të ekzekutohet, përndryshe blloku "Rasti tjetër" do të ekzekutohet.

Nën Select_Case_Example () "Fut vlerën për variablat fruit_name = InputBox (" Fut emrin e frutave: ")" Vlerësimi i shprehjes Select Case fruit_name Case "Apple" MsgBox "You hyre Apple" Case "Mango" MsgBox "You hyre Mango" Case MsgKutia "Portokalli" "Ku fute portokalli" Rasti tjetër MsgKutia "Nuk e dija" këtë frut! "Fund Zgjidh Fundin Nën

Shembulli 3: Deklarata e rastit për të kontrolluar numrat

Në shembullin e mëposhtëm do të kontrollojmë nëse numri i futur nga përdoruesi është më i vogël ose më i madh se 5.

Nën Select_Case_Example () "Fut vlerën për variablat Num = InputBox (" Fut çdo numër midis 1 dhe 10: ")" Vlerësimi i shprehjes Zgjidh Case Num Rasti Is< 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is >5 MsgBox "Numri juaj është më i madh se 5" Fund Zgjidh Fund Sub

Shënim: Ju mund të përdorni ËSHTË fjalë kyçe me deklaratën e rastit për të krahasuar vlerat.

Shembulli 4: Zgjidhni deklaratën e rastit për të kontrolluar kushte të shumta brenda një rasti të vetëm.

Në këtë shembull do t'i kërkojmë përdoruesit të fusë çdo numër nga 1-10. Dhe më pas do të kontrollojmë nëse numri është çift apo tek duke përdorur kushte të shumta në deklaratën e rastit. Vini re këtu se kam përdorur një "," (presje) për të krahasuar kushte të shumta në një rast të vetëm.

Sub Select_Case_Example () "Fut vlerën për variablat Num = InputBox (" Fut çdo numër midis 1 dhe 10: ")" Vlerësimi i shprehjes Select Case Num Case 2, 4, 6, 8, 10 MsgBox "Numri juaj është çift." Rasti 1, 3, 5, 7, 9 MsgBox "Numri juaj është tek." Rasti tjetër MsgBox "Numri juaj është jashtë gamës." Fund Zgjidhni Fund Sub

Shënim: E di që ka metoda më të lehta për të kontrolluar nëse një numër është çift apo tek, por unë e kam përdorur këtë shembull vetëm për të shpjeguar se si mund të kontrolloni kushte të shumta brenda një deklarate të vetme rasti.

Shembulli 5: Deklarata e rastit për të kontrolluar një varg të vazhdueshëm si kusht.

Këtu do të testojmë një varg të vazhdueshëm si kusht. Ne do t'i kërkojmë përdoruesit të fusë çdo numër midis 1-10, nëse numri është midis 1 dhe 5 (duke përfshirë edhe 1 dhe 5) atëherë 'Rasti 1 deri në 5' do të jetë 'E vërtetë', nëse numri i futur nga përdoruesi është ndërmjet 6 dhe 10 (duke përfshirë të dyja 6 dhe 10) atëherë 'Rasti 6 deri në 10' do të jetë 'E vërtetë', nëse të dyja rastet e mëparshme janë 'E gabuar' atëherë 'Rasti tjetër' do të ekzekutohet.

Sub Select_Case_Example () "Vendosni vlerën për variablat Num = InputBox (" Futni çdo numër midis 1 dhe 10: ")" Vlerësimi i shprehjes Zgjidhni numrin e rastit Rasti 1 deri në 5 MsgBox "Numri juaj midis 1 dhe 5" Rasti 6 deri në 10 MsgBox "Numri juaj midis 6 dhe 10" Rasti tjetër MsgBox "Numri juaj është jashtë kufijve." Fund Zgjidhni Fund Sub

Pra, kjo ishte e gjitha për VBA Select Case Deklaratë. Mos ngurroni të ndani mendimet tuaja për këtë temë.

Rreth ankit kaul

Ankit është themeluesi i Excel Trick. Ai është teknologjik që i pëlqen të ulet para të dashurës së tij me kokë katrore (PC) gjatë gjithë ditës. : D. Ankit ka një pasion të fortë për të mësuar Microsoft Excel. Qëllimi i tij i vetëm është t'ju kthejë ju djema në "Excel Geeks".

Operatorët më të rëndësishëm të kushtëzuar të përdorur në Excel VBA janë operatorët Nese atehere dhe Zgjidhni Rastin... Të dyja këto shprehje kontrollojnë një ose më shumë kushte dhe, në varësi të rezultatit, kryejnë veprime të ndryshme. Më tej, ne do të flasim për këta dy operatorë të kushtëzuar në më shumë detaje.

Visual Basic Nëse ... Pastaj Deklaratë

Operatori Nese atehere kontrollon gjendjen dhe, nëse është TRUE, atëherë kryhet grupi i veprimeve të specifikuara. Një grup veprimesh mund të përcaktohet gjithashtu për t'u kryer nëse kushti është FALSE.

Sintaksa e operatorit Nese atehere si kjo:

Nëse Kushti 1 Pastaj
Veprimet nëse plotësohet Kushti 1
Tjeter nese Kushti 2 Pastaj
Veprimet nëse plotësohet Kushti 2
Përndryshe
Veprimet në rast se asnjë prej kushteve nuk plotësohet
Fundi Nëse

Në këtë shprehje, elementet Tjeter nese dhe Përndryshe kushtet e operatorit mund të mos përdoren nëse nuk janë të nevojshme.

Më poshtë është një shembull në të cilin përdoret operatori Nese atehere ngjyra e mbushjes së qelizës aktive ndryshon në varësi të vlerës në të:

Nëse ActiveCell.Vlera< 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If

Vini re se sapo kushti të bëhet i vërtetë, ekzekutimi i deklaratës së kushtëzuar ndërpritet. Prandaj, nëse vlera e ndryshores ActiveCell më pak se 5, atëherë kushti i parë bëhet i vërtetë dhe qeliza bëhet e gjelbër. Pas kësaj, ekzekutimi i operatorit Nese atehere ndërpritet dhe kushtet e tjera nuk kontrollohen.

Zgjidhni deklaratën e rastit në Visual Basic

Operatori Zgjidhni Rastin të ngjashme me operatorin Nese atehere në atë që kontrollon edhe vërtetësinë e kushtit dhe, në varësi të rezultatit, zgjedh një nga opsionet.

Sintaksa e operatorit Zgjidhni Rastin si kjo:

Zgjidhni Rastin Shprehje
Rast Vlera 1
Veprimet në rast se rezultati i Shprehjes përputhet me vlerën 1
Rast Vlera 2
Veprimet në rast se rezultati i Shprehjes përputhet me vlerën 2

Rast tjetër
Veprimet në rast se rezultati i Shprehjes nuk përputhet me asnjë nga opsionet e listuara Vlerat
Fund Zgjidh

Elementi Rast tjetërështë opsionale, por rekomandohet për trajtimin e vlerave të papritura.

Në shembullin e mëposhtëm, duke përdorur konstruksionin Zgjidhni Rastin ngjyra e mbushjes së qelizës aktuale ndryshon në varësi të vlerës në të:

Zgjidhni Case ActiveCell.Value Case Is<= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select

Shembulli i mësipërm tregon se si mund të vendosni një vlerë për një element në mënyra të ndryshme Rast në ndërtim Zgjidhni Rastin... Këto janë mënyrat:

Rasti është<= 5 Kështu, duke përdorur fjalën kyçe Rasti ështëështë e mundur të kontrollohet nëse vlera kënaq Shprehjet gjendje si <=5 .
Rasti 6, 7, 8, 9 Kështu mund të kontrolloni nëse vlera është e njëjtë Shprehjet me një nga vlerat e listuara. Vlerat e listuara ndahen me presje.
Rasti 10 Kjo kontrollon nëse vlera është e njëjtë Shprehjet me një vlerë të caktuar.
Rasti 11 deri në 20 Kështu, mund të shkruani një shprehje për të testuar nëse vlera kënaq Shprehjet gjendje si nga 11 deri në 20(ekuivalente me pabarazinë “11<=значение<=20”).
Rast tjetër Si kjo, duke përdorur fjalën kyçe Përndryshe, veprimet tregohen në rast se vlera Shprehjet nuk përputhet me asnjë nga opsionet e listuara Rast.

Sapo gjendet një nga kushtet, kryhen veprimet përkatëse dhe struktura del jashtë. Zgjidhni Rastin... Kjo do të thotë, në çdo rast, vetëm një nga degët e listuara do të ekzekutohet Rast.

O.K., nuk ka asnjë mënyrë për të bërë atë që dëshironi. Ju nuk mund të përdorni asgjë tjetër përveç sintaksës së Excel brenda një formule, kështu që gjëra të tilla si "A1 = 1 deri në 9" thjesht nuk janë të mundshme.

Ju mund të shkruani një rutinë mjaft komplekse VBA që merrte vargje ose çfarëdo tjetër dhe i analizonte ato, por kjo në të vërtetë varet nga dizajnimi dhe zbatimi i një gjuhe të vogël të plotë. Dhe "kodi" juaj nuk do të funksionojë mirë me Excel. Për shembull, nëse keni thirrur diçka të tillë

Rastet ("(A1 = "" "," "nuk ka asgjë" "), (tjetër, A1)")

(vini re thonjëzat e ikura) Excel nuk do ta përditësojë referencën tuaj A1 kur e zhvendosni ose kopjoni një formulë. Prandaj, hidhni të gjithë parametrin "sintaksë".

Sidoqoftë, rezulton se ju mund të merrni pjesën më të madhe të sjelljes që unë mendoj se vërtet dëshironi me formula të rregullta Excel plus një VBA UDF të vogël. Së pari UDF:

Funksioni Publik arr (ParamArray args ()) arr = args Funksioni Fund

Kjo na lejon të krijojmë një grup nga një grup argumentesh. Meqenëse argumentet mund të jenë shprehje, jo vetëm konstante, ne mund ta quajmë atë nga formula si kjo:

Arr (A1 = 42, A1 = 99)

dhe ktheni një grup të booleans.

Me këtë UDF të vogël, tani mund të përdorni formula të rregullta për "zgjedhjen e rastit". Ata do të dukeshin kështu:

ZGJIDH (NDESHJE (E VËRTETË, arr (A1> 5, A1<5, A1=5), 0), "gt 5", "lt 5", "eq 5")

Ajo që ndodh është se "arr" kthen një grup boolean, "MATCH" gjen pozicionin e së parës TRUE dhe "CHOOSE" kthen "rastin" përkatës.

Ju mund të imitoni klauzolën "tjetër" duke e mbështjellë të gjithë në "IFERROR":

IFERROR (ZGJIDHNI (NDESHJE (E VËRTETË, arr (A1> 5, A1<5), 0), "gt 5", "lt 5"), "eq 5")

Nëse kjo është shumë për ju, gjithmonë mund të shkruani një tjetër VBA UDF që do të rezultojë në MATCH, CHOOSE, etj. brenda dhe do ta quajmë kështu:

Rastet (arr (A1> 5, A1<5, A1=5), "gt 5", "lt 5", "eq 5")

Kjo është afër sintaksës suaj të sugjeruar dhe shumë, shumë më e thjeshtë.

E shikoj qe tashme keni ardhur me nje zgjidhje (te mire) qe eshte me afer asaj qe do realisht, por gjithsesi mendova ta shtoja kete, pasi shprehja ime me siper ka te beje me casting MATCH, CHOOSE etj. brenda UDF-së e bëri atë të duket më e thjeshtë se sa është në të vërtetë.

Pra, këtu janë rastet "UDF":

Rastet e funksionit publik (caseCondResults, ParamArray caseValues ()) Në gabim Shkoni në EH Dim resOfMatch resOfMatch = Application.Match (True, caseCondResults, 0) Nëse IsError (resOfMatch) Pastaj raste = resOfMatch Else Call casealues LBound) (caseValues ​​+ resOfMatch - 1)) Fundi If Exit Funksioni EH: case = CVERr (xlValue) Funksioni Fund

Ai përdor një rutinë të vogël ndihmëse, "cakto":

Caktimi i Nën Publik (ByRef lhs, rhs) Nëse IsObject (rhs) Pastaj cakto lhs = rhs Tjetër lhs = rhs Fund Nëse Fundi Sub

Procedura e caktimit thjesht e bën më të lehtë trajtimin e faktit që përdoruesit mund të thërrasin UDF me çdo vlerë ose referencë diapazoni. Meqenëse ne duam që UDF e "rasteve" tona të funksionojë si Excel "ZGJIDH", ne do të dëshironim të kthejmë referenca sipas nevojës.

Në thelb, në "rastet" e reja UDF ne bëjmë "zgjedhjen" vetë, duke indeksuar vlerat e rasteve në grupin e parametrave. E hoqa mbajtësin e gabimeve atje, kështu që gjërat themelore si mospërputhja midis rezultateve të gjendjes së rastit dhe vlerave të rastit do të rezultojnë në një vlerë të kthimit #VALUE! Ju ndoshta do t'i shtonit më shumë kontrolle funksionit aktual, për shembull, për t'u siguruar që rezultatet e kushteve ishin boolean, etj.

Më vjen mirë që keni arritur një zgjidhje edhe më të mirë për veten tuaj! Kjo ishte interesante.

MË SHUMË PËR "caktimin":

Në përgjigje të komentit tuaj, këtu ka më shumë se pse kjo është pjesë e përgjigjes sime. VBA përdor një sintaksë të ndryshme për caktimin e një objekti në një ndryshore sesa për caktimin e një vlere të thjeshtë. Hidhini një sy ndihmës së VBA-së ose shikoni këtë pyetje të rrjedhës së grumbullimit dhe të tjerëve do t'ju pëlqejnë: Çfarë bën në të vërtetë fjala kyçe Set në VBA?

Kjo ka rëndësi sepse kur thërrisni një funksion VBA nga një formulë Excel, parametrat mund të jenë objekte Range, përveç numrave, vargjeve, booleans, gabimeve dhe vargjeve. (Shih A mundet që një Excel VBA UDF e thirrur nga një fletë pune të kalojë ndonjëherë një shembull të ndonjë klase të modelit të objektit Excel VBA përveç "Range"?)

Referencat e diapazonit janë ato që përshkruani duke përdorur sintaksën e Excel si A1: Q42. Kur kaloni një në Excel UDF si parametër, ai shfaqet si një objekt Range. Nëse dëshironi të ktheni një objekt Range nga një UDF, duhet ta bëni këtë në mënyrë eksplicite duke përdorur fjalën kyçe VBA "Set". Nëse nuk përdorni Set, Excel do ta marrë vlerën brenda intervalit dhe do ta kthejë atë. Shumicën e kohës nuk ka rëndësi, por ndonjëherë ju dëshironi diapazonin aktual, për shembull kur keni një formulë të emërtuar që duhet të vlerësohet në një diapazon sepse përdoret si burim për listën e kontrollit.

Artikujt kryesorë të lidhur