البته اینکار با خود اکسل بسیار ساده است و کافی است که فرمول =max( ) – Min( ) را بکار ببریم ، اما هدف این مثال اینست که نشان دهد چطور میتوان در محیط ویژوال بیسیک از توابع استاندارد اکسل استفاده کرد.
Public Function max_min(InRange As Range) As Double
Application.Volatile True
MaxNum = Application.WorksheetFunction.Max(InRange)
MinNum = Application.WorksheetFunction.Min(InRange)
max_min = MaxNum - MinNum
End Function
همانطور که میبینید با دستور application.worksheetfunction.xxx که به جای xxx نام تابع استاندارد اکسل را مینویسیم.
مثال 4- میخواهیم تابعی بنویسیم که بتواند مقدار هزار، میلیون و میلیارد را در یک عدد تشخیص دهد و سپس کلمه "تومان" یا "ریال" را هم به آن عدد اضافه کند . در صورتی که عدد معتبر نبود پیغام خطای مناسبی را اعلام کند.
مثلا اگر عدد 15000 وارد شد بنویسید : 15 هزار ریال (یا 15 هزار تومان)
با این مثال قصد داریم ورودیهای Optional را مرور کنیم. مثلا اگر تابع Vlookup را در نظر بگیریم ، آخرین ورودی آن انتخابی (optional) است ، بدین معنی که اگر کاربر مقداری را وارد نکند به طور پیش فرض مقدار True را در نظر میگیرد و در ضمن اگر کاربر خواست میتواند ورودی را به تابع بدهد.
حالت ساده این کار در VB به این صورت است که مینویسیم :
Public Function Test(Num as Integer, optional Num as Integer = True)
تفسیر کد بالا به این صورت است که تابعی داریم به نام Test با دو ورودی.
ورودی اول آن مقداری است به نام Num و از نوع عدد صحیح است .
ورودی دوم آن مقداری است اختیاری ، یعنی کاربر میتواند ورودی دوم را ندهد و با تعریف بالا مقدار پیش فرض آن True در نظر گرفته شده که اگر کاربر مقداری را صریحاً به تابع اعلام نکند ، آنوقت مقدار دوم True در نظر گرفته خواهد شد و کار تابع با این مقدار شروع میشود.
اگر ورودی دوم داده نشود یا 1 یا True اعلام شود ، کلمه ریال در نظر گرفته خواهد شد.
اگر ورودی دوم False یا 0داده شود ، کلمه تومان در نظر گرفته خواهد شد.
حال به نوشتن تابع مذکور میپردازیم :
Public Function PersianCurrency(MyNumber As String, Optional Mode As Boolean = True)
Application.Volatile True
If Val(MyNumber) >= 0 Then
Temp$ = MyNumber
Cur$ = ""
End If
If Val(MyNumber) >= 1000 Then
Temp$ = Mid(Trim(MyNumber), 1, Len(MyNumber) - 3)
Cur$ = "هزار"
End If
If Val(MyNumber) >= 1000000 Then
Temp$ = Mid(Trim(MyNumber), 1, Len(MyNumber) - 6)
Cur$ = "ميليون"
End If
If Val(MyNumber) >= 1000000000 Then
Temp$ = Mid(Trim(MyNumber), 1, Len(MyNumber) - 9)
Cur$ = "ميليارد"
End If
If Mode = True Then C$ = "ريال" Else C$ = "تومان"
PersianCurrency = Temp$ & Cur$ & " " & C$
If Val(MyNumber) = 0 Then
PersianCurrency = "مقدار يافت نشد"
End If
End Function
تست و خروجی این تابع را در مثال زیر مشاهد میکنید .
تذکر : مقدار True همان 1 است و مقدار False همان 0 است . (یعنی از هر کدام از این مقادیر میتوان استفاده کرد.)
10هزار ريال
=Persiancurrency(A1,1)
250هزار تومان
=Persiancurrency(A2,FALSE)
15ميليون ريال
=Persiancurrency(A3,1)
15ميليون تومان
=Persiancurrency(A4,FALSE)
مقدار يافت نشد
=Persiancurrency(A5,1)
این تابع جنبه تمرینی دارد و همه مقادیر اعداد را پوشش نمیدهد ، فقط ارقامی که با صفر همراه هستند را می شناسد.