اذهب الي المحتوي
أوفيسنا

دورة كاملة في المصفوفات Arrays من البداية إلى ما شاء الله (الحلقة الأولى)


الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

إخواني وأحبابي في الله ..

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

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

سنبدأ في تناول الموضوع جزء جزء لكي نستطيع أن نهضم سوياً الموضوع ، ونستفيد من هذا الموضوع أقصى استفادة ممكنة

نبطل رغي ونبدأ في المهم

يعني ايه مصفوفة Array ؟

قبل ما نتعرف على المصفوفة .. عرفنا في دورة افتح الباب وادخل لعالم البرمجة "المتغير Variable" وقلنا إن المتغير وظيفته إنه بيخزن قيمة (سواء القيمة دي نص أو رقم أو تاريخ أو أي نوع من أنواع البيانات) .. بس المتغير بيخزن قيمة واحدة

مثال : لو عايز أخزن القيمة النصية Officena Forums في متغير كنا بنعمل ايه ..؟!

بنعلن عن المتغير من النوع النصي في سطر وفي السطر التالي بنقوم بتعيين قيمة للمتغير ..

Sub StringVariable()
    Dim str As String
    str = "Officena Forums"
End Sub

طيب عشان نتأكد إن شغلنا مضبوط عايزين نعرف المتغير دا تم تخزين القيمة النصية فيه ولا لا ..

ممكن نستخدم طريقة من اتنين :

الطريقة الأولى باستخدام MsgBox لإظهار رسالة للمستخدم بقيمة المتغير ..

MsgBox str

الطريقة التانية ودي مهمة جداً لأننا هنستخدمها أثناء شرح المصفوفات لمتابعة تنفيذ أسطر الكود .. الطريقة باستخدام Debug.Print

Debug.Print str

طيب الطريقة دي هتظهر لنا إزاي : هتظهر النتائج في نافذة اسمها النافذة الفورية Immediate Window (طيب دي أجيبها منين وإزاي؟!)

روح للقائمة الموجودة في محرر الأكواد وانقر على View هتلاقي Immediate Window أو باختصار من لوحة المفاتيح اضغط على Ctrl + G .. هتظهر النافذة الفورية في أسفل محرر الأكواد ..

جرب الكود بالشكل الكامل بهذا الشكل

Sub StringVariable()
    Dim str As String
    str = "Officena Forums"
    MsgBox str
    Debug.Print str
End Sub

طيب لما نحب ننفذ الكود يا ريت لا يتم التنفيذ مرة واحدة من خلال الأمر Run .... عايز التنفيذ يتم واحدة واحدة وسطر بسطر عشان تتعلموا إزاي تتابعوا عمل الكود ..

عشان ننفذ الكود سطر بسطر ونتابع عايزين نظهر نافذة تانية كمان اسمها Local Window وبردو من نفس القائمة View وحاول تظبط النافذتين بحيث يكونوا بجانب بعضهم البعض كما في الصورة بحيث تتابع التنفيذ

001.png

خلينا عمليين ونطبق أول بأول : روح لمحرر الأكود وأدرج موديول وانسخ الكود وأظهر نافذة Local Window والنافذة الفورية وضع مؤشر الماوس داخل الكود في اي سطر واستعد للانطلاق (على السادة المبرمجين ربط الأحزمة وشحذ الهمة والتركيز) :wink2:

اضغط F8 من لوحة المفاتيح هتلاقي أول سطر Sub StringVariable اتلون باللون الأصفر .. هنا بيتم الإعلان عن المتغيرات (بص في نافذة اللوكال) هتلاقي اسم المتغير str في عمود اسمه Expression ، وقيمته "" في عمود اسمه Value (طبعاً لسه فراغ لأن لسه مخزناش فيه حاجة) ، ونوعه String في عمود Type .. يعني ببساطة عرفنا تاريخ حياته في اللحظة دي ..عرفنا اسمه وقيمته ونوعه (الكلام دا رغم إنه ملوش علاقة بموضوع المصفوفات لكنه مهم جداً عشان نفهم إزاي نتعامل مع محرر الأكواد بشكل احترافي ونعلم نفسنا إزاي الكود بيتم تنفيذه)

نضغط F8 تاني (هنا مفيش حاجة حصلت) السطر الأصفر انتقل للسطر ده

str = "Officena Forums"

ولكن محصلش أي تغيير في نافذة اللوكال ..دا لأن التغيير بيحصل لما بخرج من السطر الأصفر ..

اضغط F8 للمرة التالتة وشوف نافذة اللوكال ولاحظ قيمة المتغير .. اتغيرت القيمة من فراغ إلى النص Officena Forums

اضغط F8 للمرة الرابعة هتظهر لك رسالة فيها قيمة النص

