الدليل الكامل للعمل مع الخلايا range فى برمجة اكسيل، صورة بها شخص يعمل على برنامج اكسييل

الدليل الكامل للعمل مع الخلايا range فى برمجة اكسيل

الدليل الكامل للعمل مع الخلايا range فى برمجة اكسيل الجزء الأول

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

1. خلية واحدة.

2. صف أو عمود من الخلايا.

3. مجموعة مختارة من الخلايا، بغض النظر عما إذا كانت متجاورة أم لا.

4. مجموعة 3-D.

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

في برمجة Excel ، لماذا أحتاج أحيانا إلى الإعلان عن متغير من النوع Range؟

في برمجة Excel ، قد تحتاج إلى تعريف متغير من النوع Range للاحتفاظ بمرجع إلى نطاق من الخلايا في ورقة عمل.

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

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

Dim priceRange As Range

Set priceRange = Range(“C2:C10”)

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

priceRange.NumberFormat = “$#,##0.00”

total = WorksheetFunction.Sum(priceRange)

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

بشكل عام ، يمكن أن يساعدك الإعلان عن متغير من النوع Range في كتابة تعليمات برمجية أنظف وأكثر قابلية للقراءة وخالية من الأخطاء عند العمل باستخدام أوراق عمل Excel.

ولكن هناك سؤال أخر هام جدا .

لماذا أحتاج إلى الإعلان عن متغير من النوع Range عندما يمكنني الحصول على جميع سمات وطرق كائن Range من خاصية Range؟

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

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

ما هو كائن النطاق في Excel VBA

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

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

فيما يلي مثال على كيفية إنشاء كائن نطاق:

Dim myRange As Range

Set myRange = Range(“A1:B5”)

يؤدي هذا إلى إنشاء كائن نطاق باسم “myRange” يشير إلى الخلايا الموجودة في النطاق A1:B5. بمجرد أن يكون لديك كائن Range ، يمكنك استخدامه للوصول إلى البيانات الموجودة في تلك الخلايا ومعالجتها.

بشكل عام ، يعد كائن النطاق أداة قوية للعمل مع بيانات Excel في VBA ، وهو عنصر أساسي في العديد من برامج VBA التي تتفاعل مع أوراق عمل Excel.

الاشارة الي كائن نطاق
تذكير بمراجع كائن VBA المؤهلة بالكامل

Excel’s VBA Range object reference

لذلك ، فإن البنية الأساسية التي يجب استخدامها للإشارة إلى كائن نطاق VBA في Excel هي التالية:

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

1. استخدم اسم كائن VBA. في هذه الحالة ، يكون بناء الجملة “Collection_name (“Object_name”)”.

2. استخدم رقم فهرس بدلا من اسم الكائن. إذا اخترت هذا الخيار ، فإن بناء الجملة الأساسي هو “Collection_name (Index_number)”.

لاحظ كيف ، في الطريقة الأولى ، يجب عليك استخدام علامات الاقتباس (“”) داخل الأقواس. إذا كنت تستخدم الطريقة الثانية ، فلن تضطر إلى إحاطة Index_number بعلامات اقتباس.

إذا قمت بإنشاء المرجع باستخدام اسم كائن VBA ، يكون المرجع كما يلي: 1

Application.Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range

بينما إذا قررت استخدام رقم فهرس ، فإن المرجع هو ما يلي:

Application.Workbooks(1).Worksheets(1).Range

Simplifying Fully Qualified Object References
يمكنك تبسيط مراجع الكائنات المؤهلة بالكامل بالاعتماد على كائنات VBA الافتراضية هذه. لا أقترح عموما القيام بذلك بشكل أعمى ، لأنه ينطوي على بعض المخاطر.

هناك 2 أنواع رئيسية من الكائنات الافتراضية التي يمكنك استخدامها لأغراض تبسيط مراجع الكائنات المؤهلة بالكامل:

1. كائن التطبيق.

2. كائنات المصنف وورقة العمل النشطة.

يفترض دائما كائن التطبيق. بمعنى آخر، يفترض Visual Basic for Applications دائما أنك تعمل مع Excel نفسه. لذلك، يمكنك تبسيط مراجع الكائن المؤهلة بالكامل عن طريق حذف التطبيق. على سبيل المثال ، في الحالات التي أستخدمها كمثال أعلاه ، تكون المراجع المبسطة كما يلي:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range

Workbooks(1).Worksheets(1).Range

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

هنايجب التنوية الي امر مهم هناك إصداراين من خاصية النطاق: الخاصية Worksheet.Range والخاصية Range.Range. المنطق وراء كل منهما هو نفسه إلى حد كبير. الفرق الرئيسي هو الكائن الذي يتم تطبيقه:

1. في حالة الخاصية Worksheet.Range ، يتم تطبيق خاصية النطاق على ورقة عمل.

2. عند استخدام الخاصية Range.Range ، يتم تطبيق النطاق على نطاق.

بمعنى آخر ، يمكن تطبيق خاصية النطاق على 2 أنواع مختلفة من الكائنات:

1. كائنات ورقة العمل.

2. كائنات النطاق.

، يتم تطبيق خاصية النطاق على كائن ورقة عمل.

ومع ذلك، يمكنك أيضا تطبيق خاصية النطاق على كائن نطاق. إذا قمت بذلك، يتغير الكائن الذي تم إرجاعه بواسطة خاصية النطاق.

