آموزش vba در اکسل از 0 تا 100 و دستورات و نکات کاربردی

VBA زبان برنامهنویسی داخلی اکسل است و برای خودکارکردن کارهای تکراری، ساخت دکمه، پردازش اطلاعات و ایجاد توابع اختصاصی استفاده میشود. برای مثال میتوان صدها ردیف را با یک کلیک مرتب، قالببندی یا به فایلهای جدا تبدیل کرد.
VBA عمدتاً در نسخه دسکتاپ Excel اجرا میشود و فایل حاوی ماکرو باید با فرمت xlsm ذخیره شود.
فعالکردن زبانه Developer
- وارد File > Options > Customize Ribbon شوید.
- گزینه Developer را فعال کنید.
- روی OK بزنید.
برای ورود سریع به محیط کدنویسی، کلیدهای زیر را فشار دهید:
Alt + F11
در محیط VBA از مسیر Insert > Module یک ماژول جدید بسازید.

اولین ماکرو
کد زیر را داخل Module قرار دهید:
Sub HelloMessage()
MsgBox "سلام! ماکرو با موفقیت اجرا شد."
End Sub
برای اجرا نشانگر را داخل کد قرار داده و F5 را بزنید. از داخل اکسل نیز میتوانید Alt+F8 را فشار دهید، نام ماکرو را انتخاب کرده و Run را بزنید.
هر ماکرو با Sub شروع و با End Sub تمام میشود.
ضبط ماکرو بدون کدنویسی
از مسیر Developer > Record Macro ضبط را شروع کنید، چند عملیات مانند رنگکردن سلول یا تنظیم عرض ستون را انجام دهید و سپس Stop Recording را بزنید.
اکسل این عملیات را به کد VBA تبدیل میکند. با Alt+F11 میتوانید کد ساختهشده را ببینید و تغییر دهید. ضبط ماکرو برای یادگیری دستورات بسیار مفید است، اما کد تولیدشده معمولاً نیاز به سادهسازی دارد.
کار با سلولها
مقداردهی به یک سلول:
Range("A1").Value = "نام محصول"
خواندن مقدار سلول:
MsgBox Range("A1").Value
استفاده از شماره سطر و ستون:
Cells(2, 3).Value = 500
این دستور مقدار 500 را در سلول C2 قرار میدهد.
کار با چند سلول:
Range("A1:C10").Font.Bold = True
Range("A1:C10").Interior.Color = RGB(220, 240, 255)

تعیین شیت و فایل
بهتر است شیت را دقیق مشخص کنید تا کد روی صفحه اشتباه اجرا نشود:
Worksheets("فروش").Range("A1").Value = "گزارش فروش"
روش منظمتر:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("فروش")
ws.Range("A1").Value = "گزارش فروش"
ThisWorkbook یعنی فایلی که کد VBA داخل آن قرار دارد. ActiveWorkbook فایل فعال را نشان میدهد و ممکن است فایل دیگری باشد.
متغیرها
متغیر برای نگهداری موقت اطلاعات استفاده میشود:
Dim productName As String
Dim price As Double
Dim count As Long
Dim isAvailable As Boolean
productName = "لپتاپ"
price = 45000000
count = 3
isAvailable = True
برای مجبورکردن VBA به تعریف متغیرها، این دستور را ابتدای ماژول قرار دهید:
Option Explicit
این کار بسیاری از اشتباهات تایپی را قبل از اجرا مشخص میکند.
شرطها
Sub CheckScore()
Dim score As Double
score = Range("A2").Value
If score >= 90 Then
Range("B2").Value = "عالی"
ElseIf score >= 60 Then
Range("B2").Value = "قبول"
Else
Range("B2").Value = "مردود"
End If
End Sub
با این آموزش اکسل صفر تا صد اکسل، رو توی کمترین زمان ممکن یاد بگیر.بهترین پک آموزش اکسل در ایران همین الان خرید و دانلود کنید!
این کد نمره سلول A2 را بررسی و نتیجه را در B2 مینویسد.

حلقهها
برای انجام یک عملیات روی چند ردیف از حلقه استفاده کنید:
Sub CalculateTotal()
Dim rowNumber As Long
For rowNumber = 2 To 10
Cells(rowNumber, 3).Value = _
Cells(rowNumber, 1).Value * Cells(rowNumber, 2).Value
Next rowNumber
End Sub
این کد مقدار ستون A را در ستون B ضرب کرده و نتیجه را در ستون C قرار میدهد.
برای حرکت بین سلولهای انتخابشده:
Dim cell As Range
For Each cell In Selection
cell.Value = Trim(cell.Value)
Next cell
تابع Trim فاصلههای اضافی ابتدا و انتهای متن را حذف میکند.
پیدا کردن آخرین ردیف
برای اینکه تعداد ردیفها ثابت نباشد:
Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
اکنون میتوان حلقه را تا آخرین ردیف دارای اطلاعات اجرا کرد:
Dim i As Long
For i = 2 To lastRow
Cells(i, "C").Value = Cells(i, "A").Value * Cells(i, "B").Value
Next i
ساخت تابع اختصاصی
علاوه بر ماکرو میتوانید تابع قابلاستفاده در سلول بسازید:
Function FinalPrice(price As Double, discount As Double) As Double
FinalPrice = price - (price * discount / 100)
End Function
سپس در اکسل بنویسید:
=FinalPrice(A2,B2)
توابع VBA معمولاً باید مقدار را محاسبه و برگردانند؛ بهتر است از تغییر مستقیم سلولهای دیگر داخل Function خودداری کنید.
نمایش پیام و دریافت اطلاعات
نمایش پیام:
MsgBox "عملیات تمام شد."
دریافت مقدار از کاربر:
Dim userName As String
userName = InputBox("نام خود را وارد کنید:")
Range("A1").Value = userName

ساخت یک ماکروی کاربردی
کد زیر جدول فعال را مرتب و قالببندی میکند:
Sub FormatReport()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastColumn As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastColumn = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
With ws.Range(ws.Cells(1, 1), ws.Cells(1, lastColumn))
.Font.Bold = True
.Interior.Color = RGB(31, 78, 121)
.Font.Color = RGB(255, 255, 255)
End With
With ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastColumn))
.Borders.LineStyle = xlContinuous
.Columns.AutoFit
End With
MsgBox "قالببندی جدول انجام شد."
End Sub
اجرای ماکرو با دکمه
- وارد Developer > Insert شوید.
- یک Button از نوع Form Control انتخاب کنید.
- دکمه را روی شیت بکشید.
- ماکروی موردنظر را انتخاب کنید.
- متن دکمه را به عبارتی مانند «ساخت گزارش» تغییر دهید.
اکنون کاربر بدون ورود به محیط VBA میتواند کد را اجرا کند.
رویدادها
رویدادها هنگام وقوع یک اتفاق، خودکار اجرا میشوند. برای مثال، کد زیر پس از تغییر مقدار سلول A1 اجرا میشود. آن را در بخش کد همان Sheet قرار دهید، نه Module معمولی:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "مقدار A1 تغییر کرد."
End If
End Sub
در رویدادهایی که سلول را تغییر میدهند، مراقب اجرای بینهایت رویداد باشید. در صورت نیاز موقتاً رویدادها را غیرفعال کنید:
Application.EnableEvents = False
' دستورات تغییر سلول
Application.EnableEvents = True
رفع خطا و بررسی کد
F8کد را خطبهخط اجرا میکند.- با کلیک کنار شماره خط میتوانید Breakpoint بسازید.
- پنجره Immediate با
Ctrl+Gباز میشود. - دستور
Debug.Printمقدار متغیر را در Immediate نشان میدهد. - هنگام خطا، گزینه Debug معمولاً خط مشکلدار را زرد میکند.
برای مدیریت ساده خطا:
On Error GoTo ErrorHandler
' دستورات اصلی
Exit Sub
ErrorHandler:
MsgBox "خطا: " & Err.Description
افزایش سرعت ماکرو
برای کدهای طولانی، بهروزرسانی صفحه و محاسبات را موقتاً متوقف کنید:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' دستورات اصلی
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
حتماً در پایان یا بخش مدیریت خطا، تنظیمات را به حالت اولیه برگردانید.
نکات مهم امنیتی
- فایل را با فرمت Excel Macro-Enabled Workbook یا XLSM ذخیره کنید.
- ماکروهای فایل ناشناس را فعال نکنید.
- قبل از اجرای کدهای حذف، انتقال یا جایگزینی اطلاعات، نسخه پشتیبان بگیرید.
- از
SelectوActivateغیرضروری استفاده نکنید؛ مستقیماً به سلول و شیت ارجاع دهید. - کد را ابتدا روی یک کپی از فایل آزمایش کنید.
- برای هر ماکرو فقط یک وظیفه مشخص در نظر بگیرید تا اصلاح و عیبیابی آن آسانتر باشد.
مسیر مناسب یادگیری VBA این است که ابتدا ضبط ماکرو، Range و Cells را تمرین کنید؛ سپس سراغ متغیر، شرط، حلقه، آخرین ردیف، تابع و رویداد بروید. پس از این مراحل میتوانید بیشتر عملیات تکراری اکسل را خودکار کنید.


درود فراوان
پاسخكتاب ماكرونويسي و برنامه نويسي كاربردي به زبان VBA در اكسل . چاپ سوم. انتشارات سازمان بورس.
تعداد محدودي از كتاب با قيمت بسيار پايين 32 هزار تومان.
چاپ جديد احتمالا بالاي 150 هزار تومان خواهد بود.
ارادتمند
مولف