Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Funkcija odabira slučaja provjerava sve uvjete. Operater poslovnice "Select Case"

Funkcija odabira slučaja provjerava sve uvjete. Operater poslovnice "Select Case"

Kontrolne strukture vam omogućavaju da kontrolišete redosled izvršavanja programa. Bez kontrolnih izraza, svi programski izrazi će se izvoditi s lijeva na desno i odozgo prema dolje. Međutim, ponekad je potrebno više puta automatski izvršavati određeni skup instrukcija ili rješavati problem na drugačiji način ovisno o vrijednostima varijabli ili parametara koje je odredio korisnik tokom vremena izvođenja. Za to se koriste kontrolne konstrukcije i petlje.

VBA podržava sljedeće konstrukcije odlučivanja:

Ako. ... ... Onda. ... ... Inače

6.1 Konstrukt If. ... ... Onda

Ako. ... ... Zatim se koristi kada je potrebno izvršiti jednu ili grupu naredbi u zavisnosti od nekog uslova. Sintaksa za ovu konstrukciju vam omogućava da je navedete u jednom redu ili u nekoliko redova programa:

If uslov Onda izraz If uslov Onda izraz End If

Uslov je obično jednostavno poređenje, ali može biti bilo koji izraz sa izračunatom vrijednošću. Ova vrijednost se tumači kao False ako je nula, a svaka vrijednost koja nije nula smatra se istinitom. Ako je uslov tačan, tada se izvršavaju svi izrazi nakon ključne riječi Then. Da biste uvjetno izvršili jednu naredbu, možete koristiti sintaksu s jednim redom i sintaksu s više linija (konstrukcija bloka).

Sljedeća dva operatora su ekvivalentna:

If anyDate< Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

Imajte na umu da je sintaksa naredbe If. ... ... Tada ne koristi naredbu End If za jedan red. Da biste izvršili niz naredbi ako je uvjet istinit, koristite blok klauzulu If. ... ... Onda. ... ... End If.

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

Ako je uslov netačan, tada se naredbe nakon ključne riječi Then ne izvršavaju, a kontrola se prosljeđuje na sljedeći red (ili red nakon naredbe End If u blok konstrukciji).

6.2 Ako je konstruiran. ... ... Onda. ... ... Inače

definira nekoliko blokova naredbi, od kojih će se jedan izvršiti ovisno o uvjetu:

Ako je uslov1 Onda izraz1 ElseIf uslov2 Onda izraz2. ... ... Else izraz -n Kraj Ako

Kada se izvrši, prvo se provjerava uvjet1. Ako je netačan, VBA provjerava sljedeći uvjet2, i tako dalje, dok ne pronađe tačan uvjet. Kada ga VBA pronađe, on izvršava odgovarajući blok naredbi, a zatim prenosi kontrolu na naredbu nakon naredbe End if. U ovu konstrukciju možete uključiti blok naredbe Else koji VBA izvršava ako nijedan od uslova nije ispunjen.

Ako. ... ... Onda. ... ... ElseIf je zapravo samo poseban slučaj konstrukcije If. ... ... Onda. ... ... Inače. Imajte na umu da ova konstrukcija može sadržavati bilo koji broj ElseIf blokova, ili čak nijedan. Else blok može biti uključen bez obzira na prisustvo ili, obrnuto, odsustvo ElseIf blokova.

Podprimjer 1 () Dim a Kao pojedinačni, b Kao pojedinačni, x Kao pojedinačni Dim z Kao čitanje dvostrukog poziva ("A1", a) Čitanje poziva ("B1", b) Neka je x = CSng (InputBox ("unesite x") , "Unos podataka", 0)) Ako je x<= a Then z = Sin(x) ElseIf x >= b Zatim z = Tan (x) Drugo: z = Cos (x) Kraj ako prozivi ("C1", z) Kraj Sub

Imajte na umu da svom If naredbi možete dodati bilo koji broj Elself blokova. ... ... Onda. Međutim, broj Elself blokova može postati toliko velik da If. ... ... Tada će to postati vrlo glomazno i ​​nezgodno. U takvoj situaciji treba koristiti drugu konstrukciju odlučivanja – Select Case.

6.3 Odaberite Konstrukcija kućišta

