Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Funkcija odabira slučaja provjerava sve uvjete. Operater podružnice "Odaberi slučaj"

Funkcija odabira slučaja provjerava sve uvjete. Operater podružnice "Odaberi slučaj"

Upravljačke strukture omogućuju vam kontrolu slijeda izvođenja 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šiti određeni skup instrukcija ili riješiti problem na drugačiji način ovisno o vrijednostima varijabli ili parametara koje je korisnik odredio tijekom izvođenja. Za to se koriste upravljačke konstrukcije i petlje.

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

Ako. ... ... Zatim. ... ... Drugo

6.1 Konstrukt If. ... ... Zatim

Ako. ... ... Tada se koristi kada je potrebno izvršiti jednu ili grupu naredbi ovisno o nekom uvjetu. Sintaksa za ovu konstrukciju omogućuje vam da je navedete u jednom retku ili u nekoliko redaka programa:

Ako uvjet Onda izraz Ako uvjet Onda izraz End If

Uvjet je obično jednostavna usporedba, ali može biti bilo koji izraz s 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 uvjet istinit, tada se izvršavaju svi izrazi nakon ključne riječi Then. Da biste uvjetno izvršili jednu naredbu, možete koristiti sintaksu u jednom retku i sintaksu s više redaka (konstrukcija bloka).

Sljedeća dva operatora su ekvivalentna:

Ako ima Datum< 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 redak. Za izvršenje niza naredbi ako je uvjet istinit, koristite blok klauzulu If. ... ... Zatim. ... ... Završi ako.

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

Ako je uvjet netočan, tada se izrazi nakon ključne riječi Then ne izvršavaju, a kontrola se prosljeđuje sljedećem retku (ili retku nakon naredbe End If u blok konstrukciji).

6.2 Ako je konstruiran. ... ... Zatim. ... ... Drugo

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

Ako uvjet1 Onda izraz1 ElseAko uvjet2 Onda izraz2. ... ... Izraz Else -n Kraj Ako

Kada se izvrši, prvi se provjerava uvjet1. Ako je netočno, VBA provjerava sljedeći uvjet2, i tako dalje, dok ne pronađe istinit uvjet. Kada ga VBA pronađe, 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 uvjeta nije ispunjen.

Ako. ... ... Zatim. ... ... ElseIf je zapravo samo poseban slučaj konstrukcije If. ... ... Zatim. ... ... Drugo. 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 prisutnost ili, obrnuto, odsutnost ElseIf blokova.

Podprimjer 1 () Dim a As Single, b As Single, x As Single Dim z As Double Call read ("A1", a) Call read ("B1", b) Neka je x = CSng (InputBox ("unesite x") , "Unos podataka", 0)) Ako je x<= a Then z = Sin(x) ElseIf x >= b Tada je z = Tan (x) Drugo: z = Cos (x) Kraj ako pozovi ("C1", z) Kraj Sub

Imajte na umu da svom If naredbi možete dodati bilo koji broj Elself blokova. ... ... Zatim. Međutim, broj Elself blokova može postati toliko velik da If. ... ... Tada će 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 alternativa je konstrukciji If. ... ... Zatim. ... ... Inače u slučaju izvršenja bloka koji se sastoji od velikog skupa naredbi. Konstrukcija Select Case pruža mogućnost sličnu konstrukciji If. ... ... Zatim. ... ... Inače, ali vaš kod čini čitljivijim kada imate više izbora.

Konstrukcija Select Case radi na jednom testiranom izrazu, koji se evaluira jednom prilikom ulaska u konstrukciju. VBA zatim uspoređuje rezultat s 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

Svaki popis izraza je popis jedne ili više vrijednosti. Ako postoji više od jedne vrijednosti na jednom popisu, 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 naredbi povezanih s prvim naredbom Case iz svih pronađenih podudaranja. VBA izvršava blok naredbe povezan s naredbom Case Else (imajte na umu da je neobavezan) ako se ne pronađe podudaranje između provjerene vrijednosti izraza i vrijednosti sa svih popisa iskaza Case.

Razmotrimo primjer izračunavanja funkcije

