دليل شامل لبرمجة Excel VBA: كتابة الأكواد في جداول البيانات باستخدام Visual Basic

دقائق القراءة: 12

مقدمة إلى عالم برمجة Excel VBA

يُعد برنامج Excel أحد أبرز منتجات Microsoft وأكثرها استخدامًا على مستوى العالم. ففي عام 2016، صرح الرئيس التنفيذي لشركة Microsoft قائلاً: "تخيل عالمًا بدون Excel. هذا مستحيل بالنسبة لي". وبالفعل، يصعب تصور بيئة عمل حديثة بدون هذا البرنامج القوي. فمنذ عام 1996، عندما كان عدد مستخدميه يتجاوز 30 مليون مستخدم، تضخم هذا العدد ليصل اليوم إلى ما يقارب 750 مليون مستخدم حول العالم، وهو ما يعادل تقريبًا عدد سكان قارة أوروبا، ويمثل زيادة قدرها 25 ضعفًا عن عام 1996. نحن حقًا عائلة كبيرة ومترابطة من مستخدمي Excel!

في هذا الدليل الشامل، سنتعمق في فهم Visual Basic for Applications (VBA) وكيفية استخدامه لكتابة الأكواد البرمجية مباشرة داخل جداول بيانات Excel، مما يفتح آفاقًا جديدة للأتمتة والتحكم.

متطلبات البدء في تعلم VBA

لا يتطلب هذا الدليل أي خبرة برمجية مسبقة، مما يجعله مثاليًا للمبتدئين. ومع ذلك، ستحتاج إلى توفر بعض المتطلبات الأساسية لضمان تجربة تعليمية سلسة ومثمرة:

  • إلمام أساسي إلى متوسط ببرنامج Microsoft Excel: يجب أن تكون على دراية بكيفية التنقل في Excel واستخدام وظائفه الأساسية.
  • الوصول إلى Microsoft Excel: إذا كنت ترغب في تطبيق الأمثلة العملية الواردة في هذا المقال، فستحتاج إلى الوصول إلى برنامج Microsoft Excel. يُفضل استخدام أحدث إصدار (2019)، ولكن إصدارات Excel 2016 و Excel 2013 ستعمل بشكل جيد أيضًا.
  • الرغبة في التجربة والتعلم: الاستعداد لتجربة مفاهيم جديدة وتطبيقها عمليًا هو مفتاح النجاح.

أهداف التعلم من هذا المقال

بنهاية هذا المقال، ستكون قد اكتسبت فهمًا عميقًا وقدرة عملية على ما يلي:

  • معرفة ماهية VBA.
  • فهم الدوافع والأسباب التي تدفعك لاستخدام VBA.
  • كيفية إعداد بيئة Excel لبدء كتابة أكواد VBA.
  • القدرة على حل بعض المشكلات الواقعية باستخدام VBA.

مفاهيم أساسية في برمجة VBA

لتحقيق أقصى استفادة من هذا الدليل، من الضروري الإلمام بالمفاهيم التالية:

الكائنات (Objects)

يعتمد Excel على البرمجة كائنية التوجه (Object-Oriented Programming)، مما يعني أن كل عنصر فيه يُعتبر كائنًا. سواء كانت نافذة Excel نفسها، أو المصنف (workbook)، أو الورقة (sheet)، أو المخطط البياني (chart)، أو حتى الخلية الواحدة (cell)، فكلها كائنات. يتيح VBA للمستخدمين التلاعب بهذه الكائنات وتنفيذ إجراءات عليها داخل Excel. إذا لم تكن لديك خبرة سابقة في البرمجة كائنية التوجه، خذ لحظة لاستيعاب هذا المفهوم المحوري.

الإجراءات (Procedures)