Konstrukcija Select Case je alternativa If konstrukciji. ... ... Onda. ... ... Inače u slučaju izvršenja bloka koji se sastoji od velikog skupa naredbi. Konstrukcija Select Case pruža mogućnost sličnu If konstrukciji. ... ... Onda. ... ... Inače, ali to čini vaš kod čitljivijim kada imate više izbora.

Konstrukcija Select Case radi na jednom testiranom izrazu, koji se procjenjuje jednom prilikom ulaska u konstrukciju. VBA zatim uspoređuje rezultat sa vrijednostima navedenim u iskazima Case konstrukcije. Ako se pronađe podudaranje, izvršava se blok naredbe povezan s naredbom Case:

Odaberite Case test_expression]]. ... ... ] Kraj Odaberite

Svaka lista izraza je lista jedne ili više vrijednosti. Ako postoji više od jedne vrijednosti na jednoj listi, one se odvajaju zarezima. Svaki blok izraza sadrži više naredbi ili nijedan. Ako se pokaže da izračunata vrijednost testiranog izraza odgovara vrijednostima iz nekoliko naredbi Case, tada se izvršava blok iskaza pridruženih prvom naredbi Case iz svih pronađenih podudaranja. VBA izvršava blok naredbe povezan sa naredbom Case Else (imajte na umu da je opciono) ako se ne pronađe odgovarajuća vrijednost izraza sa vrijednostima sa svih lista Case iskaza.

Razmotrimo primjer izračunavanja funkcije

Podprimjer2 () Const pi2 = 1,57 Dim x Kao pojedinačni Dim z As Double Neka x = CSng (InputBox ("unos x", "Unos podataka", 0)) Odaberite Case x Case -pi2 z = Sin (x) Case 0 z = Cos (x) Slučaj pi2 z = Tan (x) Drugi slučaj MsgBox "Nevažeći ulazni podaci!" Exit Sub End Select Call out ("D1", z) End Sub

Imajte na umu da konstrukcija Select Case procjenjuje izraz samo jednom kada ga unesete, i to u If. ... ... Onda. ... ... Inače, različiti izraz se procjenjuje za svaki Elself izraz. Ako. ... ... Onda. ... ... Else se može zamijeniti sa Select Case samo ako izraz If i svaki Elself iskaz procjenjuju isti izraz.

VIZUELNI OSNOVNI PROGRAMSKI JEZIK. PROGRAMIRANJE GRANA

Grananje u Visual Basicu je organizovano korišćenjem:

  • uslovna IF izjava;
  • ugrađena IIF funkcija;
  • izaberite operator CASE.

Da biste provjerili jedan uvjet i izvršili operator ili blok naredbi, koristite uslovno AKO ... ONDA... Ovaj operator se može koristiti sa različitom sintaksom: jednoredni (linearni) i višeredni (blok).

Linearni operator ima sljedeću sintaksu:

Ako<условие>Onda<операторы!>

Blok izraz ima sljedeću sintaksu:

Ako<условие>Onda
<блок операторов 1>
End If

Ako je navedeni uvjet Tačan, izvršava se blok naredbe; u suprotnom, blok naredbe2. Ako klauzula Else nije navedena,Ako je uslov zadovoljen, kontrola se odmah prosljeđuje sljedećem operatoru nakon If.

Naredba If može biti ugniježđena, odnosno može biti unutar blokova izraza. Za testiranje više od jednog uslova i izvršenje jednog od nekoliko blokova izraza, koristi se prošireni uslovni operator forme:

Ako<условие 1>Onda
<блок операторов 1>
Elself<условие 2>Onda
<блок операторов 2>
Elself<условие n>Onda
<блок операторов n>
End If

Za odabir jedne od vrijednosti ovisno o ispunjenju ili neispunjenju određenog uvjeta, koristi se IIF uvjetna funkcija koja ima sljedeću sintaksu:

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

Ova funkcija vraća vrijednost1 ako je uvjet istinit i vrijednost2 ako je uvjet netačan.

Kao uslov, možete koristiti Boolean izraz koji vraća True ili

False, ili bilo koji aritmetički izraz (nula je ekvivalentna False, a nenula je Tačna).

SELECT CASE izraz koristi se za testiranje jednog uvjeta i izvršavanje jednog od nekoliko blokova izraza.

Format zapisa operatera:

