كيفية استخدام النطاق والخلايا في vba؟

مقدمة إلى النطاق والخلايا في VBA

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

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

  • خلية واحدة.
  • مجموعة من الخلايا
  • صف أو عمود
  • نطاق ثلاثي الأبعاد

يعد RANGE OBJECT جزءًا من التسلسل الهرمي لكائنات Excel: التطبيق ➜ المصنفات ➜ أوراق العمل ➜ النطاق وفي أي مكان آخر داخل ورقة العمل. لذا، إذا كتبت رمزًا للإشارة إلى كائن RANGE، فسيكون الأمر كما يلي:

 Application.Workbook(“Workbook-Name”).Worksheets(“Sheet-Name”).Range

من خلال الإشارة إلى خلية أو نطاق من الخلايا، يمكنك القيام بما يلي:

  • يمكنك قراءة القيمة.
  • يمكنك إدخال قيمة هناك.
  • ويمكنك إجراء تغييرات على التنسيق.

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

  • ملكية الشاطئ
  • خاصية الخلية
  • خاصية الأوفست

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

اذا هيا بنا نبدأ.

ملكية الشاطئ

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

 expression.range(address)

التعبير هنا هو متغير يمثل كائن VBA. لذا، إذا كنت بحاجة إلى الرجوع إلى الخلية A1، فسيكون سطر التعليمات البرمجية الذي تحتاج إلى كتابته هو:

 Application.Workbook(“Book1”).Worksheets(“Sheet1”).Range(“A1”)

يخبر الكود أعلاه VBA أنك تشير إلى الخلية A1 الموجودة في ورقة العمل “Sheet1” والمصنف “Book1”.

ملاحظة: عندما تقوم بإدخال عنوان خلية في كائن النطاق، تأكد من إحاطته بعلامات اقتباس مزدوجة. ولكن هنا شيء يجب أن نفهمه. نظرًا لأنك تستخدم VBA في Excel، فليست هناك حاجة لاستخدام كلمة “Application”. لذلك سيكون الرمز:

 Workbook(“Book1”).Worksheets(“Sheet1”).Range(“A1”)

وإذا كنت في Book1، فيمكنك تقليل التعليمات البرمجية الخاصة بك بشكل أكبر:

 Worksheets(“Sheet1”).Range(“A1”)

ولكن، إذا كنت موجودًا بالفعل في ورقة العمل “الورقة1″، فيمكنك تقليل التعليمات البرمجية الخاصة بك بشكل أكبر ويمكنك فقط استخدام:

 Range(“A1”)

لنفترض الآن أنك تريد الإشارة إلى نطاق كامل من الخلايا (أي خلايا متعددة)، فستحتاج إلى كتابة الكود على النحو التالي:

 Range("A1:A5")

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

 Range("Sales Discount")

إذا كنت تريد الإشارة إلى نطاق غير مستمر، فأنت بحاجة إلى القيام بشيء مثل هذا:

 Range("A1:B5,D5:G10")

وإذا كنت تريد الإشارة إلى صف أو عمود بأكمله، فستحتاج إلى إدخال رمز مثل الرمز أدناه:

 Range("1:1") Range("A:A")

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

1. حدد خلية وقم بتنشيطها

إذا كنت تريد تحديد خلية، يمكنك استخدام النطاق. حدد الطريقة. لنفترض أنك إذا كنت تريد تحديد الخلية A5، فكل ما عليك فعله هو تحديد النطاق ثم إضافة “.Select” بعد ذلك.

 Range(“A1”).Select

يخبر هذا الرمز VBA بتحديد الخلية A5 وإذا كنت تريد تحديد نطاق من الخلايا، فما عليك سوى الرجوع إلى هذا النطاق وإضافة “.Select” بعد ذلك.

 Range(“A1:A5”).Select

هناك أيضًا طريقة أخرى يمكنك استخدامها لتنشيط الخلية.

 Range(“A1”).Activate

هنا عليك أن تتذكر أنه لا يمكنك تنشيط سوى خلية واحدة في كل مرة. حتى إذا قمت بتحديد نطاق باستخدام طريقة “.Activate ، فسيتم تحديد هذا النطاق ولكن الخلية النشطة ستكون الخلية الأولى في النطاق.