Podprimjer2 () Const pi2 = 1,57 Dim x As Single Dim z As Double Neka x = CSng (InputBox ("enter x", "Data input", 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 prilikom unosa i to u If. ... ... Zatim. ... ... Inače, različiti izraz se evaluira za svaki Elself izraz. Ako. ... ... Zatim. ... ... Else se može zamijeniti s Select Case samo ako izraz If i svaki Elself iskaz vrednuju isti izraz.

VIZUALNI OSNOVNI PROGRAMSKI JEZIK. PROGRAMIRANJE GRANA

Grananje u Visual Basicu organizirano je pomoću:

  • uvjetna IF izjava;
  • ugrađena IIF funkcija;
  • odaberite operator CASE.

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

Linearni operator ima sljedeću sintaksu:

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

Blok izraz ima sljedeću sintaksu:

Ako<условие>Zatim
<блок операторов 1>
Završi ako

Ako je navedeni uvjet True, izvršava se blok naredbe; u suprotnom, blok naredbe2. Ako klauzula Else nije navedena,Ako je uvjet 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 uvjeta i izvršenje jednog od nekoliko blokova iskaza, koristi se prošireni uvjetni operator obrasca:

Ako<условие 1>Zatim
<блок операторов 1>
Sebe<условие 2>Zatim
<блок операторов 2>
Sebe<условие n>Zatim
<блок операторов n>
Završi ako

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 netočan.

Kao uvjet možete koristiti Booleov izraz koji vraća True ili

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

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>
Drugi slučaj
<операторы группы Else>
Kraj Odaberite

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

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

Kada se izvrši operator, provjerava se odgovara li barem jedan od elemenata ovog popisa izrazu koji se testira.

Ovi izrazi liste uzdržavanja mogu imati jedan od sljedećih oblika:

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

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

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žete".

Sintaksa VBA Select Case Statement:

Sintaksa je kao dolje:

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

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

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

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

Primjeri Select-Case u VBA:

Prijeđ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 True, 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 dobivanje vrijednosti od korisnika.

Primjer 2: Izjava slučaja za provjeru tekstualnih nizova

U ovom primjeru usporedit ćemo tekstualne nizove u naredbama Case. Ako se pronađe podudaranje, izvršit će se 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 "Upisali ste jabuku" Case "Mango" MsgBox "Upisali ste mango" Slučaj "Orange" MsgBox "Ušli ste u narančastu" 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 je li 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 JE ključnu riječ s izjavom slučaja za usporedbu vrijednosti.

Primjer 4: Odaberite naredbu Case za provjeru više uvjeta unutar jednog slučaja.

U ovom primjeru tražit ćemo od korisnika da unese bilo koji broj od 1-10. Zatim ćemo provjeriti je li broj paran ili neparan korištenjem više uvjeta u iskazu case. Obratite pažnju da sam koristio "," (zarez) za usporedbu više uvjeta 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še metode za provjeru je li broj paran ili neparan, ali ovaj primjer sam upotrijebio samo za objašnjenje kako možete provjeriti više uvjeta 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 'Toč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 'True', ako su oba prethodna slučaja 'False', tada će se izvršiti 'Case Else'.

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 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 raspona." Kraj Odaberite Kraj pod

Dakle, ovo je bilo sve o VBA Select Case Statement. 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 (njegov PC) cijeli dan. : D. Ankit ima snažnu strast za učenjem Microsoft Excela. Njegov jedini cilj je pretvoriti vas u "Excel Geeks".

Najvažniji uvjetni operatori koji se koriste u Excel VBA su operatori Ako tada 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 tada 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 tada kao ovo:

Ako Uvjet 1 Zatim
Radnje ako je ispunjen Uvjet1
ElseIf Uvjet2 Zatim
Radnje ako je ispunjen Uvjet 2
Drugo
Radnje u slučaju da nijedan od uvjeta nije ispunjen
Završi ako

U ovom izrazu elementi ElseIf i Drugo uvjeti operatera ne smiju se koristiti ako nisu potrebni.

Ispod je primjer u kojem se koristi operator Ako tada 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 uvjet postane istinit, izvršenje uvjetnog izraza se prekida. Stoga, ako vrijednost varijable ActiveCell manje od 5, tada prvi uvjet postaje istinit i ćelija postaje zelena. Nakon toga, izvršenje operatora Ako tada je prekinut i ostali uvjeti se ne provjeravaju.

Odaberite Izjavu slučaja u Visual Basicu

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

Sintaksa operatora Odaberite Case kao ovo:

Odaberite Case Izraz
Slučaj Vrijednost1
Radnje u slučaju da rezultat izraza odgovara vrijednosti1
Slučaj Vrijednost2
Radnje u slučaju da rezultat izraza odgovara Value2

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

Element Drugi slučaj nije obavezno, 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 zadovoljava li vrijednost Izrazi stanje kao <=5 .
Slučaj 6, 7, 8, 9 Ovako možete provjeriti je li vrijednost ista Izrazi s jednom od navedenih vrijednosti. Navedene vrijednosti odvojene su zarezima.
Slučaj 10 Time se provjerava je li vrijednost ista Izrazi sa zadanom vrijednošću.
Slučaj 11 do 20 Dakle, možete napisati izraz kako biste provjerili zadovoljava li vrijednost Izrazi stanje kao od 11 do 20 sati(ekvivalentno nejednakosti „11<=значение<=20”).
Drugi slučaj Ovako, koristeći ključnu riječ Drugo, radnje su naznačene u slučaju da vrijednost Izrazi ne odgovara nijednoj od navedenih opcija Slučaj.

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

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

Mogli biste napisati prilično složenu VBA rutinu koja bi uzimala nizove ili bilo što već i analizirala ih, ali to se zapravo svodi na dizajniranje i implementaciju potpunog malog jezika. I vaš "kod" neće dobro funkcionirati s Excelom. Na primjer, ako ste nazvali nešto poput

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

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

Međutim, pokazalo se da većinu ponašanja koje mislim da stvarno ž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

To nam omogućuje stvaranje niza iz skupa argumenata. Budući da argumenti mogu biti izrazi, a ne samo konstante, možemo ih nazvati iz formule ovako:

Arr (A1 = 42, A1 = 99)

i vrati niz booleova.

S ovim malim UDF-om sada možete koristiti uobičajene formule za "biranje predmeta". Oni bi izgledali ovako:

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

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

Možete oponašati klauzulu "else" tako da cijelu stvar omotate u "IFERROR":

AKO GREŠKA (ODABRAJTE (PODRŽAVA (TOČ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 nazvat će ga ovako:

Slučajevi (arr (A1> 5, A1<5, A1=5), "gt 5", "lt 5", "eq 5")

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

Vidim da ste već smislili (dobro) rješenje koje je bliže onome što stvarno želite, ali mislio sam da ipak dodam ovo, budući da se moj izraz iznad odnosi na bacanje MATCH, CHOOSE itd. unutar UDF-a izgledalo je jednostavnije nego što zapravo jest.

Dakle, evo "UDF" slučajeva:

Slučajevi javne funkcije (caseCondResults, ParamArray caseValues ​​()) U slučaju pogreške GoTo EH Dim resOfMatch resOfMatch = Application.Match (True, caseCondResults, 0) Ako IsError (resOfMatch) Tada slučajevi = resOfMatch Else Call dodijeli (slučajevi, caseValues LBound) (caseValues ​​+ resOfMatch - 1)) End If Exit Funkcija EH: slučajevi = 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 dodjele samo olakšava rješavanje činjenice da korisnici mogu pozvati UDF-ove s 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 prema potrebi.

Uglavnom, u novim UDF "slučajevima" sami donosimo "izbor", indeksirajući vrijednosti slučaja u niz parametara. Tamo sam uklonio rukovao pogreškama, tako da će osnovne stvari poput neusklađenosti između rezultata uvjeta slučaja i vrijednosti slučaja rezultirati povratnom vrijednošću #VALUE!. Vjerojatno biste dodali više provjera stvarnoj funkciji, na primjer, kako biste bili sigurni da su rezultati uvjeta booleovski, 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 dodjelu objekta varijabli nego za dodjelu jednostavne vrijednosti. Pogledajte pomoć za VBA ili pogledajte ovo pitanje stackoverflowa i drugima će se svidjeti: Što ključna riječ Set zapravo radi u VBA?

Ovo je važno jer kada pozovete VBA funkciju iz Excel formule, parametri mogu biti objekti raspona, uz brojeve, nizove, logičke vrijednosti, pogreške i nizove. (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 na raspon su ono što opisujete pomoću sintakse programa Excel kao što je A1: Q42. Kada ga proslijedite u Excel UDF kao parametar, on se pojavljuje kao objekt raspona. Ako želite vratiti objekt 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. Većinu vremena to nije važno, ali ponekad želite stvarni raspon, na primjer kada imate imenovanu formulu koja se mora procijeniti na raspon jer se koristi kao izvor za kontrolni popis.

Vrhunski povezani članci