Odaberite Case<проверяемое выражение>
Slučaj<список выражений 1>
<операторы 1>Slučaj<список выражений 2>
<операторы 2>Slučaj<список выражений 3>
<операторы 3>
Slučaj drugi
<операторы группы Else>
Kraj Odaberite

Izraz koji se testira se vrednuje na početku naredbe Select Case. Ovaj izraz može vratiti bilo koju vrstu vrijednosti (boolean, numerički, string).

Lista izraza je jedan ili više izraza odvojenih standardnim znakom za razdvajanje (tačka-zarez).

Kada se izvrši operator, provjerava se da li barem jedan od elemenata ove liste odgovara izrazu koji se testira.

Ovi izrazi liste alimentacije mogu imati jedan od sljedećih oblika:

  • <выражение>- provjerava podudarnost datog izraza sa jednim od izraza - elementima liste;
  • <выражение 1>To<выражение 2>- provjerava da li je navedeni izraz unutar navedenog raspona;
  • < Is <логический оператор> < выражение>- provjerava ispunjenost navedenog uvjeta za navedeni izraz.

A u današnjem postu ćemo razgovarati o VBA Select case izjavi. VBA Select Case se može koristiti umjesto složenih naredbi Excel Nested If. Ovo čini VBA kod bržim za izvršavanje i lakšim za razumevanje.

Naredba Select-Case (naziva se i kao Switch Case na nekim jezicima) provjerava varijablu ili izraz za različite slučajeve (vrijednosti). Ako bilo koji slučaj postane istinit, tada se izvršava samo taj slučaj i program ignorira sve ostale slučajeve.

Ako se sjećate, u našem prošlom postu smo govorili o tome „kako možeš“.

Sintaksa VBA Select Case izjave:

Sintaksa je kao ispod:

Odaberite Stanje slučaja
Vrijednost slučaja_1
Kod za izvršenje kada je uvjet = vrijednost_1
Vrijednost slučaja_2
Kod za izvršenje kada je uvjet = vrijednost_2
Vrijednost slučaja_3
Kod za izvršenje kada je uvjet = vrijednost_3
Slučaj drugi
Kod za izvršenje Kada su svi ostali slučajevi False
Kraj Odaberite

Ovdje se 'Uvjet' odnosi na varijablu ili izraz koji treba testirati i na osnovu kojeg će se izvršiti bilo koji segment koda.

'Vrijednost_1', 'vrijednost_2' i 'vrijednost_3' su mogući ishodi 'Uslova'. Kad god bilo koja od ovih vrijednosti odgovara 'Uslovu', tada će se izvršiti odgovarajući blok Case.

‘Else’ je vrsta zadane vrijednosti slučaja, koja će se izvršiti samo kada sve gore navedene naredbe Case rezultiraju u False. Slučaj 'Else' nije obavezan, ali općenito se smatra dobrom praksom da ga koristite.

Primjeri Select-Case u VBA:

Pređimo sada na neke praktične primjere izjava o slučajevima.

Primjer 1: Odaberite iskaz slučaja s izrazom.

U donjem primjeru, dali smo uvjet (tj. a = b) naredbi Select Case. Ako je ovo Tačno, tada će se izvršiti blok 'Case True', a ako je False onda će se izvršiti blok 'Case False'.

Sub Select_Case_Example () "Unesite vrijednost za varijable a = InputBox (" Unesite vrijednost za A: ") b = InputBox (" Unesite vrijednost za B: ")" Procjena izraza Odaberite Case a = b Case True MsgBox "The izraz je TRUE "Case False MsgBox" Izrazi su FALSE "End Select End Sub

Bilješka: U ovom kodu se koristi za dobijanje vrednosti od korisnika.

Primjer 2: Case iskaz za provjeru tekstualnih nizova

U ovom primjeru ćemo uporediti tekstualne nizove u naredbama Case. Ako se pronađe podudaranje onda će se izvršiti odgovarajući blok case, inače će se izvršiti blok 'Case Else'.

Sub Select_Case_Example () "Unesite vrijednost za varijable fruit_name = InputBox (" Unesite naziv voća: ")" Procjena izraza Select Case fruit_name Case "Apple" MsgBox "Uneli ste jabuku" Case "Mango" MsgBox "Uneli ste mango" Slučaj "Orange" MsgBox "Ušli ste narandžasti" Case Else MsgBox "Nisam znao ovo voće! "Kraj Odaberi Kraj Sub