2. أدخل قيمة في الخلية

باستخدام خاصية النطاق، يمكنك إدخال قيمة في خلية أو نطاق من الخلايا. دعونا نفهم كيف يعمل باستخدام مثال بسيط:

 Range("A1").Value = "Exceladvisor"

في المثال أعلاه، قمت بتحديد A1 كنطاق وبعد ذلك قمت بإضافة ” .Value ” الذي يخبر VBA بالوصول إلى خاصية القيمة للخلية.

والشيء التالي الذي لديك هو علامة المساواة ثم القيمة التي تريد إدخالها (يجب عليك استخدام علامات الاقتباس المزدوجة إذا قمت بإدخال قيمة نصية). بالنسبة للرقم، الكود سيكون كالتالي:

 Range("A1").Value = 9988

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

 Range("A1:A5").Value = "Exceladvisor"

وهنا هو الكود إذا كنت تشير إلى النطاق غير المستمر.

 Range("A1:A5 , E2:E3").Value = "Exceladvisor"

3. انسخ والصق خلية/نطاق

باستخدام خاصية النطاق، يمكنك استخدام الأسلوب “.نسخ” لنسخ خلية ثم لصقها في الخلية الوجهة. لنفترض أنك بحاجة إلى نسخ الخلية A5، فسيكون الكود المقابل:

 Range("A5").Copy

عند تشغيل هذا الرمز، فإنه يقوم فقط بنسخ الخلية A5، ولكن الخطوة التالية هي لصق هذه الخلية المنسوخة في الخلية الوجهة. للقيام بذلك، يجب عليك إضافة الكلمة الأساسية الوجهة بعدها وتتبعها الخلية التي تريد لصقها فيها. لذلك، إذا أردت نسخ الخلية A1 ثم لصقها في الخلية E5، فسيكون الكود كما يلي:

 Range("A1").Copy Destination:=Range("E5")

وبالمثل، إذا كنت تتعامل مع نطاق من الخلايا المتعددة، فسيبدو الرمز كما يلي:

 Range("A1:A5").Copy Destination:=Range("E5:E9")

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

 Range("A1:A5").Copy Destination:=Range("B1")

عند تشغيل التعليمات البرمجية أعلاه، يقوم VBA بنسخ النطاق A1:A5 ولصقه في B1:B5 على الرغم من أنك ذكرت B1 فقط باعتباره النطاق الوجهة.

نصيحة: تمامًا مثل طريقة “.Copy”، يمكنك استخدام طريقة “.Cut” لقص خلية، ثم ببساطة استخدم وجهة للصقها.

4. استخدم خاصية الخط مع خاصية النطاق

باستخدام خاصية النطاق، يمكنك الوصول إلى خاصية الخط للخلية مما يساعدك على تغيير كافة إعدادات الخط. يوجد إجمالي 18 خاصية مختلفة للخط يمكنك الوصول إليها. لنفترض أنك تريد جعل النص غامقًا في الخلية A1، فسيكون الرمز:

 Range("A1").Font.Bold = True

يخبر هذا الرمز VBA بالوصول إلى خاصية BOLD للخط الموجود في النطاق A1 وقمت بتعيين هذه الخاصية على TRUE. لنفترض الآن أنك تريد تطبيق خط يتوسطه خط على الخلية A1، فسيكون هذا الرمز الزمني:

كما قلت، هناك إجمالي 18 خاصية مختلفة يمكنك استخدامها، لذا تأكد من التحقق منها جميعًا لمعرفة أي منها مفيد لك.

5. مسح التنسيق من الخلية

باستخدام طريقة “.ClearFormats”، يمكنك مسح تنسيق خلية أو نطاق من الخلايا فقط. كل ما عليك فعله هو إضافة “.ClearFormat” بعد تحديد النطاق، كما هو موضح أدناه:

 Range("A1").ClearFormats

عند تشغيل الكود أعلاه، فإنه يمسح كل التنسيق من الخلية A1 وإذا كنت تريد القيام بذلك لنطاق كامل، فأنت تعرف ما يجب فعله، أليس كذلك؟

 Range("A1:A5").ClearFormats

الآن سيقوم الكود أعلاه ببساطة بإزالة التنسيق من النطاق A1 إلى A5.