اضغط F8 للمرة الخامسة هيظهر قيمة المتغير في النافذة الفورية

اضغط F8 للمرة السادسة والأخيرة على سطر End Sub لإنهاء الإجراء الفرعي

بكدا نكون عرفنا إزاي هنتعامل مع تنفيذ الكود أثناء الدورة ...

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

***************

طيب سؤال ايه علاقة المتغير بالمصفوفة؟

الإجابة إن المصفوفة متغير بس مش بيخزن قيمة واحدة (دا بيخزن مجموعة من المتغيرات دفعة واحدة)

مثال عملي لفهم المصفوفة بشكل أعمق :::

نفترض أن لدينا 5 طلاب وليهم درجات ..نروح لورقة العمل ونكتب 5 أسماء بدرجاتهم كما بالشكل التالي

002.png

نروح لمحرر الأكودا وننفذ الكود التالي ..الكود مش محتاج شرح الكود بسيط جداً

Sub StudentMarks()
    With ThisWorkbook.Worksheets("Sheet1")
        'الإعلان عن متغير لكل طالب
        Dim Student1 As Integer
        Dim Student2 As Integer
        Dim Student3 As Integer
        Dim Student4 As Integer
        Dim Student5 As Integer
 
        'تعيين قيم المتغيرات من الخلايا المشار إليها
        Student1 = .Range("B1").Offset(1)
        Student2 = .Range("B1").Offset(2)
        Student3 = .Range("B1").Offset(3)
        Student4 = .Range("B1").Offset(4)
        Student5 = .Range("B1").Offset(5)
 
        'طباعة الدرجات في النافذة الفورية
        Debug.Print "درجات الطلاب"
        Debug.Print Student1
        Debug.Print Student2
        Debug.Print Student3
        Debug.Print Student4
        Debug.Print Student5
    End With
End Sub

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

الجزء الأول بيتم الإعلان عن المتغيرات لدرجات الطلاب من النوع Integer أي عدد صحيح (طبعاً دا مجرد مثال .. لأن الدرجات من المفترض إنها تكون Double لأن أكيد بيكون فيه كسور)>>المهم الجزء التاني بيتم تعيين قيم للمتغيرات (الدرجات) انطلاقاً من الخلية B1 ... بإزاحة بمقدار صف واحد لأسفل هيجيب قيمة الخلية B1 ... بإزاحة بمقدار صفين هيجيب الخلية B3 وهكذا

الجزء التالت هيطبع درجات الطلاب في النافذة الفورية

لتكون النافذة الفورية بهذا الشكل

003.png

طيب المثال اللي فات 5 طلاب ..طيب لو عندي 100 طالب .. 500 طالب .. 1000 طالب .. 10000 طالب (هل سيكون التعامل مع طالب طالب ..؟؟ دا أكيد انتحار :blink: )

من هنا تأتي أهمية المصفوفة لتخزين جميع القيم في متغير واحد فقط .. يعني المصفوفة هتخليني أخزن القيم (درجات الطلاب) في متغير واحد فقط

Sub StudentMarksArr()
    With ThisWorkbook.Worksheets("Sheet1")
        'الإعلان عن متغير من النوع مصفوفة وأبعاد المصفوفة 5 عناصر
        'لأن عدد الطلاب 5 طلاب والمطلوب تخزين درجاتهم في المصوفة
        Dim Students(1 To 5) As Integer
        
        'قراءة درجات الطلاب من ورقة العمل
        Dim I As Integer
        For I = 1 To 5
            Students(I) = .Range("B1").Offset(I)
        Next I
        
        'طباعة الدرجات من المصفوفة في النافذة الفورية
        Debug.Print "درجات الطلاب"
        For I = LBound(Students) To UBound(Students)
            Debug.Print Students(I)
        Next I
    End With
End Sub

تم الإعلان عن اسم المتغير Students وطالما وضعنا أقواس بعد المتغير ..محرر الأكواد بيفهم إن دي مصفوفة ..

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

نضع المؤشر داخل الكود ونضغط F8 ونبص في اللوكال ... ركز يا مان وشوف المتغير اللي اسمه Students في نافذة اللوكال هتلاقي علامة زائد انقر عليها

004.png

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

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

....

لاحظت في الحلقة التكرارية اللي بدأت من 1 إلى 5 إن القيم الموجودة بدأت تتغير من أصفار إلى قيم (درجات الطلاب)

لمزيد حول الحلقة التكرارية للمصفوفة راجع الموضوع التالي

من هنا

نيجي لآخر جزئية وهي طباعة الدرجات في النافذة الفورية ...

هنا تم استخدام الحلقات التكرارية من بداية المصفوفة باستخدام كلمة LBound يليها اسم المصفوفة ، إلى نهاية المصفوفة باستخدام كلمة UBound يليها اسم المصفوفة .. ببساطة الكلمتين دول بيجيبوا الحد الأدنى للمصفوفة (1 كما في المثال) والحد الأعلى للمصفوفة (5 كما في المثال)