Primjer 3: Izjava slučaja za provjeru brojeva

U donjem primjeru provjerit ćemo da li je broj koji je unio korisnik manji ili veći od 5.

Sub Select_Case_Example () "Unesite vrijednost za varijable Num = InputBox (" Unesite bilo koji broj između 1 do 10: ")" Procjena izraza Select Case Num Case Is< 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is >5 MsgBox "Vaš broj je veći od 5" Kraj Odaberite Kraj pod

Bilješka: Možeš koristiti IS ključnu riječ sa izjavom slučaja za poređenje vrijednosti.

Primjer 4: Odaberite Case iskaz da provjerite više uslova unutar jednog slučaja.

U ovom primjeru tražit ćemo od korisnika da unese bilo koji broj od 1-10. Zatim ćemo provjeriti da li je broj paran ili neparan koristeći više uslova u iskazu case. Obratite pažnju da sam koristio “,” (zarez) da uporedim više uslova u jednom slučaju.

Sub Select_Case_Example () "Unesite vrijednost za varijable Num = InputBox (" Unesite bilo koji broj između 1 do 10: ")" Procjena izraza Odaberite Case Num Case 2, 4, 6, 8, 10 MsgBox "Vaš broj je paran." Slučaj 1, 3, 5, 7, 9 MsgBox "Vaš broj je neparan." Case Else MsgBox "Vaš broj je izvan dometa." Kraj Odaberite Kraj pod

Bilješka: Znam da postoje lakši načini za provjeru da li je broj paran ili neparan, ali ovaj primjer sam koristio samo da objasnim kako možete provjeriti više uslova unutar jednog iskaza case.

Primjer 5: Izjava slučaja za provjeru kontinuiranog raspona kao uvjeta.

Ovdje ćemo testirati kontinuirani raspon kao uvjet. Zatražit ćemo od korisnika da unese bilo koji broj između 1-10, ako je broj između 1 i 5 (uključujući i 1 i 5) tada će 'Slučaj 1 do 5' biti 'Tačno', ako je broj koji je unio korisnik između 6 i 10 (uključujući i 6 i 10) tada će 'Slučaj 6 do 10' biti 'Tačno', ako su oba prethodna slučaja 'Netačno' tada će se izvršiti 'Slučaj drugi'.

Sub Select_Case_Example () "Unesite vrijednost za varijable Num = InputBox (" Unesite bilo koji broj između 1 do 10: ")" Procjena izraza Odaberite Case Num Slučaj 1 do 5 MsgBox "Vaš broj između 1 do 5" Slučaj 6 do 10 MsgBox "Vaš broj između 6 i 10" Case Else MsgBox "Vaš broj je izvan dometa." Kraj Odaberite Kraj pod

Dakle, ovo je bilo sve o VBA Select Case Statementu. Slobodno podijelite svoja razmišljanja o ovoj temi.

O ankitu kaulu

Ankit je osnivač programa Excel Trick. On je tech Geek koji voli sjediti ispred svoje četvrtaste djevojke (svog kompjutera) cijeli dan. : D. Ankit ima snažnu strast za učenjem Microsoft Excel-a. Njegov jedini cilj je da vas pretvori u "Excel Geeks".

Najvažniji uslovni operatori koji se koriste u Excel VBA su operatori Ako onda i Odaberite Case... Oba ova izraza provjeravaju jedan ili više uvjeta i, ovisno o rezultatu, izvode različite radnje. Zatim ćemo detaljnije govoriti o ova dva uvjetna operatora.

Visual Basic Ako... Onda izjava

Operater Ako onda provjerava uvjet i, ako je TRUE, tada se izvodi navedeni skup akcija. Također se može definirati skup akcija koje će se izvršiti ako je uvjet FALSE.

Sintaksa operatora Ako onda Volim ovo:

Ako Stanje1 Onda
Radnje ako je ispunjen Uvjet 1
ElseIf Stanje2 Onda
Radnje ako je ispunjen Uvjet 2
Inače
Radnje u slučaju da nijedan od uslova nije ispunjen
End If

U ovom izrazu, elementi ElseIf i Inače uslovi operatera se ne mogu koristiti ako nisu potrebni.

