همانطور که در پست مطلب قبلی اشاره کردیم، اکسل توانایی نوشتن و اجرای توابع شخصی را دارا میباشد. در اینجا قصد داریم تا تابعی بنویسیم تا مالیات سال 1397 را که در چند سقف مالیاتی میباشد بنویسیم. (در ادامه فرمول خطی آنرا نیز خواهیم گفت)
پس مانند پست قبل یک فایل با حالت macro enabled ایجاد کرده و با کلید alt+f11 وارد محیط vb شده و تابع زیر را مینویسیم :
Public Function CalculateTax97(ByVal mashmoolMaliat As Double) As Double
Dim tx As Double
If mashmoolMaliat > 161000000 Then
tx = (mashmoolMaliat - 161000000) * 0.35 + 11500000 + 3450000 + 6900000
Else
If mashmoolMaliat > 115000000 Then
tx = (mashmoolMaliat - 115000000) * 0.25 + 3450000 + 6900000
Else
If mashmoolMaliat > 92000000 Then
tx = (mashmoolMaliat - 92000000) * 0.15 + 6900000
Else
If mashmoolMaliat > 23000000 Then
tx = (mashmoolMaliat - 23000000) * 0.1
Else
tx = 0
End If
End If
End If
End If
CalculateTax97 = tx
End Function
سپس از منوی فایل گزینه save را انتخاب کرده و با کلید alt+f11 به محیط اکسل برمیگردیم و در یک سلول خالی عبارت CalculateTax97(92000000)= را تایپ میکنیم. تابع، عدد 6.900.000 را بازمیگرداند.
فرمول خطی این تابع (بدون نیاز به نوشتن تابع) بصورت زیر میباشد که میتوان در یک سلول خالی آنرا تایپ کرد. (با فرض اینکه عدد مشمول مالیات یا 92.000.000 ما در ستون B9 تایپ شده باشد، در ستون B10 این فرمول را مینویسیم :
=IF(B9>161000000;((B9-161000000)*0.35)+11500000+3450000+6900000;IF(B9>115000000;((B9-115000000)*0.25)+3450000+6900000;IF(B9>92000000;((B9-92000000)*0.15)+6900000;IF(B9>23000000;((B9-23000000)*0.1)+0;0))))
همانطور که مشاهده میکنید، جواب مانند مثالی که با تابع نوشته شد، برابر است.
در اینجا باید درنظر گرفت که در بعضی شرایط که میتوان تابع خود را بصورت خطی (در محیط اکسل و نه در vb) نوشت، قطعا" اینکار بهتر است. اما در شرایطی بدلیل طولانی شدن فرمول خطی و یا پیچیده شدن آن و یا استفاده از دستوراتی مانند حلقه ها و یا if های مکرر، استفاده از توابع شخصی اجتناب ناپذیر میباشد.
موفق باشید.
برچسب های مهم