فهرست مطالب
ما در حال ادامه مجموعه آموزش ها در مورد توابع تعریف شده توسط کاربر هستیم. در مقالات قبلی با توابع سفارشی آشنا شدیم و نحوه ایجاد و استفاده از آنها را یاد گرفتیم. در این راهنما به مشخصات استفاده از این توابع خواهیم پرداخت و تفاوت بین UDF و ماکروهای VBA را مشاهده خواهیم کرد.
در این آموزش موارد زیر را یاد خواهیم گرفت:
ما امیدواریم که این مقاله دانش شما را در مورد UDF تقویت کند و به شما کمک کند از آنها به طور مؤثرتری در کتابهای اکسل خود استفاده کنید.
آیا UDF و Macro یکسان هستند؟
هر دو توابع تعریف شده توسط کاربر و VBA ماکروها با استفاده از ویرایشگر VBA ایجاد می شوند. چه تفاوتی بین آنها وجود دارد و به چه چیزی باید اولویت داد؟
مهمترین تفاوت این است که تابع محاسبه را انجام می دهد و ماکرو عملی را انجام می دهد. یک تابع تعریف شده توسط کاربر، مانند یک تابع عادی اکسل، باید در یک سلول نوشته شود. در نتیجه اجرای آن، سلول مقداری مقدار را برمی گرداند. در عین حال، تغییر مقادیر سلول های دیگر و همچنین برخی از ویژگی های سلول فعلی (به ویژه قالب بندی) غیرممکن است. با این حال، میتوانید از یک تابع سفارشی در فرمولهای قالببندی شرطی استفاده کنید.
ماکرو UDF و VBA به روشهای مختلفی کار میکنند. به عنوان مثال، هنگامی که یک UDF در ویرایشگر ویژوال بیسیک ایجاد می کنید، با یک عبارت Function شروع می کنید و با یک End Function پایان می دهید. وقتی یک ماکرو را ضبط می کنید، با a شروع می کنیدعبارت Sub و پایان آن با End Sub.
همه عملگرهای ویژوال بیسیک را نمی توان برای ایجاد UDF استفاده کرد. به همین دلیل، یک ماکرو راه حل همه کاره تری است.
یک ماکرو بر خلاف یک تابع تعریف شده توسط کاربر، نیازی به ارسال هیچ آرگومان از کاربر ندارد (و نمی تواند هیچ آرگومانی را بپذیرد).
نکته این است که برخی از دستورات ماکروها می توانند از آدرس سلول یا عناصر قالب بندی (مثلاً رنگ) استفاده کنند. اگر سلولها را جابهجا میکنید، ردیفها و ستونها را اضافه یا حذف میکنید، قالب سلولها را تغییر میدهید، در این صورت میتوانید به راحتی ماکروهای خود را «شکن» کنید. این امر به ویژه در صورتی امکان پذیر است که فایل خود را با همکارانی که نمی دانند ماکروهای شما چگونه کار می کنند به اشتراک بگذارید.
به عنوان مثال، شما یک فایل با یک ماکرو کاملاً کارآمد دارید. این فرمول درصد سلول های A1 تا A4 را محاسبه می کند. ماکرو رنگ این سلول ها را به زرد تغییر می دهد. یک قالب درصدی در سلول فعال تنظیم شده است.
اگر شما یا شخص دیگری تصمیم به درج یک ردیف جدید دارید، ماکرو به جستجوی مقدار در سلول A4 ادامه می دهد ( پارامتر 4,1 در UDF شما)، از کار افتاد و یک خطا برمیگرداند:
در این حالت، خطا به دلیل تقسیم بر صفر رخ داده است (بدون مقدار در یک عدد جدید اضافه شده است). ردیف). در صورتی که ماکرو، مثلاً جمع بندی را انجام دهد، به سادگی نتیجه اشتباهی دریافت خواهید کرد. اما شما در مورد آن نمی دانید.
برخلاف ماکروها، توابع تعریف شده توسط کاربر نمی توانند چنین وضعیت ناخوشایندی ایجاد کنند.
در زیر عملکردهمان محاسبات با استفاده از UDF. در اینجا میتوانید سلولهای ورودی را در هر جایی از کاربرگ مشخص کنید و هنگام تغییر آن با هیچ مشکل غیرمنتظرهای مواجه نخواهید شد.
من فرمول زیر را در C3 نوشتم:
=UDF_vs_Macro(A1,A4)
سپس یک ردیف خالی قرار دادم و فرمول تغییر کرد همانطور که در تصویر بالا مشاهده می کنید.
اکنون می توانیم یک سلول ورودی یا یک سلول با یک تابع را به هر جایی منتقل کنیم. نتیجه همیشه صحیح خواهد بود.
یک مزیت اضافی استفاده از UDF ها این است که وقتی مقدار سلول ورودی تغییر می کند، به طور خودکار به روز می شوند. هنگام استفاده از ماکروها، همیشه باید اطمینان حاصل کنید که همه دادهها بهروز هستند.
با در نظر گرفتن این مثال، ترجیح میدهم تا جایی که ممکن است از UDF استفاده کنم و از ماکروها فقط برای سایر فعالیتهای غیر محاسباتی استفاده کنم.
محدودیت ها و معایب استفاده از UDF
من قبلاً در بالا به مزایای UDF اشاره کردم. به طور خلاصه، می تواند محاسباتی را انجام دهد که با توابع استاندارد اکسل امکان پذیر نیست. علاوه بر این، می تواند فرمول های طولانی و پیچیده را ذخیره و استفاده کند و آنها را به یک تابع تبدیل کند. و مجبور نیستید بارها و بارها فرمول های پیچیده بنویسید.
اکنون بیایید با جزئیات بیشتری در مورد کاستی های UDF صحبت کنیم:
- ایجاد UDF نیاز به استفاده از VBA دارد. هیچ راه حلی در این مورد نیست. این بدان معنی است که کاربر نمی تواند UDF را به همان روش ماکرو اکسل ضبط کند. شما باید UDF را خودتان ایجاد کنید. با این حال، می توانید کپی کنید وبخش هایی از کد ماکرو ثبت شده قبلی را در تابع خود بچسبانید. فقط باید از محدودیتهای توابع سفارشی آگاه باشید.
- یکی دیگر از اشکالات UDF این است که مانند هر تابع اکسل دیگر فقط میتواند یک مقدار یا آرایهای از مقادیر را به یک سلول برگرداند. این به سادگی محاسبات را انجام می دهد، نه بیشتر.
- اگر می خواهید کتاب کار خود را با همکاران خود به اشتراک بگذارید، حتما UDF های خود را در همان فایل ذخیره کنید. در غیر این صورت، توابع سفارشی شما برای آنها کار نخواهد کرد.
- عملکردهای سفارشی ایجاد شده با ویرایشگر VBA کندتر از توابع معمولی هستند. این امر به ویژه در میزهای بزرگ قابل توجه است. متأسفانه، VBA تا کنون یک زبان برنامه نویسی بسیار کند است. بنابراین، اگر داده های زیادی دارید، سعی کنید تا حد امکان از توابع استاندارد استفاده کنید یا با استفاده از تابع LAMBDA UDF ایجاد کنید.
محدودیت های عملکرد سفارشی:
- UDF ها هستند طراحی شده برای انجام محاسبات و برگرداندن یک مقدار. آنها نمی توانند به جای ماکروها استفاده شوند.
- آنها نمی توانند محتویات هیچ سلول دیگری (فقط سلول فعال) را تغییر دهند.
- نام توابع باید از قوانین خاصی پیروی کند. برای مثال، نمیتوانید از نامی استفاده کنید که با نام تابع اکسل یا آدرس سلول مطابقت داشته باشد، مانند AB123.
- عملکرد سفارشی شما نمیتواند شامل فاصله در نام باشد، اما میتواند شامل نویسه زیرخط باشد. با این حال، روش ترجیحی استفاده از حروف بزرگ در ابتدای هر جدید استکلمه (به عنوان مثال، GetMaxBetween).
- یک UDF نمی تواند سلول ها را در قسمت های دیگر کاربرگ کپی و جایگذاری کند.
- آنها نمی توانند کاربرگ فعال را تغییر دهند.
- UDF ها نمی توانند' قالب بندی را در سلول فعال تغییر دهید. اگر میخواهید قالببندی یک سلول را هنگام نمایش مقادیر مختلف تغییر دهید، باید از قالببندی شرطی استفاده کنید.
- آنها نمیتوانند کتابهای اضافی را باز کنند.
- نمیتوان از آنها برای اجرای ماکروها با استفاده از Application.OnTime استفاده کرد. .
- یک تابع تعریف شده توسط کاربر را نمی توان با استفاده از ضبط کننده ماکرو ایجاد کرد.
- توابع در Developer > گفتگوی ماکرو .
- توابع شما در کادر محاوره ای ( درج > تابع ) و در لیست توابع تنها در صورتی ظاهر می شوند که به عنوان عمومی<7 اعلان شوند> (این به طور پیش فرض است، مگر اینکه در غیر این صورت ذکر شده باشد).
- هیچ عملکردی که به عنوان خصوصی اعلام شده است در لیست ویژگی ها ظاهر نمی شود.
عملیات بسیار کند و همچنین برخی محدودیتها در استفاده، ممکن است شما را به این فکر وادار کند: "این توابع سفارشی چه کاربردی دارند؟"
این توابع سفارشی میتوانند مفید باشند و اگر به محدودیتهای اعمال شده بر آنها توجه داشته باشیم، این کار را انجام میدهند. اگر نحوه درست ایجاد و استفاده از UDF ها را یاد بگیرید، می توانید کتابخانه توابع خود را بنویسید. این کار توانایی شما برای کار با داده ها در اکسل را تا حد زیادی افزایش می دهد.
همانطور که برای من، توابع سفارشی صرفه جویی زیادی در زمان دارند. و شما چطور؟ آیا قبلاً سعی کرده اید UDF خود را ایجاد کنید؟ خوشت آمدبهتر از توابع اصلی اکسل؟ بیایید در نظرات درباره آن بحث کنیم :)