أهم 10 أكواد في Excel VBA: دليل شامل للمبتدئين والمحترفين
Visual Basic for Applications)VBA)
هو لغة برمجة قوية مدمجة في Excel
تتيح لك أتمتة المهام وتحسين. في هذا الدليل الشامل، سنستعرض أهم 10 أكواد VBA التي يجب أن يعرفها كل
مستخدم.
1. فتح وإغلاق المصنفات (Workbooks)
الكود الأساسي:
'
فتح مصنف موجود
Workbooks.Open "C:\المسار\المصنف.xlsx"
' إغلاق المصنف الحالي مع الحفظ
ActiveWorkbook.Close SaveChanges:=True
' إنشاء مصنف جديد
Workbooks.Add
الشرح التفصيلي:
- Workbooks.Open`:
تفتح مصنفاً موجوداً من مسار محدد
- ActiveWorkbook.Close`:
تغلق المصنف النشط مع خيار حفظ التغييرات
- Workbooks.Add`:
تنشئ مصنفاً جديداً
مثال عملي:
Vba
Sub فتح_وإغلاق_مصنف()
'
فتح مصنف موجود
Workbooks.Open "C:\تقارير\التقرير
الشهري.xlsx"
'
الانتظار لمدة ثانيتين
Application.Wait Now + TimeValue("00:00:02")
'
إغلاق المصنف مع الحفظ
ActiveWorkbook.Close SaveChanges:=True
End Sub
2. التعامل مع
الأوراق (Worksheets)
الكود الأساسي:
' التنقل إلى ورقة محددة
Worksheets("البيانات").Activate
' إضافة ورقة جديدة
Worksheets.Add After:=Worksheets(Worksheets.Count)
' إعادة تسمية ورقة
Worksheets("Sheet1").Name = "البيانات"
' حذف ورقة
Application.DisplayAlerts = False
Worksheets("ورقة للحذف").Delete
Application.DisplayAlerts = True
الشرح التفصيلي:
- .Activate`:
تجعل الورقة نشطة
- .Add`:
تضيف ورقة جديدة
- .Name`:
تغير اسم الورقة
- .Delete`:
تحذف الورقة (مع تعطيل التنبيهات)
مثال عملي:
Sub إدارة_الأوراق()
'
إضافة ورقة جديدة
Dim newSheet As Worksheet
Set newSheet
= Worksheets.Add(After:=Worksheets(Worksheets.Count))
'
تسمية الورقة الجديدة
newSheet.Name = "البيانات_" &
Format(Now, "yyyy-mm-dd")
'
التنقل إلى الورقة الجديدة
newSheet.Activate
End Sub
3. التعامل مع الخلايا والنطاقات
الكود الأساسي:
vba' الكتابة في خلية
Range("A1").Value = "الاسم"
' القراءة من خلية
Dim cellValue As String
cellValue = Range("A1").Value
' تحديد نطاق
Range("A1:B10").Select
' نسخ ولصق
Range("A1:B10").Copy
Destination:=Range("C1")
' التكامل التلقائي
Range("A1:A10").FillDown
الشرح التفصيلي:
- Range().Value`:
للقراءة من أو الكتابة إلى الخلايا
- .Copy`:
لنسخ النطاق
- .FillDown`:
لملء الخلايا تلقائياً
مثال عملي:
vba Sub تعبئة_البيانات()
'
تعبئة أسماء الأشهر
Dim الأشهر(1 To 12) As String
الأشهر(1) = "يناير": الأشهر(2) =
"فبراير": الأشهر(3) = "مارس"
الأشهر(4) = "أبريل": الأشهر(5) =
"مايو": الأشهر(6) = "يونيو"
الأشهر(7) = "يوليو": الأشهر(8) =
"أغسطس": الأشهر(9) = "سبتمبر"
الأشهر(10) = "أكتوبر": الأشهر(11) =
"نوفمبر": الأشهر(12) = "ديسمبر"
'
كتابة البيانات في العمود A
For i = 1 To 12
Cells(i,
1).Value = الأشهر(i)
Cells(i, 2).Value = i * 1000 ' قيم عشوائية
Next i
End Sub
4. الحلقات
التكرارية (Loops)
أنواع الحلقات:
1. حلقة For
For i = 1 To 10
Cells(i,
1).Value = i * 2
Next i
2. حلقة For Each
For Each cell In Range("A1:A10")
cell.Value =
cell.Value * 1.1 ' زيادة 10%
Next cell
3. حلقة Do While
Dim i As Integer
i = 1
Do While i <= 10
Cells(i,
1).Value = i
i = i + 1
Loop
مثال متقدم:
Sub معالجة_البيانات()
Dim lastRow As Long
lastRow =
Cells(Rows.Count, 1).End(xlUp).Row
'
تطبيق زيادة 15% على جميع القيم في العمود
B
For
i = 2 To lastRow
If
IsNumeric(Cells(i, 2).Value) Then
Cells(i, 2).Value = Cells(i, 2).Value * 1.15
Cells(i, 3).Value = "محدث"
End If
Next i
End Sub
5. الجمل الشرطية (If Statements)
البنية الأساسية:
' جملة If بسيطة
If الشرط Then
'
التنفيذ إذا كان الشرط صحيحاً
End If
' جملة If Else
If الشرط Then
'
إذا كان الشرط صحيحاً
Else
' إذا كان الشرط خاطئاً
End If
' جملة If متعددة الشروط
If الشرط1 And الشرط2 Then
'
إذا تحقق كلا الشرطين
ElseIf الشرط3
Then
'
إذا تحقق الشرط الثالث
Else
' إذا لم يتحقق أي شرط
End If
مثال عملي:
Sub تحليل_الدرجات()
Dim الدرجة As Integer
الدرجة =
Range("B2").Value
If الدرجة >= 90 Then
Range("C2").Value = "ممتاز"
Range("C2").Font.Color = RGB(0, 128, 0) ' لون أخضر
ElseIf الدرجة >= 80 Then
Range("C2").Value = "جيد جداً"
Range("C2").Font.Color = RGB(0, 0, 255) ' لون أزرق
ElseIf الدرجة >= 70 Then
Range("C2").Value = "جيد"
Range("C2").Font.Color = RGB(255, 165, 0) ' لون برتقالي
Else
Range("C2").Value = "ضعيف"
Range("C2").Font.Color = RGB(255, 0, 0) ' لون أحمر
End If
End Sub
6. إنشاء وتشغيل الماكرو
إنشاء ماكرو:
استدعاء ماكرو من ماكرو آخر:
Sub الماكرو_الرئيسي()
'
تنفيذ عدة ماكروات
Call تنظيف_البيانات
Call معالجة_البيانات
Call إنشاء_التقرير
End Sub
Sub تنظيف_البيانات()
'
كود التنظيف
End Sub
مثال متكامل:
Sub نظام_التقارير()
'
تسجيل وقت البدء
Dim startTime As Double
startTime =
Timer
'
تنفيذ سلسلة من الماكروات
Call استيراد_البيانات
Call تنظيف_البيانات
Call تحليل_البيانات
Call إنشاء_الرسوم_البيانية
Call حفظ_التقرير
'
حساب وقت التنفيذ
Dim executionTime As Double
executionTime = Round(Timer - startTime, 2)
MsgBox "تم إنشاء التقرير في
" & executionTime & " ثانية"
End Sub
7. صناديق الرسائل والإدخال
' رسالة بسيطة
MsgBox "عملية ناجحة!"
' رسالة مع زر موافق وإلغاء
Dim response As VbMsgBoxResult
response = MsgBox("هل تريد المتابعة؟", vbYesNo + vbQuestion, "تأكيد")
If response = vbYes Then
' المتابعة
Else
' الإلغاء
End If
Dim userName As String
userName = InputBox("أدخل اسمك:", "إدخال البيانات")
If userName <> "" Then
Range("A1").Value = "مرحباً " & userName
Else
MsgBox
"لم تدخل أي اسم"
End If
مثال متقدم:
Sub جمع_الأرقام()
Dim num1 As Double, num2 As Double
'
طلب إدخال الرقم الأول
num1 = Val(InputBox("أدخل الرقم
الأول:", "جمع الأرقام"))
'
طلب إدخال الرقم الثاني
num2 = Val(InputBox("أدخل الرقم
الثاني:", "جمع الأرقام"))
'
عرض النتيجة
MsgBox "نتيجة الجمع: " & (num1 +
num2), vbInformation, "النتيجة"
'
كتابة النتيجة في الخلية
Range("A1").Value = num1 + num2
End Sub
8. التعامل مع الأخطاء
معالجة الأخطاء:
Sub
معالج_الأخطاء()
'
كود قد يسبب أخطاء
Dim result As Double
result = 100
/ 0 ' قسمة على صفر
Exit Sub
ErrorHandler:
MsgBox
"حدث خطأ: " &
Err.Description & vbCrLf & _
"رقم الخطأ: " &
Err.Number, vbCritical, "خطأ"
'
إعادة تعيين كائن الخطأ
Err.Clear
End Sub
أنواع معالجة الأخطاء:
vba
' تخطي الأخطاء والمتابعة
On Error Resume Next
' الانتقال إلى معالج الأخطاء
On Error GoTo ErrorHandler
' إيقاف معالجة الأخطاء
On Error GoTo 0
مثال عملي:
Sub استيراد_البيانات()
On Error GoTo ErrorHandler
'
محاولة فتح ملف قد لا يكون موجوداً
Workbooks.Open "C:\بيانات\الملف_غير_موجود.xlsx"
'
إذا نجحت العملية
MsgBox "تم استيراد البيانات بنجاح"
Exit Sub
ErrorHandler:
Select Case
Err.Number
Case
1004 ' ملف غير موجود
MsgBox "الملف غير موجود. الرجاء التحقق من
المسار"
Case 13 ' نوع غير متطابق
MsgBox "خطأ في نوع البيانات"
Case Else
MsgBox "حدث خطأ غير متوقع:
" & Err.Description
End Select
End Sub
9. إنشاء وتعديل الدوال
إنشاء دالة مخصصة:
Function حساب_الضريبة(المبلغ
As Double, نسبة_الضريبة As Double) As Double
'
حساب قيمة الضريبة
حساب_الضريبة = المبلغ * (نسبة_الضريبة / 100)
End Function
Function فئة_الدخل(الدخل
As Double) As String
'
تحديد فئة الدخل
Select Case الدخل
Case Is >= 10000
فئة_الدخل = "عالي"
Case 5000 To 9999
فئة_الدخل = "متوسط"
Case Else
فئة_الدخل = "منخفض"
End Select
End Function
استخدام الدوال في الورقة:
=حساب_الضريبة(B2, 15)
=فئة_الدخل(C2)
مثال متقدم:
Function تقييم_الأداء(المبيعات
As Double, الهدف As Double) As String
Dim النسبة As Double
النسبة = (المبيعات / الهدف) * 100
Select Case النسبة
Case Is >= 120
تقييم_الأداء = "ممتاز"
Case 100 To 119
تقييم_الأداء = "جيد جداً"
Case 80 To 99
تقييم_الأداء = "مقبول"
Case Else
تقييم_الأداء = "تحت التوقعات"
End Select
End Function
10. التعامل مع الأحداث
أحداث الورقة:
Private Sub Worksheet_Change(ByVal Target As Range)
' يتم تنفيذ هذا الكود عند تغيير أي خلية في
الورقة
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
MsgBox
"تم تغيير خلية في النطاق
A1:A10"
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
' يتم تنفيذ هذا الكود عند تغيير التحديد
If Target.Cells.Count = 1 Then
Range("Z1").Value = "اخترت الخلية: " & Target.Address
End If
End Sub
أحداث المصنف:
Private Sub Workbook_Open()
' يتم تنفيذ هذا الكود عند فتح المصنف
MsgBox "مرحباً بك في نظام التقارير الشهرية",
vbInformation, "ترحيب"
'
تحديث التاريخ التلقائي
Sheets("الرئيسية").Range("A1").Value
= "آخر تحديث: " & Now()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' يتم تنفيذ هذا الكود قبل إغلاق المصنف
If MsgBox("هل تريد حفظ التغييرات؟",
vbYesNo) = vbYes Then
ThisWorkbook.Save
End If
End Sub
مثال متكامل:
' في وحدة الورقة
Private Sub Worksheet_Change(ByVal Target As Range)
' التحقق إذا كان التغيير في عمود الأسعار
If Not Intersect(Target, Range("C:C")) Is Nothing Then
Application.EnableEvents = False
On Error
GoTo Finalize
' تطبيق الخصم التلقائي
If Target.Value > 1000 Then
Target.Offset(0, 1).Value = Target.Value * 0.9 ' خصم 10%
Else
Target.Offset(0, 1).Value = Target.Value
End If
' تلوين الخلية
If Target.Value > 1000 Then
Target.Interior.Color = RGB(255, 255, 0) ' أصفر
Else
Target.Interior.Color = xlNone
End If
End If
Finalize:
Application.EnableEvents = True
End Sub
هذه الأكواد العشرة تشكل الأساس المتين لأي عمل متقدم في VBA. تذكر:
1. الممارسة المستمرة هي مفتاح الإتقان
2. التخطيط الجيد قبل الكتابة يوفر
الوقت والجهد
3. التوثيق والتعليقات تجعل الكود
مفهوماً للآخرين
4. اختبار الكود خطوة بخطوة يمنع
الأخطاء
ابدأ بتطبيق هذه الأكواد في مشاريعك
الصغيرة، ثم تقدم gradually
إلى مشاريع أكثر تعقيداً.
📌
أساسيات VBA والبرمجة
- `Sub` - `Function` - `Dim` - `Set` - `As` -
`End` - `Call`
-
`Option Explicit` - `Public` - `Private` - `Static`
📌
هياكل التحكم والمنطق
- `If Then Else` - `Select Case` - `For Next`
- `For Each` - `Do While` - `Do Until`
-
`And` - `Or` - `Not` - `ElseIf` - `Loop` - `Exit For` -
`Exit Do`
📌
الكائنات الرئيسية في Excel
- `Workbook` - `Worksheet` - `Range` -
`Cells` - `Rows` - `Columns`
-
`ActiveWorkbook` - `ThisWorkbook` - `ActiveSheet` -
`Sheets` - `Worksheets`
📌
الخلايا والنطاقات
- `Value` - `Formula` - `FormulaR1C1` -
`Address` - `Offset` - `Resize`
-
`CurrentRegion` - `UsedRange` - `End` - `Find` - `Copy` -
`PasteSpecial`
📌
الأحداث
- `Worksheet_Change` -
`Worksheet_SelectionChange` - `Workbook_Open`
-
`Workbook_BeforeClose` - `OnKey` - `OnTime`
📌
التفاعل مع المستخدم
- `MsgBox` - `InputBox` - `UserForm` -
`TextBox` - `ComboBox` - `CommandButton`
-
`Show` - `Hide` - `Load` - `Unload`
📌
معالجة الأخطاء
- `On Error` - `On Error Resume Next` - `On
Error GoTo` - `Err Object`
-
`Err.Number` - `Err.Description` - `Resume` - `Clear`
📌
العمليات الحسابية والدوال
- `Math Functions` - `String Functions` -
`Date Functions`
-
`Len` - `Left` - `Right` - `Mid` - `InStr` - `Replace` -
`Format`
📌
الملفات والمجلدات
- `Dir` - `MkDir` - `RmDir` - `Kill` -
`FileCopy` - `Name`
-
`Open` - `Close` - `Write` - `Input` - `Line Input`
📌
التحكم في التطبيق
- `Application` - `ScreenUpdating` -
`DisplayAlerts` - `Calculation`
-
`EnableEvents` - `StatusBar` - `Wait` - `OnTime`
📌
المصفوفات والمجموعات
- `Array` - `Collection` - `Dictionary` -
`ReDim` - `Preserve`
-
`UBound` - `LBound` - `Add` - `Remove` - `Count`
📌
التحكم في الشكل والتنسيق
- `Font` - `Color` - `Interior` - `Borders` -
`NumberFormat`
-
`AutoFit` - `Merge` - `WrapText` - `HorizontalAlignment`
📌
أدوات متقدمة
- `API` - `Class Module` - `Collection` -
`Early Binding` - `Late Binding`
-
`RegEx` - `FileSystemObject` - `SQL in VBA` - `ADO` -
`QueryTables`
📌
التصحيح والأداء
- `Debug.Print` - `Immediate Window` - `Watch
Window` - `Breakpoint`
-
`Step Into` - `Step Over` - `Local Window` - `Error
Handling`