JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

-->
الصفحة الرئيسية

كيف تتعلم VBA بسرعة

 

كيف تتعلم VBA بسرعة

 


يعد تعلم VBA مسعى بطيئًا ومحبطًا لمعظم الناس.يبدأ ذلك عادةً عندما يكون لديك مهمة Excel تعلم أنه يمكن تنفيذها آليًا بسهولة. لذلك قررت أن تتعلم VBA الذي سيمنحك المهارات اللازمة لإكمال هذه المهمة.

ما مدى صعوبته؟

تبدو الرحلة كالتالي:

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

بعد أيام وأسابيع لا تحصى من الإحباط، لقد أكملت طلبك ولكنه أقرب إلى وحش فرانكشتاين منه إلى ديفيد مايكل أنجلو.

أنت تتساءل لماذا يعد تعلم القيام بمهمة VBA القياسية أمرًا معقدًا للغاية ويستغرق وقتًا طويلاً.

بالطبع، غالبية الأشخاص الذين يبدأون في تعلم Excel VBA، لا يصلون حتى إلى خطوة وحش فرانكشتاين.

 

لقد استقالوا قبل فترة طويلة ومن يستطيع أن يلومهم؟

 

ماذا لو كانت هناك طريقة أفضل لتعلم VBA؟

حسنًا، هناك أنا على وشك أن أعرضه لكم.

تخيل أنك تريد تصفية البيانات التالية من خلال البحث عن الصفوف التي تحتوي على "Apple" ونسخ النتائج إلى ورقة عمل ثانية.


هذا هو الرمز:

Sub FilterData()

    ' Get the data

    Dim rg As Range

    Set rg = Sheet1.Range("A1").CurrentRegion

    ' Store the current output row

    Dim currentRow As Long

    currentRow = 0

    Dim i As Long

    ' Read through the data

    For i = 1 To rg.Rows.Count

   ' Check if Apple is found in column 1 of the current row

        If rg.Cells(i, 1) = "Apple" Then

            ' Copy the current row to sheet2

  Sheet2.Range("A1:B1").Offset(currentRow).Value = rg.Rows(i).Value

           currentRow = currentRow + 1

        End If 

    Next i

 End Sub

 

 

ربما تفكر "وماذا في ذلك؟ إنه مجرد رمز او كود VBA عادي".

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

دعونا نقسمها:

احصل على المدى Range

يستخدم التعليمة البرمجية التالية CurrentRegion لإرجاع كافة البيانات المجاورة للخلية A1. عندما نستخدم CurrentRegion، فإنه يقوم بإرجاع كافة البيانات حتى يصل إلى صف فارغ وعمود فارغ. يعد CurrentRegion مثاليًا عندما تكون بياناتنا عبارة عن مجموعة من السجلات المتسلسلة بدون صفوف فارغة.

Get the data

  Dim rg As Range

  Set rg = Sheet1.Range("A1").CurrentRegion

 

Sheet1 هو الاسم الرمزي لورقة العمل. يمكننا استخدام هذا للإشارة إلى أي ورقة عمل في المصنف الحالي.

  تتبع صف الإخراج

عندما نكتب بياناتنا في ورقة العمل، نحتاج إلى تتبع الصف الحالي. نحن نستخدم المتغير currentRow لهذا:

' Store the current output row

  Dim currentRow As Long

  currentRow = 0

 


اقرأ البيانات باستخدام حلقة For

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

تقوم الدالة rg.Rows.Count بإرجاع عدد الصفوف الموجودة في نطاق ما. لذلك نحن نقرأ من الصف 2 حتى الصف الأخير في النطاق.

' Read through the data

  Dim i As Long

  For i = 2 To rg.Rows.Count 

  Next i

 


تحقق من معايير الصف باستخدام If

بعد ذلك، نريد تحديد ما إذا كان الصف يطابق معاييرنا. هذا إذا كان يحتوي على النص "Apple" في العمود 1.

نحن نستخدم عبارة If بسيطة لهذا الغرض. إذا تم تقييم الشرط الموجود في العبارة على أنه صحيح، فسيتم تنفيذ التعليمات البرمجية الموجودة بين عبارات If وEndIf

If rg.Cells(i, 1) = "Apple" Then

   ' Perform action

 End If

 

دعونا نلقي نظرة على rg.Cells(i,1) لأن هذا مهم.

 

rg هو نطاق البيانات الخاص بنا. ستعيد وظيفة الخلايا خلية إذا قمنا بتوفير صف وعمود.

 

على سبيل المثال:

rg.Cells(1,1) هي الخلية العلوية اليسرى في نطاقنا، أي الصف 1 العمود 1.

rg.Cells(2,1) هي الخلية الموجودة في الصف 2، العمود 1.

rg.Cells(2,2) هي الخلية الموجودة في الصف 2، العمود 2.

 

نحن نستخدم i كمتغير للحلقة (For i = 2 To rg.Rows.Count). هذا يعني أنه سيكون 2 في المرة الأولى التي يتم فيها تشغيل الحلقة، و3 في المرة التالية، وهكذا حتى ننتهي من جميع الصفوف الموجودة في النطاق.

 

 

انسخ الصف الحالي إلى الورقة2

الجزء الأخير من الكود هو نسخ الصف:

Sheet2.Range("A1:B1").Offset(currentRow).Value = rg.Rows(i).Value

currentRow = currentRow + 1

 

يقوم السطر الأول بنسخ الصف بينما يقوم السطر الثاني بإضافة صف إلى متغير الصف الحالي.

 

تقوم Sheet2.Range("A1:B1") بإرجاع النطاق A1:B1 على الورقة2. نستخدم الإزاحة لحساب الصفوف من هذا الصف.

 

لذا:

Sheet2.Range("A1:B1").Offset(CurrentRow) حيث يكون currentRow هو 0 سوف يُرجع النطاق A1:B1

Sheet2.Range("A1:B1").Offset(CurrentRow) حيث يكون currentRow هو 1 سيُرجع النطاق A2:B2

Sheet2.Range("A1:B1").Offset(CurrentRow) حيث يكون currentRow هو 2 سوف يُرجع النطاق A3:B3

وما إلى ذلك وهلم جرا.

 

تمامًا مثلما يُرجع rg.Cells() خلية، يُرجع rg.Rows(i) نطاق الصف. نحن ببساطة نقدم رقم الصف.

على سبيل المثال

تقوم rg.Rows(1) بإرجاع النطاق من A1 إلى B1

تقوم rg.Rows(2) بإرجاع النطاق من A2 إلى B2

تقوم rg.Rows(3) بإرجاع النطاق من A3 إلى B3

 

سيؤدي تعيين نطاق إلى آخر إلى نسخ البيانات من النطاق الموجود على يمين المتساويين إلى النطاق الموجود على يسار المتساويين

على سبيل المثال

DestinationRange.Value = sourceRange.Value

 

خاتمة

إذن، لديك بعض من أهم التعليمات البرمجية في VBA.

كما قلت، إذا تمكنت من فهم هذا الكود وجميع المفاهيم المستخدمة، فقد اتخذت خطوة كبيرة للأمام باستخدام VBA.

إذا كنت ترغب في المزيد من التعلم مثل هذا، فاحرص على متابعة موقع عالم الاوفيس فى المقالات القادمة

الاسمبريد إلكترونيرسالة