والسبب في ذلك ، كما أوضحت Microsoft ، هو أن الخاصية Range.Range تعمل فيما يتعلق بالكائن الذي يتم تطبيقه عليه. لذلك، إذا قمت بتطبيق الخاصية Range.Range تعمل الخاصية بالنسبة لكائن النطاق وليس ورقة العمل.

هذا يعني أنه يمكنك تطبيق الخاصية Range.Range لأغراض الرجوع إلى نطاق فيما يتعلق بنطاق آخر. كما فى المثال التالي

Selection.Range(“A1”)

، لنفترض أن التحديد الحالي هو نطاق الخلايا بين C3 و D5 (الخلايا C3 و C4 و C5 و D3 و D4 و D5) من ورقة عمل Excel النشطة. هذا التحديد هو كائن نطاق.

نظرا لأن كائن التحديد Selection يمثل المنطقة المحددة الحالية في المستند، فإن المرجع أعلاه يرجع الخلية C3. لا ترجع الخلية A1 ، كمرجع سابق مؤهل بالكامل.

 

Example of referring to single cell with VBA Range.Range property

سبب السلوك المختلف هنا هو أن خاصية النطاق تتصرف بالنسبة للكائن الذي يتم تطبيقه عليه. بمعنى آخر ، عندما يتم تطبيق خاصية النطاق على كائن نطاق ، فإنها تتصرف بالنسبة إلى هذا النطاق (بشكل أكثر دقة ، الزاوية العلوية اليسرى). عند تطبيقه على كائن ورقة عمل، فإنه يتصرف بالنسبة إلى ورقة العمل.اي انة يعتبر النطاق الان هو ورقة العمل الكاملة بالنسبة لة ويتصرف على هذا الاساس فعندما اشرت الي الخلية الاولي a1 فى النطاق ستكون هي الخلية الاولى فى النطاق c3 الان وليست ورقة العمل الافتراضية فى اكسيل

بناء الجملة الأساسي لخاصية النطاق
1. العنصر #1: الكلمة الأساسية “النطاق”range.

2. العنصر #2: الأقواس التي تتبع الكلمة الأساسية.

3. العنصر #3: نطاق الخلايا ذي الصلة

4. العنصر #4: علامات التنصيص. عادة ما تكون Cell_Range التي تشير إليها ضمن علامات الاقتباس (“”).

دعونا نلقي نظرة على بعض خصائصه…

عند تسمية نطاق ، يمكنك استخدام أي من عوامل التشغيل الثلاثة التالية:

1. القولون (:)): هذا هو المشغل الذي تستخدمه لإعداد المصفوفات. في سياق الإشارة إلى نطاقات الخلايا، يمكنك استخدامها للإشارة إلى أعمدة أو صفوف كاملة أو نطاقات من الخلايا المتجاورة أو نطاقات من الخلايا غير المتجاورة.

2. الفضاءأو المسافة ( ): هذا هو عامل التقاطع. كما هو موضح أدناه ، يمكنك استخدام عامل التقاطع لأغراض الإشارة إلى الخلايا الشائعة في نطاقات منفصلة 2.

3. فاصلة (،): هذا هو عامل الاتحاد ، والذي يمكنك استخدامه لدمج عدة نطاقات. كما هو موضح في المثال أدناه ، يمكنك استخدام هذا المشغل عند العمل مع نطاقات من الخلايا غير المتجاورة.

Syntax #1: (“Cell1”)

هذا هو الحد الأدنى الذي يجب عليك تضمينه لغرض تحديد نطاق خلية واحدة فقط

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”)

Example of how to refer to single cell with Worksheet.Range property

Syntax #2: (“Cell1: Cell2”)

1. “الخلية 1″ هي الخلية الموجودة في الزاوية العلوية اليسرى من النطاق.

2. ” الخلية 2″ هي الخلية الموجودة في الزاوية اليمنى السفلية من النطاق.

، المرجع المؤهل بالكامل هو كما يلي:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:B5”)

يمكن الاشارة الي نفس النطاق بالطريقة التالية

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”,”B5”)

 

يستخدم السطر الأول من نطاق التعليمات البرمجية (“A1: B5”) النقطتين (:) عامل التشغيل لتحديد نطاق الخلايا. وهذا ما يسمى مرجع النطاق. يسمح لك عامل النقطتين بتحديد نطاق من الخلايا باستخدام التنسيق start cell:end cell. على سبيل المثال ، يشير “A1: B5” إلى نطاق الخلايا من A1 إلى B5.

يستخدم السطر الثاني من نطاق التعليمات البرمجية (“A1” ، “B5”) مرجعين منفصلين للخلايا لتحديد نطاق الخلايا. وهذا ما يسمى مرجع الخلية. في هذه الحالة ، يتم استدعاء طريقة Range بوسيطتين: مرجع خلية البداية “A1” ومرجع خلية النهاية “B5”.

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

كيفية الرجوع إلى نطاق من الخلايا غير المتجاورة باستخدام الخاصية Worksheet.Range

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:B5,D1:D5”)

كيفية الرجوع إلى تقاطع نطاقين باستخدام خاصية Worksheet.Range
المشغل الثالث ، space ( ) ، مفيد عندما تريد الرجوع إلى تقاطع نطاقات 2. والسبب في ذلك واضح:

عامل المسافة ( ) هو ، على وجه التحديد ، عامل التقاطع.

1. الخلايا من B1 إلى B10

2. الخلايا من A5 إلى C5

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“B1:B10 A5:C5”)

يقوم هذا المرجع بإرجاع الخلايا المتقاطعة بين النطاقين ، الخلية الوحيدة المشتركة بين كلا النطاقين هي B5.

كيفية الرجوع إلى عمود أو صف بأكمله باستخدام الخاصية Worksheet.Range
1. Row: “Range(“Row_Number:Row_Number”)”.الاشارة الي صف

2. Column: “Range(“Column_Letter:Column_Letter”)”.الاشارة الي عمود

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“1:1”) الصف الاول

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A:A”)العمود الاول

كيفية الرجوع إلى الخلايا المدمجة باستخدام الخاصية Worksheet.Range
1. يتصرف الماكرو بشكل مختلف عما كنت تتوقعه.

2. مشاكل في الفرز.

أول شيء يجب مراعاته عند الإشارة إلى الخلايا المدمجة هو أنه يمكنك الرجوع إليها بأي من الطرق التالية:

1. إذا أشرت إلى النطاق المدمج بالكامل ، “النطاق (“A1: C5″)”. في هذه الحالة ، يكون المرجع المؤهل بالكامل هو “Application.Workbooks (“Book1.xlsm”). أوراق العمل (“الورقة 1”). النطاق (“A1: C5″)”.

2. إذا كنت تشير فقط إلى الخلية العلوية اليسرى من النطاق المدمج ، “النطاق (“A1″)”. المرجع المؤهل بالكامل بموجب هذه الطريقة هو “Application.Workbooks (“Book1.xlsm”). أوراق العمل (“الورقة 1”). النطاق (“A1″)”.

في كلتا الحالتين ، تكون النتيجة هي نفسها.

كيفية الرجوع إلى كائن نطاق VBA باستخدام اختصارات لخاصية النطاق
يمكن جعل المراجع إلى كائن نطاق VBA الخاص ب Excel باستخدام خاصية النطاق أقصر باستخدام الأقواس المربعة ([ ]).

1. لا تستخدم الكلمة الرئيسية “range”.

2. قم بإحاطة وسيطات الخصائص ذات الصلة بأقواس مربعة ([ ]) بدلا من استخدام الأقواس وعلامات الاقتباس المزدوجة (“”).

الاشارة الي خلية واحدة باستخدام الاختصارات

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[A1]

الاختصار #3: الإشارة إلى مجموعة من الخلايا المتجاورة

الامثلة المستخدمة هي نفس الخلايا المستخدمة بالاعلى حتي تضح الفكرة .

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[A1:B5]

الاختصار #4: الإشارة إلى مجموعة من الخلايا غير المتجاورة

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[A1:B5,D1:D5]

اختصار # 5: الإشارة إلى تقاطع نطاقات 2

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[B1:B10 A5:C5]

الاختصار #2: الإشارة إلى صف أو عمود بأكمله

3. Row: “[Row_Number:Row_Number]”.

4. Column: “[Column_Letter:Column_Letter]”.

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[1:1]

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).[A:A]

كيفية الإشارة إلى كائن نطاق  باستخدام خاصية cells

توجد خاصية Worksheet.Cells وخاصية Range.Cells. يمكنك استخدام خاصية الخلايا لإرجاع كائن نطاق يمثل الخلايا.

1. عند استخدام الخاصية Worksheet.Cells، فأنت تقوم بتطبيق الخاصية على كائن ورقة عمل.

2. عند استخدام الخاصية Range.Cells يتم تطبيق هذه الخاصية على كائن نطاق.

بناء جملة خاصية cells

بناء الجملة الأساسي لخاصية الخلايا هو ”

(Row_Number ، Column_Number)cells

1. “Row_Number” و “Column_Number” هما رقمي كل من الصف والعمود.كما يمكن استخدام الاحرف للاشارة الي العمود ولكن عند استخدام الاحرف يجب وضع الحرف بين علامات تنصيص .

كيفية الرجوع إلى خلية واحدة باستخدام الخاصية Worksheet.Cells.

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Cells(1, 1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Cells(1, “A”)

كما يمكن استخدام هذة الطريقة للاشارة الي خلية واحده فقط

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Cells(16385)

ولكن السؤال الرئيسي ، إذن ، هو كيف يحدد Visual Basic للتطبيقات فهرس الخلية؟

لهذه الأغراض ، يتم تعيين رقم لكل خلية. يتم ترقيم الخلايا من اليسار إلى اليمين ومن أعلى إلى أسفل. وبعبارة أخرى:

1. يبدأ الترقيم بالصف الأول:

1. يتم تعيين الرقم 1 للخلية A1.

2. يتم تعيين الخلية B1 الرقم 2.

3. يتم تعيين الرقم 3 للخلية C1.

4. تستمر العملية مع كل خلية من خلايا التسلسل الفرعي ، حتى …

5. يتم تعيين الخلية XFD1 (الخلية الأخيرة في الصف الأول) الرقم 16,384.

6. يتم تعيين الرقم 32,768 للخلية XFD2 (الخلية الأخيرة في الصف الثاني).

2. تستمر العملية مع الصف الثالث.

3. ثم الصف الرابع.

4. وهكذا ، حتى …

5. يصل إلى الصف 1,048,576.

6. و…

7. يتم تعيين الخلية الأخيرة في ورقة عمل Excel (الخلية XFD1048676) الرقم 17,179,869,184.

تمنحك لقطة الشاشة التالية فكرة عن كيفية سير تعيين الأرقام هذا:

 

كما يمكن تطبيق هذة الطريقة ايضا على خلية واحدة ضمن نطاق حسب مرجع النطاق كما ذكرنا سابقا

Selection.Cells(1, 1)

يرجع هذا المرجع الخلية C3 نفسها.

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:B10”).Cells(6)

هذا يشير الي الخلية d5 فى هذا النطاق كما يمكن ان يستمر ويمد النطاق اذا اشرت الي خلية خارج النطاق

كيفية الإشارة إلى نطاق الخلايا باستخدام Range And Cells

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

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(Cells(1, 1),Cells(5, 2))

هذه التقنية مفيدة (على سبيل المثال) عند استخدام المتغيرات لتحديد معلمات خاصية الخلايا. يمكن أن يحدث هذا ، على سبيل المثال ، عند التكرار.

كيفية الرجوع إلى كافة الخلايا في ورقة عمل باستخدام خاصية Worksheet.Cells

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Cells

لا تسمح لك هذه الطريقة بالرجوع إلى خلية واحدة.

لماذا يجب أن تتعلم استخدام خاصية الخلايا للإشارة إلى كائن نطاق في Excel

الخاصية cells تسمح لك باستخدام المتغيرات كوسيطات عند تنفيذ أعمال معينة مع Visual Basic للتطبيقات. الحالة الشائعة لمثل هذا هي التكرار

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

في هذه الحالة بالذات ، يتم تحديد النطاق من خلال البدء بنطاق محدد معين. ثم تصل الخاصية Range.Item إلى خلية معينة في هذا النطاق، استنادا إلى الوسيطات التي تستخدمها.

نلقي نظرة على بعض الأمثلة.

For example, the following statements all return cell A1 of Sheet1 in Book1.xlsm:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(1, 1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(1, “A”)

ومع ذلك ، لنفترض أنك تريد الرجوع إلى الخلية B8. لهذه الأغراض ، يمكنك استخدام أي من المراجع التالية:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(30)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(8, 2)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells.Item(8, “B”)

Excel’s VBA Range object: Single cell with Item property

جزء من أهمية الخاصية Range.Item هو أنها تسمح لك بالإشارة إلى خلية معينة فيما يتعلق بنطاق.

هذا المراجع المختصرة التالية:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells(30)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells(8, 2)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:D10”).Cells(8, “B”)

 

كيفية الإشارة إلى نطاق باستخدام الخاصية Range.Offset

تماما مثل الخصائص الموضحة سابقا، تقوم الخاصية Range.Offset أيضا بإرجاع كائن نطاق.

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

1. نقل نطاق من الخلايا إلى موقع مختلف داخل ورقة عمل.

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

3. الاستخدم كنقطة بداية لتحديد نطاق جديد من الخلايا استنادا إلى موقع معين أو مسافة نسبية.

4. قم بإنشاء نطاق ديناميكي يضبط حجمه تلقائيا استنادا إلى عدد الصفوف أو الأعمدة في جدول أو نطاق.

5. استخدمه مع خصائص النطاق الأخرى، مثل End أو Find، لتحديد نطاق معين من الخلايا.

بشكل عام ، تعد خاصية Offset أداة قوية تتيح لك معالجة نطاقات الخلايا في برمجة Excel VBA بدقة ومرونة.

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

1. نطاق أساسي ، والذي سيكون أساس الإزاحة.

2. عدد الصفوف التي سيتم من خلالها إزاحة النطاق الأساسي.

3. عدد الأعمدة التي سيتم من خلالها إزاحة النطاق الأساسي.

خاصية الإزاحة والتي تمكنك من الإشارة الى خلية او نطاق بناءا على موقع خليه وتستخدم معاملان هما .

Offset(عدد الصفوف,عدد الأعمده )

كيفية الإشارة إلى خلية واحدة باستخدام الخاصية Range.Offset

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(RowOffset:=1, ColumnOffset:=1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(1, 1)

ومن هناك ، يتحرك VBA صفا واحدا لأسفل وعمودا واحدا إلى اليمين. لذلك ، يشير المرجع أعلاه إلى الخلية B2.

على سبيل المثال، تشير العبارات التالية إلى خلية صف واحد أسفل الخلية A1. بمعنى آخر ، يشير إلى الخلية A2:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(RowOffset:=1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(1)

وبالمثل ، تشير العبارات التالية إلى الخلية B1 ، وهي عمود واحد على يمين الخلية A1:

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(ColumnOffset:=1)

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1”).Offset(, 1)

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

ActiveCell.Offset(1, 1)

في هذه الحالة ، بدلا من استخدام “النطاق” ، أستخدم خاصية Application.ActiveCell. ترجع هذه الخاصية كائن نطاق يمثل الخلية النشطة الحالية.لذلك، Visual Basic للتطبيقات بإرجاع خلية 1 صف أدناه وعمود 1 إلى يمين الخلية النشطة الحالية. على سبيل المثال، إذا كانت الخلية النشطة الحالية هي A1، ترجع العبارة أعلاه الخلية B2.

تنشئ الخاصية Range.Offset خطأ إذا تم استخدامها لمحاولة إرجاع خلية غير موجودة. قد يحدث هذا، على سبيل المثال، إذا كانت الخلية النشطة الحالية A1 واستخدام المرجع التالي:

ActiveCell.Offset(-1, -1)

تطلب العبارة أعلاه من Visual Basic for Applications إرجاع الخلية التي هي صف واحد أعلاه وعمود واحد إلى يسار الخلية A1. نظرا لعدم وجود مثل هذه الخلية ، يتم إظهار رسالة خطأ.

كيفية الإشارة إلى نطاق من الخلايا باستخدام Range.Offset Property

Workbooks(“Book1.xlsm”).Worksheets(“Sheet1”).Range(“A1:B5”).Offset(3, 3)

1. يحرك النطاق 3 خلايا إلى اليمين و 3 خلايا لأسفل.

 

Sheet2.Range(“a1”).Offset(5, 5).Value = “on”

السطر البرمجي السابق يقول من الخلية a1 قم بعمل ازاحه مقدارها خمس صفوف لاسفل وخمس اعمده لليمين .واكتب بها on .

 

وفى الصورة التالية تمثل شرح لطريقة نقل الخلية E5 والتي تعتبر صفر صفوف وصفر اعمدة ثم شرح لكيفية عمل الازاحة فى النطاق المحيط بها من كل الجهات حتي تتضح الصورة فى الذهن اكثر

وهنا مثال أخر

 

 

والان سنعيد كتابة on في الخلية a1 بهذا الشكل .

Sheet2.Range(“f6”).Offset(-5,- 5).Value = “on”

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

Sheet2.Range(“a1”).Offset(5, 0).Value = “on”

Sheet2.Range(“a1”).Offset(0, 5).Value = “on”

Sheet2.Range(“a1”).Offset(, 5).Value = “on”

لماذا في بعض الأحيان في Excel a عند تعيين خاصية الإزاحة للجدول ، يستغرق الأمر سطرا فارغا في أسفل النطاق الجديد

عند استخدام خاصية الإزاحة لنقل نطاق كامل او جدول Excel (ListObject)، يمكن أن يؤدي ذلك أحيانا إلى إضافة صف فارغ إضافي في أسفل النطاق الجديد.

لذلك عندما نجعل الإزاحة لنطاق range النطاق الجديد ، خذ سطرا فارغا آخر بسبب الخلية المرجعية refrence

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

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

على سبيل المثال، إذا كان لديك نطاق A1:B3 وكنت تستخدم خاصية الإزاحة مع إزاحة صف 1 وإزاحة عمود 2، فسيكون النطاق الجديد C2:D4، والذي يتضمن صفا وعمودا فارغين إضافيين بسبب الخلية المرجعية الأصلية التي يتم تضمينها. إذا كنت تريد استبعاد الصف والعمود الفارغين ، فيمكنك استخدام خاصية تغيير الحجم لتقليص النطاق بمقدار 1 صف و 2 أعمدة:

Dim originalRange As Range
Set originalRange = Range(“A1:B3”)
Dim newRange As Range
Set newRange = originalRange.Offset(1, 2).Resize(2, 2)

سيكون النطاق الجديد D2: E3 ، والذي لا يتضمن الخلية المرجعية الأصلية أو أي صفوف أو أعمدة فارغة إضافية.

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

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

resize property

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

1. ضبط حجم نطاق الخلايا عن طريق إضافة صفوف أو أعمدة أو إزالتها.

2. إنشاء نطاق أصغر من الخلايا من نطاق أكبر.

3. توسيع نطاق من الخلايا لتضمين صفوف أو أعمدة إضافية.

4. تستخدم مع خصائص أو طرق النطاق الأخرى، مثل الإزاحة أو التقاطع، لتحديد نطاق معين من الخلايا أو لمعالجة حجم نطاق حسب الحاجة.

5. إنشاء نطاق ديناميكي يضبط حجمه بناء على صيغة أو شرط معين.

Range.Resize(RowSize, ColumnSize)

تحدد الوسيطة RowSize عدد الصفوف المراد إضافتها أو إزالتها من النطاق، بينما تحدد الوسيطة ColumnSize عدد الأعمدة المراد إضافتها أو إزالتها.

فيما يلي بعض الأمثلة حول كيفية استخدام خاصية تغيير الحجم :

1. توسيع نطاق ليشمل صفوفا أو أعمدة إضافية:

Range(“A1”).Resize(2, 2).Value = “Hello”

سيؤدي هذا إلى توسيع النطاق بدءا من الخلية A1 إلى نطاق 2×2 وتعيين قيمة كل خلية على “Hello”.

1. تقليص نطاق لاستبعاد صفوف أو أعمدة:

Range(“A1:C3”).Resize(2, 2).Value = “”

سيؤدي هذا إلى تقليص النطاق بدءا من الخلية A1: C3 إلى نطاق 2×2 ومسح قيمة كل خلية.

1. نسخ ولصق نطاق:

Range(“A1:B5”).Resize(5, 2).Copy Range(“C1”)

سيؤدي هذا إلى نسخ نطاق 2×5 بدءا من الخلية A1: B5 ، وتغيير حجمه إلى نطاق 2×10 ، ولصقه بدءا من الخلية C1.

1. تنسيق نطاق:

Range(“A1”).Resize(5, 2).Font.Bold = True

سيؤدي هذا إلى تعيين خط النطاق بدءا من الخلية A1 إلى نطاق 5×2 إلى bold

قم بتوسيع النطاق ليشمل صفين إضافيين وعمود إضافي واحد

Range(“A1”).Resize(2, 1)

تعاقد النطاق لاستبعاد صف واحد وعمودين

Range(“A1:C3”).Resize(-1, -2)

‘ قم بتوسيع النطاق ليشمل ثلاثة أعمدة إضافية

Range(“A1”).Resize(, 3)

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

مثال على تغيير الحجم لنسخ الجدول بدون رأس الجدول والعمود الأول

افترض أن لديك جدولا في النطاق A1: D5 ، حيث يحتوي الصف الأول على رؤوس ويحتوي العمود الأول على تسميات صفوف. لنسخ الجدول بدون صف الرأس والعمود الأول إلى موقع جديد، يمكنك استخدام التعليمة البرمجية التالية:

Dim srcRange As Range

Set srcRange = Range(“A2:D5”)

Dim destRange As Range

Set destRange = Range(“F2”)

Dim numRows As Long

numRows = srcRange.Rows.Count – 1

Dim numCols As Long

numCols = srcRange.Columns.Count – 1

destRange.Resize(numRows, numCols).Value = srcRange.Offset(1, 1).Resize(numRows, numCols).Value

في هذا المثال، نحدد أولا نطاق المصدر srcRange ليكون A2:D5، والذي يستثني صف الرأس والعمود الأول. نحدد أيضا نطاق الوجهة destRange ليكون F2 ، حيث نريد نسخ الجدول إليه.

بعد ذلك ، نحسب حجم الجدول بدون صف الرأس والعمود الأول بطرح 1 من عدد الصفوف والأعمدة في النطاق المصدر.

أخيرا ، نستخدم خصائص Resize و Offset لنسخ الجدول بدون صف الرأس والعمود الأول إلى النطاق الوجهة. يتم استخدام خاصية الإزاحة لإزاحة نطاق المصدر صفا واحدا لأسفل وعمودا واحدا إلى اليمين، لاستبعاد صف الرأس والعمود الأول. يتم استخدام خاصية تغيير الحجم لضبط حجم النطاق المصدر لمطابقة حجم النطاق الوجهة، ويتم استخدام خاصية القيمة لنسخ القيم من النطاق المصدر إلى النطاق الوجهة.

CurrentRegion

Property CurrentRegion

ترجع الخاصية CurrentRegion لكائن النطاق في VBA كائن نطاق يمثل نطاق الخلايا المتجاورة الذي يحتوي على الخلية الأصلية أو نطاق الخلايا. الخاصية CurrentRegion مفيدة لتحديد أو العمل مع البيانات المحاطة بخلايا فارغة.

فيما يلي مثال على كيفية استخدام الخاصية CurrentRegion في VBA:

Sub CurrentRegionExample()

حدد الخلية A1 وقم بتوسيع التحديد إلى المنطقة الحالية
Range(“A1”).Select
Selection.CurrentRegion.Select

‘ الحصول على عنوان المنطقة الحالية
Dim currentRegionAddress As String
currentRegionAddress = Selection.CurrentRegion.Address

‘ Print the address of the current region to the Immediate Window
Debug.Print “The current region is ” & currentRegionAddress

End Sub

في هذا المثال، يتم استخدام الخاصية CurrentRegion لتحديد نطاق الخلايا المتجاورة التي تحتوي على الخلية “A1”.

يتم استخدام خاصية العنوان للحصول على عنوان المنطقة الحالية ، والذي يتم تخزينه في متغير currentRegionAddress. وأخيرا، تتم طباعة عنوان المنطقة الحالية إلى الإطار الفوري باستخدام عبارة Debug.Print.

فيما يلي بعض الأمثلة الإضافية حول كيفية استخدام خاصية CurrentRegion في VBA:

مثال 1: حساب عدد الصفوف في المنطقة الحالية

Sub CountRowsInCurrentRegion()

‘ Select the cell A1 and expand the selection to the current region
Range(“A1”).Select
Selection.CurrentRegion.Select

‘ Get the number of rows in the current region
Dim numRows As Long
numRows = Selection.CurrentRegion.Rows.Count

‘ Print the number of rows to the Immediate Window
Debug.Print “The current region has ” & numRows & ” rows.”

End Sub

في هذا المثال، يتم استخدام الخاصية CurrentRegion لتحديد نطاق الخلايا المتجاورة التي تحتوي على الخلية “A1”. ثم يتم استرداد عدد الصفوف في المنطقة الحالية باستخدام الخاصية Rows.Count لكائن النطاق. يتم تخزين عدد الصفوف في متغير numRows وتتم طباعته إلى الإطار الفوري باستخدام عبارة Debug.Print.

مثال 2: جمع القيم في المنطقة الحالية

Sub SumValuesInCurrentRegion()

‘ Select the cell A1 and expand the selection to the current region
Range(“A1”).Select
Selection.CurrentRegion.Select

‘ Calculate the sum of the values in the current region
Dim sumValue As Double
sumValue = WorksheetFunction.Sum(Selection.CurrentRegion)

‘ Print the sum to the Immediate Window
Debug.Print “The sum of the values in the current region is ” & sumValue

End Sub

في هذا المثال، يتم استخدام الخاصية CurrentRegion لتحديد نطاق الخلايا المتجاورة التي تحتوي على الخلية “A1”. ثم يتم حساب مجموع القيم في المنطقة الحالية باستخدام الأسلوب WorksheetFunction.Sum. يتم تخزين المجموع في المتغير sumValue ثم تتم طباعته إلى الإطار الفوري باستخدام عبارة Debug.Print.

the areas property of range

ترجع خاصية areas لكائن النطاق في VBA كائن areas ، والذي يمثل مجموعة من كائنات النطاق غير المتجاورة وغير المتداخلة. بمعنى آخر ، يمثل كائن المناطق مجموعة من المناطق المستطيلة المنفصلة غير المتجاورة مع بعضها البعض وتشكل معا النطاق بأكمله.

خاصية `Areas` في Excel VBA هي خاصية مهمة تُستخدم عند التعامل مع نطاقات متعددة غير متجاورة في ورقة عمل. فيما يلي شرح مفصل لهذه الخاصية:

### ما هي خاصية Areas؟

1. **التعريف:** خاصية `Areas` جزء من كائن `Range` في Excel VBA وتُستخدم للإشارة إلى المناطق المختلفة داخل نطاق محدد. كل “منطقة” تعبر عن جزء من النطاق الذي لا يتجاور مع أجزاء أخرى.

2. **الاستخدام:** عندما يتم تحديد أكثر من مجموعة من الخلايا غير المتجاورة (على سبيل المثال، باستخدام مفتاح `Ctrl` أثناء النقر على الخلايا)، يُمكن الإشارة إلى كل من هذه المجموعات باستخدام خاصية `Areas`.

Dim rng As Range

Set rng = Range(“A1:B2, D4:E5”) ‘ نطاق يحتوي على منطقتين غير متجاورتين

Dim area As Range

For Each area In rng.Areas

‘ هنا يمكنك أداء عمليات مختلفة مع كل منطقة

‘ على سبيل المثال، طباعة عناوين الخلايا لكل منطقة

Debug.Print area.Address

Next area

في المثال أعلاه، يتم تحديد نطاق يحتوي على منطقتين (`A1:B2` و `D4:E5`). بعد ذلك، يتم تكرار جميع مناطق النطاق باستخدام حلقة `For Each`. يمكنك استخدام هذه الطريقة لتنفيذ عمليات مختلفة على كل منطقة من مناطق النطاق بشكل منفصل.

– يجب الانتباه إلى أن كل “منطقة” داخل النطاق تعتبر كائن `Range` مستقل. وهذا يعني أنه يمكن تطبيق جميع خصائص وطرق كائن `Range` على كل منطقة على حدة.

– يمكن استخدام خاصية `Areas` في العديد من التطبيقات المفيدة، مثل تحليل البيانات في نطاقات محددة من ورقة العمل أو تنفيذ عمليات حسابية معقدة تتطلب التعامل مع أجزاء متفرقة من البيانات.

the end property of range

يتم استخدام الخاصية End لكائن Range في VBA لتحديد نهاية نطاق متجاور من الخلايا في اتجاه محدد من خلية البداية.

تأخذ الخاصية End وسيطة واحدة ، والتي تحدد اتجاه البحث من خلية البداية. يمكن أن تكون الوسيطة أحد الثوابت التالية:

1. xlUp: البحث لأعلى من خلية البداية حتى تتم مصادفة خلية فارغة.

1. xlDown: البحث لأسفل من خلية البداية حتى تتم مصادفة خلية فارغة.

2. xlToLeft: عمليات البحث لليسار من خلية البداية حتى تتم مصادفة خلية فارغة.

3. xlToRight: يبحث مباشرة من خلية البداية حتى تتم مصادفة خلية فارغة.

نعم ، تتوافق خاصية End في VBA مع مفتاح “End” على لوحة المفاتيح مع الاسهم ، وهو اختصار في برنامج Excel للانتقال إلى آخر خلية بها بيانات في صف أو عمود.

في VBA ، غالبا ما يتم استخدام خاصية End مع خصائص وطرق أخرى للإشارة إلى النطاقات ديناميكيا بناء على محتويات ورقة العمل. على سبيل المثال، يمكنك استخدام الخاصية End مع خاصية الإزاحة للإشارة إلى نطاق يبدأ من خلية معينة وينتهي عند آخر خلية بها بيانات في عمود أو صف:

Range(“A1”).End(xlDown).Offset(0, 2).Select

تحدد هذه التعليمة البرمجية الخلية التي تكون علي بعد عمودين على يمين آخر خلية بها بيانات في العمود A، بدءا من الخلية A1 والانتقال لأسفل حتى يتم الوصول إلى آخر خلية بها بيانات في العمود. هذا يعادل الضغط على “end” ثم مفتاح السهم الأيمن مرتين في برنامج Excel.بهذه الطريقة ، يمكن استخدام خاصية End في VBA لتكرار العديد من اختصارات لوحة المفاتيح وميزات التنقل في برنامج Excel ، مما يسمح لك بتشغيل ألي للمهام المعقدة والعمل بكفاءة أكبر مع مجموعات البيانات الكبيرة.

Sub EndExample()

‘ حدد الخلية A1 وقم بتوسيع التحديد إلى آخر خلية بها بيانات في العمود A
Range(“A1”).Select
Selection.End(xlDown).Select
او يمكن ان تكتب مباشرة Range(“A1”). End(xlDown).Select

‘ اطبع عنوان آخر خلية بها بيانات في العمود A إلى النافذة الفورية
Debug.Print “The last non-blank cell in column A is ” & Selection.Address

End Sub

في هذا المثال، يتم استخدام كائن التحديد لتحديد الخلية A1. ثم يتم استخدام الخاصية End(xlDown) لتوسيع التحديد إلى آخر خلية بها بيانات في العمود A. تحدد الوسيطة xlDown أنه يجب إجراء البحث لأسفل من خلية البداية A1 حتى تتم مصادفة خلية فارغة.

ثم يتم استخدام الخاصية Selection.Address للحصول على عنوان آخر خلية بها بيانات في العمود A، والتي يتم طباعتها إلى الإطار الفوري.

إليك مثال آخر يوضح كيفية استخدام الخاصية End لتحديد آخر خلية بها بيانات في صف واحد:

Sub EndExample2()

Range(“A1”).Select
Selection.End(xlToRight).Select

Debug.Print “The last non-blank cell in row 1 is ” & Selection.Address

End Sub

في هذا المثال، يتم استخدام select لتحديد الخلية A1. ثم يتم استخدام الخاصية End (xlToRight) لتوسيع التحديد إلى آخر خلية بها بيانات في الصف 1. تحدد الوسيطة xlToRight أنه يجب إجراء البحث باتجاه اليمين من خلية البداية A1 حتى تتم مصادفة خلية فارغة.

ثم يتم استخدام الخاصية Selection.Address للحصول على عنوان آخر خلية بها بيانات في الصف 1، والتي يتم طباعتها إلى الإطار الفوري.

استخدام اخر للخاصية end للحصول على رقم اخر صف يحتوي على بيانات وأخر عمود كذلك وهي من الممارسات المتكررة والشائعة فى برمجة اكسيل والتي يجب الإلمام بها جيدا

فيما يلي مثال يوضح كيفية استخدام الخاصية End للبحث عن الصف والعمود الأخيرين من نطاق يحتوي على بيانات، ثم حدد هذا النطاق:

Sub EndExample3()

Dim StartCell As Range
Set StartCell = Range(“A1”)

الحصول على اخر صف
Dim LastRow As Long
LastRow = StartCell.End(xlDown).Row

الحصول على أخر عمود
Dim LastColumn As Long
LastColumn = StartCell.End(xlToRight).Column

تحديد نطاق ديناميكى يتحوي على كل البيانات
Dim DataRange As Range
Set DataRange = Range(StartCell, Cells(LastRow, LastColumn))

DataRange.Select

End Sub

في هذا المثال، يتم تعريف متغير StartCell على أنه الخلية A1. ثم يتم استخدام الخاصية End مع الوسيطتين xlDown و xlToRight للعثور على الصف والعمود الأخيرين مع البيانات ، على التوالي. يتم تخزين أرقام الصفوف والأعمدة في متغيرات LastRow و LastColumn.

ثم يتم تعريف متغير DataRange على أنه كائن نطاق يحتوي على جميع البيانات من خلية البداية إلى آخر خلية بها بيانات في كلا الاتجاهين. وأخيرا، يتم تحديد DataRange.

لاحظ أن هذا المثال يفترض عدم وجود صفوف أو أعمدة فارغة ضمن نطاق البيانات.

فيما يلي مثال يوضح كيفية استخدام الخاصية End لتحديد عمود من البيانات:

Sub EndExample4()

Dim StartCell As Range
Set StartCell = Range(“A1”)

Dim LastRow As Long
LastRow = StartCell.End(xlDown).Row

Dim ColumnRange As Range
Set ColumnRange = Range(StartCell, Cells(LastRow, StartCell.Column))
ColumnRange.Select

End Sub

في هذا المثال، يتم تعريف متغير StartCell على أنه الخلية A1. ثم يتم استخدام الخاصية End مع الوسيطة xlDown للعثور على الصف الأخير مع البيانات في العمود. يتم تخزين رقم الصف في متغير LastRow.

ثم يتم تعريف متغير ColumnRange على أنه كائن نطاق يحتوي على عمود البيانات بالكامل، من خلية البداية إلى آخر خلية بها بيانات في العمود. أخيرا ، يتم تحديد ColumnRange.

Sub EndExample6()
Dim StartCell As Range
Dim RowRange As Range
Dim ColRange As Range

Set StartCell = Range(“B3”)

Set RowRange = Range(StartCell, StartCell.End(xlToRight))

Set ColRange = Range(StartCell, StartCell.End(xlDown))

RowRange.Select
ColRange.Select
End Sub

في هذا المثال، يتم تعيين خلية البداية إلى B3. ثم يتم استخدام الخاصية End مع الوسيطة xlToRight للبحث عن الخلية الأخيرة في الصف الذي يحتوي على خلية البداية. يتم تخزين كائن النطاق الناتج في متغير RowRange.

وبالمثل، يتم استخدام الخاصية End مع الوسيطة xlDown للبحث عن الخلية الأخيرة في العمود الذي يحتوي على خلية البداية. يتم تخزين كائن النطاق الناتج في متغير ColRange.

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

يمكن دمج استخدام خاصية النهاية لتحديد الصفوف والأعمدة في سطر التعليمات البرمجية

من الممكن استخدام خاصية End لتحديد الصفوف والأعمدة في سطر واحد من التعليمات البرمجية. إليك مثال:

Sub EndExample7()
Range(Range(“B3”), Range(“B3”).End(xlToRight)).Select ‘ Select row
Range(Range(“B3”), Range(“B3”).End(xlDown)).Select ‘ Select column
End Sub

في هذا المثال، يتم استخدام الخاصية End مرتين – مرة واحدة مع الوسيطة xlToRight للبحث عن الخلية الأخيرة في الصف الذي يحتوي على B3، ومرة واحدة مع الوسيطة xlDown للبحث عن الخلية الأخيرة في العمود الذي يحتوي على B3.

يتم استخدام Range لإنشاء كائنين منفصلين للنطاق – أحدهما يبدأ من B3 ويمتد إلى الخلية الأخيرة في الصف ، والآخر يبدأ من B3 ويمتد إلى الخلية الأخيرة في العمود.

أخيرا ، يتم select على كل كائن نطاق ، والذي يحدد الصف بأكمله والعمود بأكمله الذي يحتوي على B3 ، على التوالي.

يتبع الجزء الثاني

اترك تعليقاً

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