قم بالضغط على F8 واحدة واحدة وشوف التغيرات اللي بتحصل في نافذة اللوكال والنافذة الفورية عشان تقدر تستوعب عمل الكود بشكل جيد

إلى هنا حانت لحظة النوم وبدأ النوم يداعب جفوني :yes: ، ألتقي بكم على خير إن شاء الله

وإلى لقاء آخر وموضوع متجدد بإذن الله

دمتم على طاعة الله

والسلام عليكم ورحمة الله وبركاته :fff::fff::fff:

 

 

  • Like 12
رابط هذا التعليق
شارك

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

جعله الله فى موازين حسناتك

تقبل وافر التحيه والتقدير

وفقك الله لما يحبه ويرضاه ورزقك الفردوس الاعلى

جزاك الله كل خير يا ابو البراء

  • Like 1
رابط هذا التعليق
شارك

بارك الله فيك أخي الحبيب أحمد وجزيت خيراً على دعائك الطيب

بالنسبة للموضوع المعلومات ليست دسمة ..كل ما في الأمر أنني أقوم بتفصيل الموضوع ولذا يبدو أن الموضوع دسم

ولكن في حقيقة الأمر أنها معلومات بسيطة جداً ومجرد بدايات ولكنها في غاية الأهمية حيث أن فهم البدايات سيمكنك من التعامل مع الأكواد المتقدمة بسهولة ويسر

تقبل تحياتي

رابط هذا التعليق
شارك

أخى الحبيب و أستاذى القدير // ياسر خليل

مبدع كعادتكم ، تسلم ايدك يا كبير 

أساسيات فى غاية الروعة والدقة 

بارك الله فيكم وزادكم الله من فضله ومن علمه 

وأسأل رب العرش العظيم أن يعينكم على تكملة هذه النوعيات من الدروس التى تمثل اساسيات لا غنى عنها فى هذا المجال

وجزاكم الله خير الخير 

وتقبل منى وافر الاحترام والتقدير 

 

تم تعديل بواسطه محمود_الشريف
  • Like 1
رابط هذا التعليق
شارك

والله تعجز الكلمات فى التعبير  عن هذا الموضوع القيم .. بسم الله ماشاء الله .. بارك الله فيك اخى الفاضل ابو البراء وزادك علماً نافعاً

رابط هذا التعليق
شارك

السّلام عليكم و رحمة الله و بركاته

ألف شكر أخي الغالي و استاذي القدير " ياسر خليل أبو البراء "

بارك الله فيك جزاك الله خيرًا و زادها بموازين حسناتك

" إنَّ الله يحبّ إذا عمل أحدكم عملاً أنْ يتقنَه "

و الحمد لله ..مواضيعك و أعمالك و تدخّلاتك و شروحاتك و حلولك كلّها باسم الله ما شاء الله أكثر من متقنة

وفّقك الله لما يحبّه و يرضاه و نفع بك الاسلام و المسلمين

موضوع شيّق يستحق المتابعة .. مميّز و ممتاز كعادة مواضيعك

فائق إحتراماتي

  • Like 1
رابط هذا التعليق
شارك

اخى الحبيب

السلام عليكم ورحمة الله

ايقونة المنتدى وزهرتها الباسقة

موضوعاتك عبارة عن مجموعة من الكنوز هنيئا لمن يعرفها

حقيقة لا اجد تعبيرات مناسبة كى اصف بها اعجابى

ولن اقول سوى بارك الله فيك

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

استاذى القدير / ابو البراء

جزاك الله خيراً .. حقاً نحن بحاجه الى مثل تلك الشروحات .. اعانك الله عليها

واتمنى من حضرتك ان كل درس جديد يضاف اسفل سابقة مباشرة دون التعليقات حتى يسهل تجميع الدروس بالنسبه للقارئ

خالص تقديرى واحترامى لشخصكم الكريم

  • Like 1
رابط هذا التعليق
شارك

أخي الحبيب محمود الشريف

أخي الغالي محي الدين أبو البشر

أخي الفاضل صلاح المصري

أخي العزيز عبد العزيز البسكري

أخي المتميز زيزو العجوز

أخي المحبب لقلبي خالد الرشيدي صاحب الأعمال الخفية

بارك الله فيكم جميعاً وجزيتم خيراً على تسجيعكم الدائم لي .. لا تعرفون مدى سعادتي بتشجيعكم لي وبتقديركم المميز لي رغم أن ما قدمته بسيط جداً مقارنةً بما تقدمونه

 

جمعني الله وإياكم في مستقر رحمته يوم القيمة إنه ولي ذلك والقادر عليه

