كيف تتعلم 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.
إذا كنت ترغب في المزيد من التعلم مثل هذا، فاحرص على متابعة
موقع عالم الاوفيس فى المقالات القادمة