برنامه نویسی رویه ای یک شیوه برنامه نویسی است که از برنامه نویسی ساخت یافته مشتق شده است. در این آموزش با استفاده از این شیوه مالیات حقوق سال 99 را در VBA محاسبه می نماییم.
تعریف
VBA کدها را در ماژول ها ذخیره می نماید. در VBA ماژول ها بطور کلی به دو نوع استاندارد و کلاس تقسیم بندی می شوند.
روش برنامه نویسی در ماژول های استاندارد VBA رویه ای می باشد. در این روش کدها به روال های مختلف که هر کدام وظایف خود را انجام می دهند تقسیم بندی و سپس در یک ماژول ذخیره می شوند.
محاسبه مالیات حقوق سال 1399 با استفاده از VBA
برای درک موضوع بگذارید موضوع را با یک مثال عینی تشریح نماییم.
فرض کنید می خواهید براساس بخشنامه حقوق سال 1399 خالص حقوق کارمندان یک اداره را که در محدوده B2 تا B101 قرار گرفته اند را محاسبه نماییم.
برای اینکه خالص حقوق را محاسبه کنیم ابتدا یک ماکرو در اکسل ایجاد می کنیم و تابع زیر را برای محاسبه مالیات حقوق در یک ماژول استاندارد در اکسل ذخیره می نماییم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Function calcSalaryTax(salary As Double) Dim tax As Double Dim lastStep As Double Dim salaryStep As Variant Dim taxRate As Variant Dim i As Integer lastStep = salary - 150000000 tax = 0 taxRate = Array(0, 10, 15, 20, 25) salaryStep = Array(30000000, 45000000, 30000000, 45000000, IIf(lastStep > 0, lastStep, 0)) For i = 0 To 4 If salary > 0 Then If salary > salaryStep(i) Then tax = tax + salaryStep(i) * taxRate(i) / 100 Else tax = tax + salary * taxRate(i) / 100 End If End If salary = salary - salaryStep(i) Next calcSalaryTax = tax End Function |
تابع calcSalaryTax مقدار حقوق (آرگومان salary) را دریافت و مالیات آن را محاسبه می نماید. حالا با ایجاد یک ماکرو جدید مبالغ خالص و مالیات را بطور خودکار مقابل رقم حقوق یک کارمند قرار می دهیم.
برای اینکار از زیرروال یا سابروتین netPay استفاده می نماییم. در این روال با استفاده از حلقه For و ایجاد تکرار روی سلول ها اطلاعات را درج می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Sub netPay() Dim wb As Workbook Dim ws As Worksheet Dim salaryRange As Range, taxRange As Range, netRange As Range Dim i As Integer, j As Integer Set wb = ThisWorkbook Set ws = wb.Sheets("sheet1") j = 2 For i = 2 To 101 Set salaryRange = ws.Cells(i, j) Set taxRange = ws.Cells(i, j + 1) Set netRange = ws.Cells(i, j + 2) taxRange.Value = calcSalaryTax(salaryRange.Value) netRange.Formula = "=" & salaryRange.Address & "-" & taxRange.Address Next End Sub |
روشی که در کد نویسی بالا بکار بردیم روش برنامه نویسی رویه ای می باشد. تابع calcSalaryTax بخشی از کد است که قابلیت استفاده مجدد را دارد و می توانیم آن را در سایر روال ها به هر تعداد که لازم داشتیم بکار ببریم.
در صورتی که در سال آتی نیز روش محاسبه مالیات حقوق عوض شود فقط تابع calcSalaryTax نیاز به تغییر خواهد داشت و سایر بخش ها ثابت خواهند بود.
روال، زیرروال، میدان دید و ماژول مفاهیم اصلی در شیوه برنامه نویسی رویه ای می باشند.
مزایای برنامه نویسی رویه ای
با توجه به توضیحات داده شده تقسیم بندی کدها در به روال ها مزایای زیر را دارد:
- تجزیه کردن کد به گامهای سادهتر
- کاهش کدهای تکراری
- امکان استفاده مجدد از کدها و روال ها
- راحت تر شدن فرایند عیب یابی