الإجراء هو جزء من كود VBA، يُكتب في محرر Visual Basic Editor، ويقوم بإنجاز مهمة محددة. يُشار إليه أحيانًا باسم "الماكرو" (macro)، وسنتحدث عن الماكرو بتفصيل أكبر لاحقًا. هناك نوعان رئيسيان من الإجراءات:

  • الإجراءات الفرعية (Subroutines): هي مجموعة من عبارات VBA التي تنفذ إجراءً واحدًا أو أكثر دون إرجاع قيمة.
  • الدوال (Functions): هي مجموعة من عبارات VBA التي تنفذ إجراءً واحدًا أو أكثر وتُرجع قيمة أو أكثر.

ملاحظة: يمكن للدوال أن تعمل داخل الإجراءات الفرعية، وسنرى أمثلة على ذلك لاحقًا.

الماكرو (Macros)

إذا كنت قد قضيت وقتًا في استكشاف وظائف Excel المتقدمة، فمن المحتمل أنك واجهت مفهوم "الماكرو". يمكن لمستخدمي Excel تسجيل الماكروات، والتي تتكون من أوامر المستخدم أو ضغطات المفاتيح أو النقرات، ثم تشغيلها بسرعة فائقة لإنجاز المهام المتكررة. تقوم الماكروات المسجلة بتوليد كود VBA، والذي يمكنك فحصه وتعديله لاحقًا. من الممتع حقًا تسجيل ماكرو بسيط ثم النظر إلى كود VBA الناتج.

يرجى الأخذ في الاعتبار أنه في بعض الأحيان قد يكون تسجيل الماكرو أسهل وأسرع من كتابة إجراء VBA يدويًا. على سبيل المثال، لنفترض أنك تعمل في إدارة المشاريع وتحتاج مرة واحدة في الأسبوع إلى تحويل تقرير خام مُصدر من نظام إدارة المشاريع الخاص بك إلى تقرير منسق ونظيف لتقديمه للإدارة. تحتاج إلى تنسيق أسماء المشاريع التي تجاوزت الميزانية بخط أحمر غامق. يمكنك تسجيل هذه التغييرات التنسيقية كماكرو وتشغيله كلما احتجت إلى إجراء التغيير، مما يوفر عليك الكثير من الوقت والجهد.

ما هو Visual Basic for Applications (VBA)؟

Visual Basic for Applications، أو اختصارًا VBA، هي لغة برمجة طورتها Microsoft. تأتي هذه اللغة مدمجة مع كل برنامج في حزمة Microsoft Office دون أي تكلفة إضافية. تتيح VBA لمستخدمي Microsoft Office إنشاء برامج صغيرة تعمل ضمن برامج Microsoft Office نفسها.

تخيل VBA كفرن بيتزا متخصص داخل مطعم. Excel هو المطعم. يأتي المطبخ مع أجهزة تجارية قياسية، مثل الثلاجات الكبيرة، المواقد، والأفران العادية – هذه كلها ميزات Excel القياسية. ولكن ماذا لو أردت صنع بيتزا تُخبز على الحطب؟ لا يمكنك فعل ذلك في فرن خبز تجاري قياسي. هنا يأتي دور VBA، فهو فرن البيتزا المتخصص الذي يضيف قدرات فريدة.

صورة توضيحية لفرن بيتزا تقليدي يرمز لقوة VBA في Excel

شهي، أليس كذلك؟

لماذا نستخدم VBA في Excel؟

لأن بيتزا الحطب هي الأفضل! ولكن على محمل الجد، يقضي الكثير من الناس وقتًا طويلاً في Excel كجزء من وظائفهم. والوقت في Excel يتحرك بشكل مختلف أيضًا. فاعتمادًا على الظروف، قد تشعر 10 دقائق في Excel وكأنها أبدية إذا لم تتمكن من إنجاز ما تحتاجه، أو قد تمر 10 ساعات بسرعة كبيرة إذا كان كل شيء يسير على ما يرام. وهنا يجب أن تسأل نفسك: لماذا أقضي 10 ساعات في Excel؟