Ispod je primjer u kojem se koristi operator Ako onda boja ispune aktivne ćelije mijenja se ovisno o vrijednosti u njoj:

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

Imajte na umu da čim uslov postane istinit, izvršenje uslovnog izraza se prekida. Stoga, ako je vrijednost varijable ActiveCell manje od 5, tada prvi uslov postaje istinit i ćelija postaje zelena. Nakon toga, izvršavanje operatora Ako onda je prekinut i ostali uslovi se ne provjeravaju.

Odaberite Izjavu slučaja u Visual Basicu

Operater Odaberite Case slično operateru Ako onda u tome što on također provjerava istinitost uvjeta i, ovisno o rezultatu, bira jednu od opcija.

Sintaksa operatora Odaberite Case Volim ovo:

Odaberite Case Izraz
Slučaj Vrijednost1
Radnje u slučaju da se rezultat izraza poklapa sa Value1
Slučaj Vrijednost2
Radnje u slučaju da se rezultat izraza poklapa sa Value2

Slučaj drugi
Radnje u slučaju da rezultat izraza ne odgovara nijednoj od navedenih opcija Vrijednosti
Kraj Odaberite

Element Slučaj drugi je opciono, ali se preporučuje za rukovanje neočekivanim vrijednostima.

U sljedećem primjeru, koristeći konstrukciju Odaberite Case boja ispune trenutne ćelije mijenja se ovisno o vrijednosti u njoj:

Odaberite 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

Gornji primjer pokazuje kako možete postaviti vrijednost za element na različite načine Slučaj u građevinarstvu Odaberite Case... Ovo su načini:

Slučaj je<= 5 Dakle, koristeći ključnu riječ Slučaj je moguće je provjeriti da li vrijednost zadovoljava Izrazi stanje kao <=5 .
Slučaj 6, 7, 8, 9 Ovako možete provjeriti da li je vrijednost ista Izrazi sa jednom od navedenih vrijednosti. Navedene vrijednosti su odvojene zarezima.
Slučaj 10 Ovo provjerava da li je vrijednost ista Izrazi sa zadatom vrednošću.
Slučaj 11 do 20 Dakle, možete napisati izraz da provjerite da li vrijednost zadovoljava Izrazi stanje kao od 11 do 20 časova(ekvivalentno nejednakosti „11<=значение<=20”).
Slučaj drugi Ovako, koristeći ključnu riječ Inače, akcije su naznačene u slučaju da je vrijednost Izrazi ne odgovara nijednoj od navedenih opcija Slučaj.

Čim se pronađe jedan od uslova, izvode se odgovarajuće radnje i izlazi se iz strukture. Odaberite Case... To jest, u svakom slučaju će se izvršiti samo jedna od navedenih grana Slučaj.

O.K., ne postoji način da radiš ono što želiš. Ne možete koristiti ništa osim Excel sintakse unutar formule, tako da stvari poput "A1 = 1 do 9" jednostavno nisu moguće.

Mogli biste napisati prilično složenu VBA rutinu koja uzima nizove ili bilo šta drugo i raščlanjuje ih, ali to se zaista svodi na dizajniranje i implementaciju potpunog malog jezika. A vaš "kod" neće dobro funkcionirati s Excelom. Na primjer, ako ste nazvali nešto slično

Slučajevi ("(A1 =" "" "," "nema ništa" "), (drugo, A1)")

(obratite pažnju na izgubljene navodnike) Excel neće ažurirati vašu A1 referencu kada je premjestite ili kopirate formulu. Stoga, odbacite cijeli parametar "sintakse".

Međutim, ispostavilo se da većinu ponašanja koje mislim da zaista želite možete postići s običnim Excel formulama plus jednim sićušnim VBA UDF-om. Prvo UDF:

Javna funkcija arr (ParamArray args ()) arr = args Krajnja funkcija

Ovo nam omogućava da kreiramo niz od skupa argumenata. Pošto argumenti mogu biti izrazi, a ne samo konstante, možemo ih nazvati iz formule ovako:

Arr (A1 = 42, A1 = 99)

i vrati niz logičkih vrijednosti.

Sa ovim malim UDF-om, sada možete koristiti obične formule za "biranje predmeta". One bi izgledale ovako:

ODABIR (PODRŽI (TAČNO, arr (A1> 5, A1<5, A1=5), 0), "gt 5", "lt 5", "eq 5")

Ono što se dešava je da "arr" vraća logički niz, "MATCH" pronalazi poziciju prvog TRUE, a "CHOOSE" vraća odgovarajući "case".

Možete emulirati klauzulu "else" tako što ćete cijelu stvar omotati u "IFERROR":

AKO GREŠKA (IZABERITE (PODRŽAVA (TAČNO, arr (A1> 5, A1<5), 0), "gt 5", "lt 5"), "eq 5")

Ako vam je ovo previše, uvijek možete napisati drugi VBA UDF koji će rezultirati MATCH, CHOOSE itd. unutra i nazvaće ga ovako:

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

Ovo je blisko vašoj predloženoj sintaksi i mnogo, mnogo jednostavnije.

Vidim da ste već smislili (dobro) rješenje koje je bliže onome što zaista želite, ali mislio sam da ipak dodam ovo, pošto je moj izraz iznad o bacanju MATCH, CHOOSE itd. unutar UDF-a je izgledalo jednostavnije nego što zaista jeste.

Dakle, evo "UDF" slučajeva:

Slučajevi javnih funkcija (caseCondResults, ParamArray caseValues ​​()) U slučaju greške GoTo EH Dim resOfMatch resOfMatch = Application.Match (True, caseCondResults, 0) Ako IsError (resOfMatch) Tada slučajevi = resOfMatch Else Call dodijeli (slučajevi, caseValu LBound) (caseValues ​​+ resOfMatch - 1)) End If Exit Funkcija EH: case = CVERr (xlValue) End Funkcija

Koristi malu pomoćnu rutinu, "dodijeli":

Public Sub assign (ByRef lhs, rhs) If IsObject (rhs) Zatim Postavite lhs = rhs Inače lhs = rhs End If End Sub

Procedura dodjeljivanja samo olakšava suočavanje s činjenicom da korisnici mogu pozvati UDF-ove sa bilo kojom vrijednošću ili referencom raspona. Budući da želimo da UDF naših "slučajeva" radi kao Excel "CHOOSE", željeli bismo vratiti reference po potrebi.

U osnovi, u novim UDF "slučajevima" sami pravimo "izbor", indeksirajući vrijednosti slučaja u niz parametara. Tamo sam uklonio rukovalac greškama, tako da će osnovne stvari kao što je neusklađenost između rezultata uslova slučaja i vrijednosti slučaja rezultirati povratnom vrijednošću #VALUE!. Vjerovatno biste dodali više provjera stvarnoj funkciji, na primjer, da biste bili sigurni da su rezultati uvjeta logički, itd.

Drago mi je da ste postigli još bolje rješenje za sebe! To je bilo zanimljivo.

VIŠE O "dodijeli":

Kao odgovor na vaš komentar, evo više o tome zašto je ovo dio mog odgovora. VBA koristi drugačiju sintaksu za dodeljivanje objekta varijabli nego za dodeljivanje jednostavne vrednosti. Pogledajte VBA pomoć ili pogledajte ovo pitanje stackoverflow-a i drugima će se svidjeti: Šta ključna riječ Set zaista radi u VBA?

Ovo je važno jer kada pozovete VBA funkciju iz Excel formule, parametri mogu biti objekti Range, pored brojeva, nizova, logičkih vrednosti, grešaka i nizova. (Pogledajte Može li se Excel VBA UDF koji se poziva iz radnog lista ikada proslijediti instanci bilo koje klase Excel VBA objektnog modela osim "Range"?)

Reference opsega su ono što opisujete koristeći Excel sintaksu kao što je A1: Q42. Kada ga proslijedite Excel UDF-u kao parametar, on se pojavljuje kao objekt Range. Ako želite da vratite objekat Range iz UDF-a, morate to učiniti eksplicitno koristeći ključnu riječ VBA "Set". Ako ne koristite Set, Excel će umjesto toga uzeti vrijednost unutar raspona i vratiti je. U većini slučajeva to nije važno, ali ponekad želite stvarni raspon, na primjer kada imate imenovanu formulu koja treba da se procijeni na raspon jer se koristi kao izvor za kontrolnu listu.

Top srodni članci