
إذا كنت تستخدم إكسيل بانتظام، فمن المحتمل أنك على دراية بالفعل بكتابة الصيغ باستخدام دوال مثل SUM أو VLOOKUP أو IF. ربما تكون قد جربت أيضاً تسجيل وحدات الماكرو (Macros) لتسريع عمليات التنسيق المتكررة. ولكن عند نقطة معينة، لم تعد الصيغ الأساسية ومسجل الماكرو كافية. لإطلاق العنان لقوة إكسيل الحقيقية وأتمتة مسارات العمل المعقدة، تحتاج إلى الدخول خلف الكواليس وكتابة التعليمات البرمجية الخاصة بك.
مرحباً بك في لغة البرمجة المدمجة في إكسيل Visual Basic for Applications (VBA). يتيح لك تعلم VBA التفاعل مع إكسيل على مستوى أساسي، مما يحول جدول البيانات الثابت إلى تطبيق برمجي ديناميكي. في هذا البرنامج التعليمي، سنغطي المفاهيم الأساسية للغة VBA — المتغيرات (Variables)، والحلقات (Loops)، والشروط (Conditions) — وسنوجهك خطوة بخطوة لكتابة أول برنامج وظيفي لك.
قبل الغوص في كتابة التعليمات البرمجية، قد تتساءل عن سبب اهتمامك بتعلم لغة برمجة في حين أن إكسيل مليء بالفعل بالميزات القوية. إذا كنت في بداية الطريق، فإننا نوصي بشدة بإتقان الأساسيات أولاً. يمكنك مراجعة الدليل الشامل للمبتدئين في إكسيل 2025 للتأكد من أن أساسك متين.
ومع ذلك، بمجرد أن تصبح مرتاحاً مع أدوات إكسيل الأساسية، تقدم لك VBA مزايا مذهلة:
لكتابة برنامج إكسيل الأول الخاص بك، تحتاج إلى الوصول إلى علامة التبويب "المطور" (Developer)، والتي تكون مخفية افتراضياً.
سترى الآن علامة التبويب "المطور" على الشريط الخاص بك. تعتبر هذه العلامة مركز القيادة الخاص بك لكل ما يتعلق بالبرمجة. من هنا، انقر على زر Visual Basic (أو اضغط على Alt + F11 في لوحة المفاتيح) لفتح محرر الفيجوال بيسك (VBE). هذه هي البيئة التي ستكتب فيها وتعدل وتختبر التعليمات البرمجية الخاصة بك.
عند فتح محرر VBE لأول مرة، قد يبدو الأمر مخيفاً بعض الشيء، حيث يشبه إلى حد كبير البرمجيات من التسعينيات. لا تقلق؛ تحتاج فقط إلى التركيز على بعض المجالات الرئيسية:
للبدء في كتابة التعليمات البرمجية، يجب عليك إدراج وحدة نمطية (Module). انقر بزر الماوس الأيمن على المصنف الخاص بك في مستكشف المشروع، وحدد إدراج (Insert)، ثم انقر على وحدة نمطية (Module). ستظهر شاشة بيضاء فارغة. أنت الآن جاهز للبرمجة.
قبل أن نكتب البرنامج النهائي، يجب أن تفهم الركائز الثلاث للبرمجة الأساسية في VBA: المتغيرات (Variables)، والشروط (Conditions)، والحلقات (Loops).
اعتبر المتغير كحاوية تخزين مؤقتة في ذاكرة جهاز الكمبيوتر الخاص بك. أنت تستخدم المتغيرات للاحتفاظ بالبيانات التي قد تتغير أثناء تشغيل برنامجك. في VBA، من أفضل الممارسات "الإعلان" (Declare) عن المتغيرات الخاصة بك باستخدام تعليمة Dim (اختصاراً لـ Dimension)، لإخبار إكسيل بنوع البيانات التي ستحتويها هذه الحاوية.
| نوع البيانات | ماذا يحتوي | مثال على الإعلان |
|---|---|---|
| String | أحرف نصية. | Dim employeeName As String |
| Integer | أرقام صحيحة بين -32,768 و 32,767. | Dim rowCount As Integer |
| Long | أرقام صحيحة أكبر (استخدم هذا دائماً لحساب الصفوف في نسخ إكسيل الحديثة). | Dim lastRow As Long |
| Double | أرقام بكسور عشرية (مثل: العملات، والنسب المئوية). | Dim totalSales As Double |
| Boolean | قيم صواب أو خطأ (True أو False). | Dim isComplete As Boolean |
| Range | كائن يمثل خلية أو مجموعة من الخلايا. | Dim targetCell As Range |
يعمل VBA عن طريق معالجة "الكائنات" (Objects). يحتوي إكسيل على تسلسل هرمي صارم للكائنات التي يجب عليك التنقل خلالها لإخبار VBA بالضبط بما يجب تغييره. يتدفق التسلسل الهرمي من العام إلى الخاص:
Application > Workbook > Worksheet > Range
على سبيل المثال، إذا كنت ترغب في تغيير قيمة الخلية A1 في Sheet1، فإن تعليمة VBA ستبدو من الناحية الفنية هكذا: Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value = "Hello". لحسن الحظ، إذا كنت تعمل في المصنف النشط، فيمكنك اختصار هذا إلى Range("A1").Value = "Hello" فقط.
تماماً مثل دالة IF العادية، تتيح الشروط للتعليمات البرمجية اتخاذ قرارات بناءً على معايير محددة. إذا تم استيفاء شرط ما، يقوم الكود بتنفيذ أمر معين؛ وإذا لم يكن كذلك، فإنه ينفذ أمراً آخر.
If Range("A1").Value > 100 Then
Range("B1").Value = "Over Budget"
Else
Range("B1").Value = "On Track"
End If
تمثل الحلقات السحر الحقيقي في VBA. فهي تتيح لك تنفيذ نفس كتلة الكود مراراً وتكراراً دون الحاجة إلى كتابتها مئات المرات. الحلقة الأكثر شيوعاً هي حلقة For...Next.
Dim i As Integer
For i = 1 To 10
Cells(i, 1).Value = "Test Data"
Next i
في هذا المثال، سيتم تكرار الكود 10 مرات، لملء الخلايا من A1 إلى A10 (الصف i، العمود 1) بعبارة "Test Data".
دعونا نجمع كل هذه المفاهيم معاً لحل مشكلة من العالم الحقيقي. تخيل أن لديك قائمة بمبالغ المبيعات في العمود A، من الصف 2 نزولاً إلى الصف 20. تريد كتابة برنامج يمر على هذه الأرقام بحلقة تكرارية، ويتحقق مما إذا كان مبلغ المبيعات أكبر من 1000 دولار، وإذا كان كذلك، يكتب "High Performer" (أداء عالٍ) في العمود B ويميز الخلية باللون الأصفر.
اكتب التعليمات البرمجية التالية تماماً كما تظهر في الوحدة النمطية الفارغة الخاصة بك:
Sub AnalyzeSales()
' 1. Declare variables
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
' 2. Define the worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
' 3. Find the last row with data in Column A
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 4. Loop from row 2 to the last row
For i = 2 To lastRow
' 5. Apply the condition
If ws.Cells(i, 1).Value > 1000 Then
' Mark as high performer in Column B
ws.Cells(i, 2).Value = "High Performer"
' Highlight Column B cell yellow
ws.Cells(i, 2).Interior.Color = vbYellow
' Make the text bold
ws.Cells(i, 2).Font.Bold = True
Else
' If not over 1000, leave standard text
ws.Cells(i, 2).Value = "Standard"
End If
Next i
' 6. Alert the user the macro is done
MsgBox "Sales analysis is complete!", vbInformation
End Sub
Sub AnalyzeSales(): تعني كلمة "Sub" روتين فرعي (Subroutine). هذا ينشئ ماكرو جديداً باسم AnalyzeSales.') يتحول إلى اللون الأخضر. هذه تعليقات لك لتوضيح الكود؛ وجهاز الكمبيوتر يتجاهلها أثناء التشغيل.Dim للإعلان عن ورقة العمل، والصف الأخير (Long)، ومتغير العداد للحلقة الخاصة بنا (Long).Set ws = ...: نظراً لأن ورقة العمل تعتبر كائناً (Object)، فإننا نستخدم الكلمة "Set" لتعيينها إلى المتغير الخاص بنا.lastRow = ...: هذه حيلة كلاسيكية في VBA. ينتقل الكود إلى أسفل جدول البيانات (Rows.Count)، ويبحث لأعلى (xlUp) حتى يصطدم ببيانات، ثم يرجع رقم هذا الصف. هذا يجعل الكود الخاص بنا ديناميكياً، ويتكيف تلقائياً بغض النظر عن كمية البيانات المضافة!For i = 2 To lastRow: يبدأ الحلقة الخاصة بنا عند الصف 2 (لتخطي العناوين) وينتهي عند الصف الأخير أياً كان.ws.Cells(i, 1) إلى الخلية في الصف i، العمود 1 (العمود A). ونتحقق مما إذا كانت قيمتها أكبر من 1000.Value و Interior.Color و Font.Bold الخاصة به.Next i: يُخبر إكسيل بالعودة وزيادة i بمقدار 1 للتحقق من الصف التالي.MsgBox: إشارة مرئية ممتعة تؤدي إلى ظهور نافذة منبثقة لإعلام المستخدم بأن الكود قد انتهى من التنفيذ بنجاح.لتشغيل التعليمات البرمجية الخاصة بك، يمكنك النقر في أي مكان داخل سطري Sub و End Sub في محرر VBE والضغط على F5 في لوحة المفاتيح، أو النقر على مثلث "التشغيل" الأخضر في شريط الأدوات العلوي.
نصيحة للمحترفين لتصحيح الأخطاء: بدلاً من الضغط على F5، جرب الضغط على F8 بشكل متكرر. يتيح لك F8 التنقل عبر التعليمات البرمجية الخاصة بك سطراً بسطر. حيث يقوم بتمييز السطر النشط من الكود باللون الأصفر، مما يتيح لك مشاهدة ما يفعله إكسيل في الخلفية بالضبط. هذه هي الطريقة المثلى للتعلم واستكشاف الأخطاء وإصلاحها عندما لا يعمل البرنامج بشكل صحيح.
تهانينا! لقد قمت للتو بكتابة أول برنامج أتمتة لك. من خلال فهم المتغيرات، والحلقات، والشروط، تكون قد أطلقت العنان للأساسيات المطلوبة من أجل أتمتة التقارير باستخدام إكسيل VBA. مع الممارسة، يمكنك توسيع هذا المنطق ليمر عبر مصنفات بأكملها، ودمج البيانات من ملفات متعددة، وتنظيف مجموعات البيانات الفوضوية بنقرة واحدة.
أثناء مواصلة رحلتك، ضع في اعتبارك أن VBA ليست الأداة الوحيدة في مجموعة أدوات البيانات الحديثة. إذا كنت تفضل الواجهات المرئية بدلاً من كتابة الأكواد، فقد ترغب في استكشاف أتمتة إكسيل بدون VBA: أداة Power Automate.
علاوة على ذلك، إذا كانت كتابة التعليمات البرمجية من الصفر، أو فك تشفير أخطاء VBA، أو بناء صيغ متداخلة معقدة مثل INDEX و MATCH تبدو مرهقة، فلا تضطر إلى المعاناة بمفردك. يمكنك دائماً استخدام GPTExcel. ما عليك سوى وصف ما تحتاجه بلغة بسيطة (على سبيل المثال، "اكتب ماكرو VBA يمسح جميع الخلايا الصفراء في Sheet1")، وسيقوم المساعد الذكي بإنشاء الكود أو الصيغة الدقيقة على الفور.
ليست هناك حاجة لأي خبرة سابقة في البرمجة. تم تصميم VBA خصيصاً لتكون في متناول المتخصصين في الأعمال. إن فهم منطق إكسيل الأساسي، مثل كيفية عمل دالة IF، يمنحك انطلاقة رائعة في تعلم بناء جملة VBA.
بشكل افتراضي، لا يمكن لمصنفات إكسيل القياسية (.xlsx) تخزين وحدات الماكرو. عندما تكتب كود VBA، يجب عليك حفظ الملف الخاص بك كـ "مصنف Excel ممكن به وحدات ماكرو" (Excel Macro-Enabled Workbook) بصيغة (.xlsm). إذا حاولت حفظه كمصنف قياسي، فسيقوم إكسيل بتحذيرك بأنه سيتم إزالة التعليمات البرمجية الخاصة بك.
في حين أن مايكروسوفت تستثمر بكثافة في Power Automate القائم على السحابة وقامت مؤخراً بدمج Python في إكسيل، إلا أن VBA لن يذهب إلى أي مكان. تعتمد ملايين الشركات على وحدات ماكرو VBA القديمة. ولا تزال هي الطريقة الأسرع والأكثر موثوقية لتنفيذ الأتمتة المحلية على مستوى سطح المكتب داخل ملف إكسيل.
لجعل الماكرو الخاص بك سهل الاستخدام، انتقل إلى علامة التبويب "المطور" (Developer)، وانقر على إدراج (Insert)، وحدد أيقونة الزر (Button) ضمن عناصر تحكم النماذج (Form Controls). ارسم الزر على جدول البيانات الخاص بك. ستظهر لك على الفور رسالة تطالبك بتعيين ماكرو — حدد الماكرو الجديد الخاص بك من القائمة، وانقر على موافق (OK)، ويمكنك الآن تشغيل التعليمات البرمجية الخاصة بك بنقرة بسيطة.
اكتشف كيفية أتمتة مهام الإكسيل بدون الحاجة إلى VBA باستخدام Power Automate. تعلم إنشاء تدفقات تعمل بالأحداث، ومعالجة البيانات، والاتصال بتطبيقات أخرى.
اكتشف كيفية بناء أنظمة تقارير مؤتمتة في Excel باستخدام VBA. تعلم سحب البيانات، وإدراج الصيغ، وتنسيق الخلايا، وتصدير التقارير باستخدام تعليمات برمجية خطوة بخطوة.
ابدأ البرمجة في إكسيل باستخدام VBA. تعرف على علامة التبويب "المطور"، والمتغيرات، والحلقات، والشروط، وكيفية كتابة أول ماكرو لك من الصفر.