خاصية الخلية

بالإضافة إلى خاصية النطاق، يمكنك استخدام خاصية “الخلايا” للإشارة إلى خلية أو نطاق من الخلايا في ورقة العمل الخاصة بك. في خاصية الخلية، بدلاً من استخدام مرجع الخلية، تحتاج إلى إدخال رقم العمود ورقم الصف للخلية.

 expression.Cells(Row_Number, Column_Number)

التعبير هنا هو كائن VBA وRow_Number هو رقم صف الخلية وColumn_Number هو عمود الخلية. لذلك إذا كنت تريد الرجوع إلى الخلية A5، فيمكنك استخدام الكود أدناه:

 Cells(5,1)

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

سيشير الكود أدناه أيضًا إلى الخلية A5:

 Cells(5,"A")

وفي VBA لتحديده، ما عليك سوى إضافة “.Select” في النهاية.

 Cells(5,1).Select

سيحدد الكود أعلاه الخلية A5 الموجودة في الصف الخامس والعمود الأول من ورقة العمل.

خاصية الأوفست

إذا كنت تريد اللعب بشكل جيد مع النطاقات في VBA، فأنت بحاجة إلى معرفة كيفية استخدام خاصية OFFSET. ومن المفيد الإشارة إلى خلية تبعد عدداً معيناً من الصفوف والأعمدة عن خلية أخرى.

لنفترض أن خليتك النشطة هي B5 الآن وتريد الانتقال إلى الخلية التي تقع على بعد 3 أعمدة إلى اليمين وصف واحد لأسفل من B5، فيمكنك القيام بهذا SHIFT. فيما يلي بناء الجملة الذي يجب عليك استخدامه للإزاحة:

 expression.Offset (RowOffset, ColumnOffset)
  • RowOffset: في هذه الوسيطة، تحتاج إلى تحديد رقم سيخبر VBA بعدد الصفوف التي تريد المرور خلالها. يحدد الرقم الموجب خطًا لأسفل ويحدد الرقم السالب خطًا لأعلى.
  • ColumnOffset : في هذه الوسيطة، تحتاج إلى تحديد رقم سيخبر VBA بعدد الأعمدة التي تريد التنقل فيها. يحدد الرقم الموجب العمود الأيمن ويحدد الرقم السالب العمود الأيسر.

لنكتب رمزًا بسيطًا على سبيل المثال الذي ناقشناه أعلاه.

  1. أولا وقبل كل شيء، تحتاج إلى تحديد النطاق الذي تريد التنقل منه ومن ثم كتابة الكود أدناه:
    define-the-range
  2. بعد ذلك، اكتب “.Offset” وأدخل قوسين مفتوحين، كما هو موضح أدناه:
    type-offset
  3. بعد ذلك، يتعين عليك إدخال رقم الصف ثم رقم العمود الذي تريد التنقل فيه.
    enter-row-and-column number
  4. في النهاية تحتاج إلى إضافة “.Select” لإخبار VBA بتحديد الخلية التي تريد الانتقال إليها.
    add-select-to-tell-vba

لذا، عند تشغيل هذا الرمز، فإنه يحدد الخلية الموجودة في صف واحد لأسفل و3 أعمدة على يمين الخلية B5.

تغيير حجم النطاق باستخدام OFFSET

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

 Range("B5").Offset(1, 3).Select

يوجهك الكود أعلاه إلى الخلية E6، ولنفترض الآن أنك بحاجة إلى تحديد نطاق الخلايا الذي يتكون من خمسة أعمدة وثلاثة صفوف من E6. إذن ما عليك فعله هو بعد استخدام OFFSET، استخدم خاصية تغيير الحجم عن طريق إضافة “.Resize”.

 Range("B5").Offset(1, 3).Resize

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

 Range("B5").Offset(1, 3).Resize(3,5)

في النهاية، أضف “.Select” لإخبار VBA بتحديد النطاق، وعندما تقوم بتشغيل هذا الرمز، فإنه سيحدد النطاق.

 Range("B5").Offset(1, 3).Resize(3, 5).Select

لذلك عند تشغيل هذا الكود فإنه سيحدد النطاق من E6 إلى I8.

 Range("A1").Font.Strikethrough = True

اضف تعليق

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