Excel UDF nexebite: pirsgirêk û çareserî

  • Vê Parve Bikin
Michael Brown

Di vê gotarê de, em ê li pirsgirêkên ku hûn dikarin di dema karanîna fonksiyonên xwerû yên di pirtûkên xebata xwe de rû bi rû bimînin binihêrin. Ez ê hewl bidim ku nîşanî we bidim ka sedema wan çi ye û ew çiqas bi hêsanî dikarin werin çareser kirin.

Li vir em ê li ser biaxivin:

    Berê me li ser çi axivî. fonksiyona xwerû ev e ku meriv wê çawa biafirîne û bikar bîne. Heke hûn hîs dikin ku hûn hewce ne ku berê zanîna bingehîn a UDF-an nûve bikin, rawestin û li gotara min a berê mêze bikin.

    Çima Excel UDF ji nû ve nayê hesibandin?

    Dema ku hûn di nav de guhertinan bikin pirtûka weya xebatê, Excel dê her formula ku we li wir heye ji nû ve hesab neke. Ew ê encamên wan formulên ku tenê bi şaneyên guhertî ve girêdayî ne nûve bike.

    Lê ev yek fonksiyonên standard Excel eleqedar dike. Wekî ku ji yên xwerû, Excel nikare koda VBA-ê rast bike û hucreyên din ên ku di heman demê de dikarin li ser encama fonksiyona xwerû bandor bikin nas bike. Ji ber vê yekê, dema ku hûn di pirtûka xebatê de guherînan çêkin dibe ku formula weya xwerû neguhere.

    Ji bo sererastkirina pirsgirêkê, hûn ê tenê gotina Application.Volatile bikar bînin. Binihêrin beşa paşîn da ku hûn rêwerzên gav-gav fêr bibin ka meriv çawa wê bikar tîne.

    Fonksiyonên xwerû yên guhezbar û ne-hilber

    Ji hêla xwerû, fonksiyonên xwerû yên di Excel de ne guhezbar in. Ev tê vê wateyê ku UDF tenê ji nû ve tê hesibandin heke nirxa yek ji hucreyên ku jê re vedibêje biguhezîne. Lê eger formata şaneyan, navê yapelgeya xebatê, navê pelê biguhere, wê demê di UDF de tu guhertin çênabin.

    Em ji peyvan veguherînin mînakan. Mînakî, hûn hewce ne ku navê pirtûka xebata xwe di hucreyekê de binivîsin. Ji bo vê yekê, hûn fonksiyonek xwerû diafirînin:

    Fonksiyon WorkbookName() Wek String WorkbookName = ThisWorkbook.Name Fonksiyon Dawî

    Niha rewşa jêrîn bifikirin. Te formula xwerû =Navê Xebatê() di hucreyê de nivîsand û navê pelê li wir girt. Di demekê de, we biryar da ku hûn navê pelê biguherînin û wê bi navek din tomar bikin. Lê hûn li nirxa di hucreyê de dinêrin û dibînin ku ew nehatiye guhertin. Hîn navekî pelê kevn heye ku êdî ne rast e.

    Ji ber ku di vê fonksiyonê de argûman tune ne, fonksiyon ji nû ve nayê hesibandin (heta ku hûn navê pirtûka xebatê biguherînin, wê bigrin û dûv re vekin ew).

    Nîşe. Ji bo ku hûn hemî fonksiyonên di pelê xwe de ji nû ve hesab bikin, hûn dikarin kurteya Ctrl + Alt + F9 bikar bînin.

    Rêyek hêsantir heye? Ji bo ku formula her carê ku pelê xebatê diguhere ji nû ve hesab bike, ji we re rêzek kodek zêde hewce dike. Parçeya kodê ya jêrîn di destpêka fonksiyona xwe de binivîsin:

    Application.Volatile

    Ji ber vê yekê, koda we dê wiha xuya bike:

    Fonksiyon WorkbookName() As String Application.Volatile WorkbookName = ThisWorkbook.Name Fonksiyon Dawî

    Naha UDF-ya we guhezbar e, ji ber vê yekê heke di pelxebatê de şaneyek hebe dê bixweber were hesibandinji nû ve hatiye hesibandin an jî di pirtûka xebatê de guhertinek çêbûye. Gava ku hûn navê pelê biguherînin, hûn ê di cih de wê nûvekirinê bibînin.

    Nîşe. Ji kerema xwe ji bîr mekin ku gelek fonksiyonên bêserûber dikarin Excel we hêdî bikin. Beriya her tiştî, gelek fonksiyonên xwerû hene ku hesabên tevlihev dikin û bi domdarî li ser rêzikên daneyên mezin dixebitin.

    Ji ber vê yekê, ez pêşniyar dikim ku guheztinê tenê li cîhê ku bi rastî hewce be bikar bînin.

    Çima fonksiyonên xwerû ne berdest in

    Dema ku hûn tîpên pêşîn ên navê fonksiyonek xwerû têxin nav, ew xuya dike di lîsteya daketî ya li kêleka şaneya têketinê de, mîna fonksiyonên standard Excel.

    Lêbelê, ev her gav nabe. Kîjan xeletî dikare bibe sedema vê rewşê?

    Heke we Excel 2003-2007 heye, wê hingê UDF qet di navnîşa dakêşanê de xuya nake. Li wir hûn dikarin tenê fonksiyonên standard bibînin.

    Lê her çend hûn guhertoyek nû ya Excel bikar bînin jî, xeletiyek din heye ku hûn bi xeletî bikin.

    Hûn dibînin, fonksiyona xwerû divê di nav de be. modulek standard VBA ya bi navê Modules. Dema ku hûn modulek nû lê zêde dikin ku koda fonksiyonê binivîsin, peldankek Modul bixweber tê afirandin ku hemî modul tê de têne nivîsandin.

    Lê carinan carinan dibe ku modulek nû nabe. tên afirandin. Di dîmendera paşîn de hûn dikarin bibînin ku koda fonksiyonê ya xwerû di modula "Microsoft Excel Objects" de digelThisWorkbook.

    Xal ev e ku hûn nekarin fonksiyonek xwerû li qada kodê ya pelxebatek an pirtûkek xebatê bi cîh bikin. Di vê rewşê de, fonksiyon dê nexebite. Wekî din, ew ê di navnîşa dakêşana fonksiyonan de xuya neke. Ji ber vê yekê, kod divê her dem di peldanka Modûlên de be.

    Metna alîkariyê ya fonksiyona xwerû ya Excel nayê xuyang kirin

    Dibe ku pirsgirêkek din çêbibe îşareta ku hûn gava ku hûn lê dikin dibînin. fonksiyonek xwerû. Heke hûn fonksiyonek standard bikar bînin, hûn ê her gav ji bo fonksiyonê û ji bo argumanên wê şîretek amûrek bibînin. Lê gelo UDF çi ye?

    Heke we gelek fonksiyonên xwerû hebin, dê ji we re pir dijwar be ku hûn bîr bînin ku her yek ji wan hesaban dike. Dê hîn dijwartir be ku meriv kîjan argumanan bikar bîne bi bîr bîne. Ez difikirim ku ew ê baş be ku hûn ravekirina fonksiyonên xweyên xwerû wekî bîranînek hebe.

    Ji bo vê yekê, ez pêşniyar dikim ku rêbaza Application.MacroOptions bikar bînin. Ew ê ji we re bibe alîkar ku hûn ne tenê fonksiyonê lê di heman demê de her argumanên wê jî di pencereya Function Wizard de nîşan bidin. Dema ku hûn bişkoka Fx ya di barika formula de bitikînin hûn vê pencereyê dibînin.

    Werin em bibînin ka meriv çawa nîşanek weha li UDF-yên xwe zêde bike. Di gotara berê de me li fonksiyona xwerû ya GetMaxBetween mêze kir. Ew di nav rêza diyarkirî de hejmara herî zêde dibîne û sê argumanan digire: rêzek nirxên hejmarî, û nirxek herî zêde û hindiktirînbigerin.

    Niha em ê ji bo vê fonksiyona xwerû şiroveyekê lê zêde bikin. Ji bo vê yekê, emrê Application.MacroOptions biafirînin û bimeşînin. Ji bo fonksiyona GetMaxBetween , hûn dikarin fermana jêrîn bixebitin:

    Sub RegisterUDF () Dim strFuncName As String 'navê fonksiyona ku hûn dixwazin tomar bikin Dim strDescr As String' şirovekirina fonksiyonê Xwe Dim strArgs () Wek String 'danasîna argumanên fonksiyonê' Tomar bike GetMaxBetween fonksiyona ReDim strArgs (1 heta 3) 'Hejmara argumanan di fonksiyona we de strFuncName = "GetMaxBetween" strDescr = "Hejmara herî zêde di rêza diyarkirî de" strArgs (1) "Rêjeya nirxên hejmarî" strArgs (2) = "Kanora navberê ya jêrîn" strArgs (3) = " Sînorê navbera jorîn" Application.MacroOptions Macro: = strFuncName, _ Danasîn: = strDescr, _ ArgumentDescription: = strArgs, _ Kategorî: = " Fonksiyonên Xweserî yên Min " Bidawîkirina Sub

    an

    Bin RegisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Danasîn: = "Hejmara herî zêde di çarçoveya diyarkirî de" , _ Kategorî: = "Min Fonksiyonên Xweser" , _ ArgumentDescriptions: = Array (_ "Rêza nirxên hejmarî" , _ "Bor navbera jêrîn der" , _ "Sînora navbera jorîn" ) End Sub

    Guherbar str Name Name navê fonksiyonê ye. strDescr - Danasîna fonksiyonê. Guherbarên strArgs ji bo her argumanekê îşaretan dihewîne.

    Dibe ku hûn bipirsin ka argumana çaremîn çi yeSerlêdan.MacroOptions. Navê vê argumana vebijarkî Kategorî e û çîna fonksiyonên Excel destnîşan dike ku fonksiyona meya xwerû GetMaxBetween () dê tê de cih bigire. Hûn dikarin navê wê li gorî kategoriyên heyî bi nav bikin: Math & ; Trig, Statistical, Logical, hwd. Hûn dikarin ji bo kategoriya nû navek diyar bikin ku hûn ê fonksiyonên ku hûn diafirînin tê de bi cih bikin. Heke hûn argumana Kategoriyê bikar neynin, wê hingê fonksiyona xwerû dê bixweber di kategoriya "Bikarhêner Diyarkirî" de were danîn.

    Koda fonksiyonê li pencereya modulê bixin:

    Piştre bişkoka "Run" bikirtînin. Ferman dê hemî mîhengên ji bo bikaranîna bişkoka Fx bi fonksiyona xweya GetMaxBetween() pêk bîne.

    Heke hûn hewl bidin ku fonksiyonekê têxin nav şaneyek bi karanîna Fonksiyonê têxe , hûn ê bibînin ku fonksiyona weya GetMaxBetween di kategoriya "Fonksiyonên Min ên Xweser" de ye:

    Tu dikarin bi hêsanî dest bi nivîsandina navê fonksiyonê li şaneyê bikin û hûn ê fonksiyona xweya xwerû di navnîşa hilbijartî ya hilbijartî de bibînin.

    Piştre gazî Fonksiyon Wizard bi bişkoka Fx.

    Tip. Her weha hûn dikarin bişkojka CRTL + A bikar bînin da ku Wizard Fonksiyon vekin.

    Di pencereya Fonksiyon Wizard de hûn ê danasîna fonksiyona xwe, û hem jî ji bo argumana yekem nîşanek bibînin. Ger hûn kursorê xwe bidin serargumana duyem an sêyem, hûn ê ji bo wan jî îşaretan bibînin.

    Heke hûn dixwazin metna van nîşanan biguherînin, nirxên strDescr û strArgs guherbarên di koda RegisterUDF () de. Dûv re fermana RegisterUDF () dîsa bixebite.

    Heke hûn dixwazin hemî mîhengên hatine çêkirin betal bikin û ravekirina fonksiyonê paqij bikin, vê kodê bişopînin:

    Sub UnregisterUDF () Application.MacroOptions Macro: = "GetMaxBetween" , _ Danasîn: = Vala , ArgumentDescriptions: = Vala , Kategorî: = Vala Dawiya Sub

    Rêyek din heye ku gava hûn fonksiyonek xwerû têxin îşaretekê. Navê fonksiyonê binivîse û paşê Ctrl + Shift + A bitikîne :

    =GetMaxBetween( + Ctrl + Shift + A

    Hûn ê navnîşek hemî argumanên fonksiyonê bibînin:

    Mixabin, li vir hûn ê danasîna fonksiyonê û argumanên wê nebînin. Lê heke navên argumanan pir agahdar in, ji ber vê yekê dibe ku ew jî bibin alîkar. Dîsa jî, ew ji tunebûnê çêtir e :)

    Dê piçek bêtir xebat hewce bike ku ji bo UDF-yên ku mîna fonksiyonên standard Excel dixebitin aqilmend çêbibin. Mixabin, Microsoft tu vebijarkan peyda nake. Yekane çareseriya heyî niha pêvekek Excel-DNA IntelliSense ye. Hûn dikarin li ser malpera pêşdebiran bêtir agahdarî bibînin.

    Hêvîdarim, ev rênîşander dê ji we re bibin alîkar ku hûn pirsgirêkan çareser bikin dema ku fonksiyona weya xwerû nexebite an nexebitewek ku hûn dixwazin bixebitin. Ger lêbelê, UDF-ya we hîn jî nexebite, ji kerema xwe pirsgirêka xwe di beşa Şîrove de rast binav bikin. Em ê biceribînin ku wê fêhm bikin û çareseriyê ji we re bibînin ;)

    Michael Brown dilxwazek teknolojiyê ya dilsoz e ku bi hewesek hêsankirina pêvajoyên tevlihev bi karanîna amûrên nermalavê ye. Bi zêdetirî deh salan ezmûnek di pîşesaziya teknolojiyê de, wî jêhatîbûna xwe di Microsoft Excel û Outlook, û her weha Google Sheets û Docs de pêş xist. Bloga Michael ji bo parvekirina zanyarî û pisporiya xwe bi kesên din re veqetandî ye, ji bo baştirkirina hilberî û karîgeriyê serişte û dersên hêsan-şopandinê peyda dike. Çi hûn pisporek demsalî ne an jî destpêkek in, bloga Michael ji bo ku hûn herî zêde ji van amûrên nermalava bingehîn sûd werbigirin, têgihiştinên hêja û şîretên pratîkî pêşkêşî dike.