في بعض الأحيان، تكون تلك الأيام حتمية. ولكن إذا كنت تقضي 8-10 ساعات يوميًا في Excel تقوم بمهام متكررة، أو تكرر الكثير من العمليات نفسها، أو تحاول تنظيف البيانات بعد مستخدمين آخرين للملف، أو حتى تحديث ملفات أخرى بعد إجراء تغييرات على ملف Excel، فقد يكون إجراء VBA هو الحل الأمثل لك.

يجب أن تفكر في استخدام VBA إذا كنت بحاجة إلى:

  • أتمتة المهام المتكررة والمملة.
  • إنشاء طرق سهلة للمستخدمين للتفاعل مع جداول البيانات الخاصة بك.
  • معالجة كميات كبيرة من البيانات بكفاءة ودقة.

إعداد بيئة العمل لكتابة أكواد VBA في Excel

تفعيل تبويب المطور (Developer Tab)

لكتابة أكواد VBA، ستحتاج إلى إضافة تبويب "المطور" (Developer tab) إلى شريط الـ Ribbon، ليظهر الشريط بهذا الشكل:

صورة توضح مكان تبويب المطور (Developer Tab) في شريط Excel Ribbon

لإضافة تبويب المطور إلى شريط الـ Ribbon، اتبع الخطوات التالية:

  1. من تبويب "ملف" (File)، انتقل إلى "خيارات" (Options) > "تخصيص الشريط" (Customize Ribbon).
  2. ضمن "تخصيص الشريط" (Customize the Ribbon) وتحت "علامات التبويب الرئيسية" (Main Tabs)، حدد مربع الاختيار "المطور" (Developer).

بعد إظهار التبويب، يظل تبويب المطور مرئيًا، ما لم تقم بإلغاء تحديد مربع الاختيار أو تضطر إلى إعادة تثبيت Excel. لمزيد من المعلومات، راجع وثائق مساعدة Microsoft.

محرر VBA Editor

انتقل إلى تبويب "المطور" (Developer Tab)، ثم انقر على زر "Visual Basic". ستظهر نافذة جديدة – هذا هو محرر Visual Basic Editor. لأغراض هذا الدليل، تحتاج فقط إلى الإلمام بلوح "مستكشف المشروع" (Project Explorer pane) ولوح "الخصائص" (Properties pane).

صورة لواجهة محرر Visual Basic Editor مع تحديد Project Explorer و Properties pane

أمثلة عملية على برمجة Excel VBA

لنبدأ بإنشاء ملف تجريبي لنا. افتح ملف Excel جديد، ثم احفظه كمصنف يدعم الماكرو (.xlsm). بعد ذلك، حدد تبويب "المطور" وافتح محرر VBA Editor. الآن، دعنا ننطلق مع بعض الأمثلة السهلة لتبدأ في كتابة الأكواد في جداول البيانات باستخدام Visual Basic.

المثال الأول: عرض رسالة عند فتح مصنف Excel

في محرر VBA Editor، اختر Insert -> New Module. ثم اكتب الكود التالي في نافذة الوحدة (Module window) (لا تقم باللصق مباشرة، بل اكتبه لتعتاد على الكتابة):

Sub Auto_Open()
    MsgBox ("Welcome to the XYZ Workbook.")
End Sub

احفظ المصنف، أغلقه، ثم أعد فتحه. يجب أن تظهر لك هذه الرسالة:

صورة لرسالة ترحيب منبثقة (MsgBox) في Excel