إن شاء الله بالنسبة للحلقات الجديدةسوف يتم إدراجها في مشاركة في ترتيبها بشكل عادي وفي النهاية يمكن تجميع المشاركات كلها في موضوع واحد مستقل ..

بارك الله فيكم وجزيتم خير الجزاء ، ودمتم على طاعة الله

تقبلوا تحياتي

  • Like 1
رابط هذا التعليق
شارك

أخى الحبيب / ياسر خليل

جزاك الله خيرا على هذا الموضوع القيم

سر على بركة الله ونحن جميعا فى انتظار المزيد لنتعلم من ابداعاتكم

تقبل تحياتى وتقديرى

 

  • Like 1
رابط هذا التعليق
شارك

أخي الغالي رجب جاويش

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

بارك الله فيك وجزاك الله كل خير ...

تقبل وافر تقديري واحترامي

  • Like 1
رابط هذا التعليق
شارك

أستاذي الكريم

شكرا جزيلا للشرح الرائع و المبسط

بالصبر ننتظر الدرس التالي

أستاذي ملاحظة : لم أستطع  الرد على موضوعك باستخدام الموزيلا و لم استطع الأعجاب و لم استطع كتابة موضوع جديد

اضطررت أن استخدم الكروم

 

رابط هذا التعليق
شارك

مشكور أخي العزيز نايف على مرورك العطر وكلماتك الطيبة

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

تقبل تحياتي

  • Like 1
رابط هذا التعليق
شارك

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

جزاك ربنا من خيراته واسبغ عليك من نعماته

درس جميل وسهل وميسور لا تحرمنا من جمايلك 

كما يقول احد المتوترين "المغردين في تويتر" افضل الصدقة ان تتعلم علما ثم تعلمه لأخيك

  • Like 1
رابط هذا التعليق
شارك

أخي العزيز عبد العزيز

أخي الفاضل أحمد العدوي

بارك الله فيكما وجزاكما الله خير الجزاء ...مشكور على كلماتكم الطيبة ودعائكم الطيب

جمعني الله وإياكم في مستقر رحمته يوم القيامة

تقبلوا تحياتي

رابط هذا التعليق
شارك

أخي الكريم ناصر سعيد

لما لا تستجيب لتغيير اسم الظهور للغة العربية ..نحب أن نرى اسمك ساطعاً باللغة العربية

بارك الله فيك وجزيت خيراً على مرورك العطر بالموضوع ، وفي انتظار متابعتك للموضوع للاسفادة منه

تقبل تحياتي

رابط هذا التعليق
شارك

وجزيت خيراً بمثل ما دعوت لي أخي الحبيب الزباري

وإن شاء الله نتمهل قليلاً لحين يستوعب الأعضاء الجزء الأول لكي تكون الحلقات الجديدة مفهومة .. لما العجلة؟! :blink:(ليه ميكونش موتوسيكل أو أتوبيس :wink2:)

خلينا نتناول الموضوع بروية لكي نستفيد منه أقصى استفادة ممكنة

تقبل وافر تقديري واحترامي

  • Like 1
رابط هذا التعليق
شارك

أخي الحبيب ياسر أبو البراء المحترم .. السلام عليكم ورحمة الله وبركاته :

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

فإن كان هناك فرصة نستدرك ما فات لنضع حقائبنا على ظهورنا ..ثم نلتزم مقاعدنا ...لنزداد علماًمما آتاكم الله

"نرفع درجاتٍ من نشاء وفوق كل علم عليم" زادكم الله علماً حلماً ورفعة وتواضعاً ...آمين

و 56e2d13212633_.png.7b0e7c5e7efd27b6adb8f

رابط هذا التعليق
شارك

أخي الغالي ابو يوسف وعليكم السلام ورحمة الله وبركاته

بارك الله فيك وجزيت خيراً على مرورك العطر بالموضوع

 

لقد حجزت لك مقعداً بجانبي فأنت من المميزين .. لن تجلس بجوار باقي الطلبة بل ستجلس بجانبي ، ومقامك أعلى من ذلك عندي

وإن شاء الله تقدر تتابع معانا سلسلة الدروس إن شاء الله .. ما زلنا في البداية ولن أقدم جديد حتى يتسع الوقت للجميع لدراسة الموضوع بتأني وروية ..

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

تقبل وافر تقديري واحترامي

  • Like 1
رابط هذا التعليق
شارك

استاذى الحبيب ابوالبراء

انا متعود على دروسك بالشتاء لكن بالصيف جديده دى

براك الله فيك وزادك من علمه وفضله 

اتمنى تذهب بالشرح الى ابعد مدى لان هذا الموضوع من المواضيع الهامه بال VbA  

تقبل تحياتى اخوك و تلميذك / حسام

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information