Tartalomjegyzék
Folytatjuk a felhasználó által definiált függvényekről szóló oktatóanyag-sorozatunkat. Korábbi cikkeinkben megismerkedtünk az egyéni függvényekkel, és megtanultuk, hogyan hozzuk létre és használjuk őket. Ebben az útmutatóban megnézzük e függvények használatának sajátosságait, és megnézzük az UDF-ek és a VBA-makrók közötti különbségeket.
Ebben a bemutatóban a következőket fogjuk megtanulni:
Reméljük, hogy ez a cikk bővíti az UDF-ekkel kapcsolatos ismereteit, és segít még hatékonyabban használni őket az Excel-munkafüzetekben.
Az UDF és a makró ugyanaz a dolog?
Mind a felhasználó által definiált függvényeket, mind a VBA makrókat a VBA-szerkesztővel hozzuk létre. Mi a különbség köztük, és mit kell előnyben részesíteni?
A legfontosabb különbség az, hogy a függvény elvégzi a számítást, a makró pedig valamilyen műveletet hajt végre. Egy felhasználó által definiált függvényt, akárcsak egy hagyományos Excel függvényt, egy cellába kell írni. A végrehajtás eredményeként a cella valamilyen értéket ad vissza. Ugyanakkor nem lehet megváltoztatni más cellák értékeit, valamint az aktuális cella bizonyos tulajdonságait (különösen,formázás). A feltételes formázási képletekben azonban használhat egyéni függvényt.
Az UDF és a VBA makró különböző módon működik. Amikor például egy UDF-et hoz létre a Visual Basic szerkesztőben, akkor a következő utasítással kezdi a munkát Funkció és egy Funkció vége Amikor makrót rögzít, egy utasítással kezdünk. Sub és egy End Sub.
Nem minden Visual Basic operátor használható UDF létrehozására, ezért a makró sokoldalúbb megoldás.
A makrónak nem kell a felhasználónak érveket átadnia (és nem is fogadhat el érveket), ellentétben a felhasználó által definiált függvényekkel.
A lényeg az, hogy a makrók egyes parancsai használhatják a cellák címét vagy a formázási elemeket (például a színt). Ha áthelyezzük a cellákat, sorokat és oszlopokat adunk vagy veszünk ki, megváltoztatjuk a cellák formátumát, akkor könnyen "tönkretehetjük" a makrókat. Ez különösen akkor lehetséges, ha megosztjuk a fájlt olyan kollégákkal, akik nem ismerik a makrók működését.
Például van egy fájlunk egy tökéletesen működő makróval. Ez a képlet kiszámítja az A1-A4 cellák százalékos arányát. A makró sárgára változtatja ezeknek a celláknak a színét. Az aktív cellában százalékos formátumot állít be.
Ha Ön vagy valaki más úgy dönt, hogy új sort illeszt be, a makró továbbra is az A4-es cellában (az UDF 4,1 paraméterében) lévő értéket keresi, és hibát jelez:
Ebben az esetben a hiba a nullával való osztás miatt következett be (nincs érték az újonnan hozzáadott sorban). Abban az esetben, ha a makró mondjuk összegzést végez, akkor egyszerűen rossz eredményt kapunk. De erről nem fogunk tudni.
A makrókkal ellentétben a felhasználó által definiált függvények nem okozhatnak ilyen kellemetlen helyzetet.
Az alábbiakban ugyanezen számítások teljesítményét láthatja egy UDF használatával. Itt a munkalapon belül bárhol megadhatja a bemeneti cellákat, és nem fog váratlan problémákkal szembesülni a változtatáskor.
A következő képletet C3-ban írtam:
=UDF_vs_Macro(A1,A4)
Ezután beillesztettem egy üres sort, és a képlet megváltozott, ahogy a fenti képernyőképen látható.
Most már bárhová áthelyezhetünk egy bemeneti cellát vagy egy függvényt tartalmazó cellát. Az eredmény mindig helyes lesz.
Az UDF-ek használatának további előnye, hogy automatikusan frissülnek, amikor a bemeneti cellában lévő érték megváltozik. Makrók használatakor mindig gondoskodnia kell arról, hogy az adatok naprakészek legyenek.
Ezt a példát szem előtt tartva, ahol csak lehet, inkább az UDF-eket használnám, és makrókat csak más, nem számítási tevékenységekre használnék.
Az UDF használatának korlátai és hátrányai
Az UDF előnyeit már említettem fentebb. Hosszú történet röviden, olyan számításokat tud elvégezni, amelyek a hagyományos Excel függvényekkel nem lehetségesek. Ezen kívül hosszú és összetett képleteket tud elmenteni és felhasználni, egyetlen függvénybe alakítva azokat. És nem kell újra és újra bonyolult képleteket írni.
Most beszéljünk részletesebben az UDF hiányosságairól:
- Az UDF létrehozásához VBA használata szükséges. Ezt nem lehet megkerülni. Ez azt jelenti, hogy a felhasználó nem tudja ugyanúgy rögzíteni az UDF-et, mint egy Excel makrót. Az UDF-et magának kell létrehoznia. Azonban a korábban rögzített makró kódjának egyes részeit másolhatja és beillesztheti a függvényébe. Csak tisztában kell lennie az egyéni függvények korlátaival.
- Az UDF másik hátránya, hogy mint bármely más Excel-funkció, csak egyetlen értéket vagy értékek tömbjét adhatja vissza egy cellába. Egyszerűen csak számításokat végez, semmi többet.
- Ha meg akarja osztani a munkafüzetét a kollégáival, ügyeljen arra, hogy az UDF-eket ugyanabba a fájlba mentse. Ellenkező esetben az egyéni függvények nem fognak működni náluk.
- A VBA-szerkesztővel létrehozott egyéni függvények lassabbak, mint a hagyományos függvények. Ez különösen nagy táblázatoknál tűnik fel. Sajnos a VBA egyelőre nagyon lassú programozási nyelv. Ezért ha sok adatunk van, próbáljunk meg lehetőség szerint szabványos függvényeket használni, vagy hozzunk létre UDF-eket a LAMBDA függvény segítségével.
Egyéni funkció korlátozások:
- Az UDF-ek számítások elvégzésére és értékek visszaadására szolgálnak. Nem használhatók a makrók helyett.
- Más cellák tartalmát nem tudják megváltoztatni (csak az aktív cellát).
- A függvényneveknek bizonyos szabályokat kell követniük. Például nem használhat olyan nevet, amely megegyezik egy natív Excel-funkció nevével vagy egy cellacímmel, például AB123.
- Az egyéni függvény neve nem tartalmazhat szóközöket, de az aláhúzás karaktert tartalmazhatja. A legelőnyösebb módszer azonban az, ha minden új szó elején nagybetűket használ (például GetMaxBetween).
- Az UDF nem tud cellákat másolni és beilleszteni a munkalap más területeire.
- Nem tudják megváltoztatni az aktív munkalapot.
- Az UDF-ek nem tudják megváltoztatni az aktív cella formázását. Ha egy cella formázását különböző értékek megjelenítésekor szeretné megváltoztatni, akkor feltételes formázást kell használnia.
- Nem tudnak további könyveket nyitni.
- Nem használhatók az Application.OnTime használatával végrehajtott makrók futtatására.
- Felhasználó által definiált függvényt nem lehet létrehozni a makrórögzítővel.
- A funkciók nem jelennek meg a Fejlesztő> Makrók párbeszéd.
- A funkciók megjelennek a párbeszédpanelen ( Beillesztés> Funkció ), és a függvények listájában csak akkor, ha azok a Nyilvános (ez az alapértelmezett, hacsak másképp nem jelölik).
- Minden olyan függvény, amelyet Privát nem jelenik meg a funkciólistában.
A meglehetősen lassú működés, valamint a használat bizonyos korlátai elgondolkodtathatnak: "Mi értelme van ezeknek az egyéni funkcióknak?".
Jól jöhetnek, és jól is jönnek, ha szem előtt tartjuk a rájuk vonatkozó korlátozásokat. Ha megtanuljuk, hogyan kell megfelelően létrehozni és használni az UDF-eket, akkor megírhatjuk a függvénykönyvtárunkat. Ez nagyban bővíti az Excelben az adatokkal való munkavégzés képességét.
Ami engem illet, az egyéni függvények nagyszerű időmegtakarítást jelentenek. És mi a helyzet veled? Próbáltad már létrehozni a saját UDF-edet? Jobban tetszett, mint az alap Excel függvények? Beszéljük meg a hozzászólásokban :)