رائع! كيف يتم ذلك؟ اعتمادًا على مدى إلمامك بالبرمجة، قد تكون لديك بعض التخمينات. الأمر ليس معقدًا بشكل خاص، ولكن هناك الكثير مما يحدث:

  • Sub (اختصار لـ Subroutine): تذكر من البداية أنها "مجموعة من عبارات VBA التي تنفذ إجراءً واحدًا أو أكثر".
  • Auto_Open: هذا هو الإجراء الفرعي المحدد. يقوم بتشغيل الكود الخاص بك تلقائيًا عند فتح ملف Excel – هذا هو الحدث الذي يؤدي إلى تشغيل الإجراء. ملاحظة: سيتم تشغيل Auto_Open فقط عند فتح المصنف يدويًا؛ لن يتم تشغيله إذا تم فتح المصنف عبر كود من مصنف آخر (Workbook_Open هو من يقوم بذلك). افتراضيًا، يكون وصول الإجراء الفرعي عامًا (public)، مما يعني أن أي وحدة أخرى يمكنها استخدام هذا الإجراء الفرعي. جميع الأمثلة في هذا الدليل ستكون إجراءات فرعية عامة. إذا لزم الأمر، يمكنك الإعلان عن الإجراءات الفرعية كخاصة (private) في بعض المواقف.
  • MsgBox: هذه دالة (function) – مجموعة من عبارات VBA التي تنفذ إجراءً واحدًا أو أكثر وتُرجع قيمة. القيمة المرجعة هي الرسالة "Welcome to the XYZ Workbook.". باختصار، هذا إجراء فرعي بسيط يحتوي على دالة.

متى يمكنني استخدام هذا؟

ربما لديك ملف مهم جدًا يتم الوصول إليه بشكل غير متكرر (على سبيل المثال، مرة واحدة كل ربع سنة)، ولكنه يتم تحديثه تلقائيًا يوميًا بواسطة إجراء VBA آخر. عندما يتم الوصول إليه، يكون ذلك من قبل العديد من الأشخاص في أقسام متعددة، في جميع أنحاء الشركة. المشكلة هي أن معظم الوقت عندما يصل المستخدمون إلى الملف، يكونون في حيرة من أمرهم بشأن الغرض من هذا الملف (سبب وجوده)، وكيف يتم تحديثه بهذه الكثرة، ومن يقوم بصيانته، وكيف يجب عليهم التفاعل معه. الموظفون الجدد دائمًا ما يكون لديهم الكثير من الأسئلة، وعليك الإجابة على هذه الأسئلة مرارًا وتكرارًا. الحل هو إنشاء رسالة مستخدم تحتوي على إجابة موجزة لكل من هذه الأسئلة المتكررة.

أمثلة واقعية:

  • استخدم دالة MsgBox لعرض رسالة عند وقوع أي حدث: إغلاق المستخدم لمصنف Excel، طباعة المستخدم، إضافة ورقة جديدة إلى المصنف، إلخ.
  • استخدم دالة MsgBox لعرض رسالة عندما يحتاج المستخدم إلى استيفاء شرط قبل إغلاق مصنف Excel.
  • استخدم دالة InputBox للحصول على معلومات من المستخدم.

المثال الثاني: السماح للمستخدم بتنفيذ إجراء آخر

في محرر VBA Editor، اختر Insert -> New Module. ثم اكتب الكود التالي في نافذة الوحدة:

Sub UserReportQuery()
    Dim UserInput As Long
    Dim Answer As Integer

    UserInput = vbYesNo
    Answer = MsgBox("Process the XYZ Report?", UserInput)

    If Answer = vbYes Then
        ProcessReport
    End If
End Sub

Sub ProcessReport()
    MsgBox ("Thanks for processing the XYZ Report.")
End Sub

احفظ المصنف وعد إلى تبويب "المطور" في Excel، ثم حدد خيار "زر" (Button). انقر على خلية وقم بتعيين ماكرو UserReportQuery للزر. الآن انقر على الزر. يجب أن تظهر هذه الرسالة:

صورة لرسالة منبثقة (MsgBox) تسأل المستخدم عن معالجة التقرير

انقر على "نعم" (Yes) أو اضغط على Enter. ستظهر هذه الرسالة:

صورة لرسالة شكر منبثقة (MsgBox) بعد معالجة التقرير

مرة أخرى، رائع! يرجى ملاحظة أن الإجراء الفرعي الثانوي، ProcessReport، يمكن أن يكون أي شيء. سأوضح المزيد من الاحتمالات في المثال رقم 3. ولكن أولاً…

كيف يتم ذلك؟

يبني هذا المثال على المثال السابق ويحتوي على عدد قليل من العناصر الجديدة. دعنا نراجع الأشياء الجديدة:

  • Dim UserInput As Long: Dim هو اختصار لـ "dimension" ويسمح لك بالإعلان عن أسماء المتغيرات. في هذه الحالة، UserInput هو اسم المتغير و Long هو نوع البيانات. بعبارة بسيطة، هذا السطر يعني "هذا متغير يسمى UserInput، وهو من نوع Long."
  • Dim Answer As Integer: يعلن عن متغير آخر يسمى Answer، بنوع بيانات Integer.
  • UserInput = vbYesNo: يعين قيمة للمتغير. في هذه الحالة، vbYesNo، الذي يعرض أزرار "نعم" و "لا". هناك العديد من أنواع الأزرار الأخرى.
  • Answer = MsgBox("Process the XYZ Report?", UserInput): يعين قيمة المتغير Answer لتكون دالة MsgBox والمتغير UserInput. نعم، متغير داخل متغير.
  • If Answer = vbYes Then ProcessReport: هذا هو "بيان If"، وهو بيان شرطي يسمح لنا بالقول إذا كان x صحيحًا، فافعل y. في هذه الحالة، إذا اختار المستخدم "نعم"، فقم بتنفيذ الإجراء الفرعي ProcessReport.

متى يمكنني استخدام هذا؟

يمكن استخدام هذا بعدة طرق. تتحدد قيمة وتعدد استخدامات هذه الوظيفة بشكل أكبر بما يفعله الإجراء الفرعي الثانوي. على سبيل المثال، ربما لديك ملف يستخدم لإنشاء 3 تقارير أسبوعية مختلفة. يتم تنسيق هذه التقارير بطرق مختلفة بشكل كبير. المشكلة هي أنه في كل مرة يحتاج فيها أحد هذه التقارير إلى الإنشاء، يفتح المستخدم الملف ويغير التنسيق والمخططات؛ وهكذا دواليك. يتم تحرير هذا الملف بشكل مكثف 3 مرات على الأقل في الأسبوع، ويستغرق 30 دقيقة على الأقل في كل مرة يتم تحريره. الحل هو إنشاء زر واحد لكل نوع تقرير، والذي يقوم تلقائيًا بإعادة تنسيق المكونات الضرورية للتقارير وإنشاء المخططات اللازمة.

أمثلة واقعية:

  • إنشاء مربع حوار للمستخدم لملء معلومات معينة تلقائيًا عبر أوراق متعددة.
  • استخدام دالة InputBox للحصول على معلومات من المستخدم، والتي يتم ملؤها بعد ذلك عبر أوراق متعددة.

المثال الثالث: إضافة أرقام إلى نطاق باستخدام حلقة For-Next

تعتبر حلقات For مفيدة جدًا إذا كنت بحاجة إلى أداء مهام متكررة على نطاق محدد من القيم – سواء كانت مصفوفات أو نطاقات خلايا. بعبارة بسيطة، تقول الحلقة "لكل x، افعل y."

في محرر VBA Editor، اختر Insert -> New Module. ثم اكتب الكود التالي في نافذة الوحدة:

Sub LoopExample()
    Dim X As Integer
    For X = 1 To 100
        Range("A" & X).Value = X
    Next X
End Sub

احفظ المصنف وعد إلى تبويب "المطور" في Excel، ثم حدد زر "الماكروات" (Macros). قم بتشغيل ماكرو LoopExample. يجب أن يحدث هذا:

صورة لعمود A في Excel يظهر أرقامًا متسلسلة من 1 إلى 100

وهكذا، حتى الصف المئة.

كيف يتم ذلك؟

  • Dim X As Integer: يعلن عن المتغير X كنوع بيانات Integer (عدد صحيح).
  • For X = 1 To 100: هذه هي بداية حلقة For. ببساطة، تخبر الحلقة أن تستمر في التكرار حتى يصبح X = 100. المتغير X هو العداد. ستستمر الحلقة في التنفيذ حتى يصبح X = 100، ثم تنفذ مرة أخيرة، ثم تتوقف.
  • Range("A" & X).Value = X: هذا يحدد نطاق الحلقة وما يجب وضعه في هذا النطاق. نظرًا لأن X = 1 في البداية، ستكون الخلية الأولى هي A1، وعند هذه النقطة ستضع الحلقة قيمة X في تلك الخلية.
  • Next X: هذا يخبر الحلقة بالتشغيل مرة أخرى (زيادة قيمة X والانتقال إلى التكرار التالي).

متى يمكنني استخدام هذا؟

تعد حلقة For-Next واحدة من أقوى وظائف VBA؛ وهناك العديد من حالات الاستخدام المحتملة. هذا مثال أكثر تعقيدًا سيتطلب طبقات متعددة من المنطق، ولكنه يوضح عالم الإمكانيات في حلقات For-Next. ربما لديك قائمة بجميع المنتجات المباعة في مخبزك في العمود A، ونوع المنتج في العمود B (كعك، دونات، أو مافن)، وتكلفة المكونات في العمود C، ومتوسط تكلفة السوق لكل نوع منتج في ورقة أخرى. تحتاج إلى معرفة ما يجب أن يكون سعر التجزئة لكل منتج. أنت تفكر في أنه يجب أن يكون تكلفة المكونات بالإضافة إلى 20%، ولكن أيضًا 1.2% أقل من متوسط السوق إذا أمكن. ستسمح لك حلقة For-Next بإجراء هذا النوع من الحسابات المعقدة.

أمثلة واقعية:

  • استخدام حلقة مع جملة If متداخلة لإضافة قيم محددة إلى مصفوفة منفصلة فقط إذا استوفت شروطًا معينة.
  • إجراء حسابات رياضية على كل قيمة في نطاق، على سبيل المثال، حساب رسوم إضافية وإضافتها إلى القيمة.
  • التكرار عبر كل حرف في سلسلة نصية واستخراج جميع الأرقام منها.
  • اختيار عدد عشوائي من القيم من مصفوفة.

الخلاصة التقنية

لقد استكشفنا في هذا الدليل الشامل أساسيات برمجة Excel VBA، بدءًا من فهم ماهيتها وأهميتها في أتمتة المهام اليومية، وصولًا إلى إعداد بيئة العمل وكتابة أمثلة عملية. تبين لنا أن VBA ليس مجرد إضافة لـ Excel، بل هو محرك قوي يحول جداول البيانات من مجرد أدوات لتخزين البيانات إلى منصات ديناميكية قادرة على تنفيذ عمليات معقدة بضغطة زر. من خلال الكائنات، الإجراءات، والماكروات، يمكن للمستخدمين – سواء كانوا مبتدئين أو خبراء – بناء حلول مخصصة توفر الوقت والجهد، وتزيد من دقة وكفاءة العمليات. إن القدرة على التفاعل مع المستخدمين، أتمتة التقارير، ومعالجة البيانات بكميات ضخمة باستخدام حلقات مثل For-Next، تجعل VBA أداة لا غنى عنها في ترسانة أي محترف يتعامل مع Excel بانتظام. استثمر وقتك في تعلم هذه المهارة، وستجد أنها تفتح لك أبوابًا جديدة للإنتاجية والابتكار في بيئة العمل.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *