ياسر خليل أبو البراء قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 (معدل) السلام عليكم ورحمة الله وبركاته آثرت أن أفرد كل حقة في موضوع وكل حلقة ستكون ثلاثة أجزاء إن شاء الله حتى لا يطول الموضوع ويتوه الأعضاء بين طيات السطور نستكمل الحديث عن المصفوفات ...ونتحدث اليوم عن المصفوفة ثنائية الأبعاد .. عشان نفهم شكل المصفوفة الثنائية ..تخيل ورقة عمل يكون اتجاهها من الشمال لليمين ..طبق عملي عشان تفهم شكل المصفوفة كويس .. افتح ملف إكسيل وخلي ورقة العمل اتجاهها من الشمال لليمين من خلال التبويب Page Layout ثم الأيقونة Sheet Right-to-Left وضع بعض البيانات في الخلايا بالشكل التالي : A1= 10 B1=20 A2=30 B2=40 A3=50 B3=60 أنا تعمدت إنك تكتب القيم بالترتيب ده لأن هو ده اللي المصفوفة بتشوفه .. يعني نفس الترتيب ده هيكون داخل المصفوفة ، بمعنى آخر المصفوفة بتبدأ تشوف القيم الموجودة ابتداءً من اليسار أول خلية A1 وبعدين تمشي في الصف ولما الصف يخلص تروح للصف التالي يعني على شكل زجزاج ..ارسم الاتجاهات هتلاقي المصفوفة بتمشي على زجزاج .. نشوف الكود عشان نتأكد أكتر من صحة الكلام ده Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") End Sub نكتب السطرين دول .. نظهر نافذة Locals عشان نشوف عناصر المصفوفة ونشوف القيم لكل عنصر ضع مؤشر الماوس في أي مكان داخل الماكرو ادعس F8 3 مرات ، وشوف النافذة .. اضغط على علامة الزائد عشان تشوف شكل المصفوفة الثنائية (ذات البعدين) هنلاقي 3 أبعاد (دا البعد الأول ..اللي هو بعد الصفوف) Arr(1) Arr(2) Arr(3) بجانب كل بعد من أبعاد الصفوف علامة زائد ..لو فتحنا علامة الزائد الأولى هنلاقي الشكل ده Arr(1,1) Arr(1,2) ركز في شكل العنصر ...دلوقتي المحرر بيشوف البعد الأول بشكل مستقل (بعد الصفوف يعني بيتعامل مع الصفوف أولاً ...الصف في المقام الأول) ..بعد ما سيادته يشوف الصفوف يبدأ في عملية تشريح الصف عمود عمود ويجلب كل قيمة في العمود .. فلما فتحنا الجزء الخاص بالصف الأول لقينا Arr(1,1) يعني الصف الأول العمود الأول يعني A1 ... وقيمته تساوي 10 وفي نفس الصف انتقل للعمود الثاني Arr(1,2) يعني الصف الأول العمود الثاني ..يعني B1 وقيمته تساوي 20 ... بعد الانتهاء من جميع الأعمدة في الصف الأول يبدأ ينتقل للصف الثاني .. ومن الصف الثاني يبدأ يتعامل مع كل عمود وهكذا وهكذا وهكذا أرجو أن تكون وصلت المعلومة بشكل جيد لأن فهمك لطبيعة المصفوفة هيسهل عليك فهم أي معلومة أخرى ************** ننتقل لجزئية جديدة ألا وهي أول رقم في الفهرس وآخر رقم ..أعتقد ممكن تعرفوها بسهولة أول رقم في الفهرس وآخر رقم من خلال كلمة LBound وكلمة Ubound زي ما اتعملنا قبل كدا أضف السطرين للكود السابق Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr) MsgBox UBound(Arr) End Sub نفذ الماكرو هتلاقي أول رقم 1 وآخر رقم 3 (دا أول صف وآخر صف )) صحيح ... نعم صحيح معنى الكلام ده إن هو بيجيب أول وآخر رقم للبعد الأول بعد الصفوف ...طيب إحنا عندنا دلوقتي بعد ثاني اللي هو بعد الأعمدة .. دا ملوش لازمة ولا مهم ؟! أكيد مهم ...وعشان نعرفه يبقا لازم هنا في التعامل مع المصفوفات ثنائية الأبعاد نكون محددين أكتر ونحدد البعد اللي إحنا عايزينه في المثال السابق ممكن نعدل تعديل بسيط عشان نفهم النقطة دي Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr, 1) MsgBox UBound(Arr, 1) End Sub عملنا ايه أضفنا رقم 1 ودا بيمثل البعد الأول ..وبالتالي نحصل على نفس النتائج أول رقم 1 وآخر رقم 3 نفهم من كدا إن محرر الاكواد بيفهم إنك لو تركت الرقم 1 من غير ما تكتبه يبقا نفس الكلام لو كتبته (يبقا الافتراضي إنه بيتعامل مع البعد الأول ..معلش اعذروه إنه بيفضل البعد الأول ..وتقريباً بيفضل البعد الأول بعد الصفوف لأن الصفوف فيها كتير من حروف المصفوفة (الحر عمل عمايله مع دماغي)) أظن كدا فهمنا إننا لو عايزين نعرف أول رقم وآخر رقم في البعد الثاني هنستبدل رقم 1 برقم 2 Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr, 2) MsgBox UBound(Arr, 2) End Sub هتلاقي النتائج 1 و 2 يعني أول رقم في البعد الثاني بعد الأعمدة هو 1 (العمود الأول) ، وآخر رقم في البعد الثاني هو 2 (العمود الثاني) مما سبق : يمكن معرفة طول المصفوفة وعرضها جرب الكود التالي Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox "طول المصفوفة أي عدد الأسطر أو الصفوف بها " & UBound(Arr, 1) MsgBox "عرض المصفوفة أي عدد الأعمدة بها " & UBound(Arr, 2) End Sub اعتمدنا هنا على كلمة UBound لأنها بتجيب من الآخر ..فبتجيب في السطر الأول عدد أسطر أو صفوف المصفوفة ، وفي السطر الثاني بتجيب عدد الأعمدة .. طيب : لونظرنا نظرة تفحص لشكل النطاق (اللي هو شبه شكل المصفوفة ) هنلاقيه على شكل مربع أو مستطيل .. وعشان نعرف عدد عناصر أو عدد خلايا النطاق نعمل ايه يا ترى ..بنضرب الطول × العرض عشان يديني المساحة (فين بتوع الرياضيات !!) طيب الطول في المثال السابق 3 (عدد الصفوف) ، والعرض يساوي 2 (عدد الأعمدة) يبقا معنى الكلام ده إن عدد عناصر المصفوفة يساوي = 3 × 2 = 6 عناصر أضف السطر التالي في نهاية الكود السابق MsgBox "عدد عناصر المصفوفة أي حجمها يساوي " & UBound(Arr, 1) * UBound(Arr, 2) آخر نقطة هنتكلم فيها .. استبدل هذا السطر في الكود Arr = Range("A1:B3") إلى هذا السطر Arr = Range(Cells(1, 1), Cells(3, 2)) ركز في الجزء ده : Cells(3, 2) طبعاً دي طريقة تانية لتحديد النطاق إننا بنستخدم كلمة Cells يليها رقم الصف ورقم العمود ، ولما نستخدمها بالشكل ده مع كلمة Range معناها نقطة البداية للنطاق (اللي هو A1) ، والجزء التاني نقطة النهاية (اللي هو (B3) ركز مع آخر خلية في النطاق هتلاقي رقم 3 يمثل آخر صف ، ورقم 2 يمثل رقم آخرعمود (أظن كدا وضحت) يعني طول المصفوفة وعرضها بنقدر نحدده من خلال آخر عنصر أو آخر خلية نكتفي بهذا القدر حتى لا يفقد الموضوع أهميته وإلى لقاء آخر متجدد بإذن الله تم تعديل أغسطس 13, 2015 بواسطه ياسر خليل أبو البراء 1
بكار للأبد قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 رائع دائماً ودقيق ومنظم الفكر - جزاك الله كل خير
ياسر خليل أبو البراء قام بنشر أغسطس 13, 2015 الكاتب قام بنشر أغسطس 13, 2015 أخي الحبيب بكار مشكور على مرورك الطيب وتشجيعك للموضوع .. في انتظار مساهماتك في الموضوع
محمد حسن المحمد قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 السلام عليكم أخي الحبيب أبو البراء: أدعو الله لك بالتوفيق في بحثك هذا ضغط العمل في أيامي هذه يجعلني قليل المتابعة ...ولكن لا يمكن إلا أن أفتح على مستجدات أوفيسنا...إكسلنا بين الفينة والأخرى..لأنه أصبح هاجس لدي. أعلم مقدرتك على تبسيط وتنسيق وتسلسل مراحل عملك ...أهنئك على ذلك ..لأنه كما أسلف أخي بكار دليل على فكر منظم ...تقبل تحياتي.. بــــــــــــــــــــــــــــــــارك الله 1
ياسر خليل أبو البراء قام بنشر أغسطس 13, 2015 الكاتب قام بنشر أغسطس 13, 2015 وعليكم السلام ورحمة الله وبركاته أخي وحبيبي في الله أبو يوسف جزيت خيراً على دعائك الطيب ومرورك العطر وإن كنت أفضل ألا يكون مروراً وفقط وأن يكون تفاعلاً ومشاركةً ومساهمةً .. أقدر ضغوط عملك وأتمنى تواجدك بيننا إن شاء الله تقبل وافر تقديري واحترامي 1
إبراهيم ابوليله قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 (معدل) اخى ياسر اعتقد انك مجبتش جديد يعنى المعلومات دى معظمنا بيعرفها ولكن انا شخصيا كنت اجهل معرفة الكثير من المحتوى الذى تفضلت بشرحه ولذلك فانا مصر على متابعة هذا الموضوع لانك بصراحه تبجر المتابع انه يستفيد والله مش عارف اشكرك ازاى بس كل الى ققدر اعمله انى اققولك زادك الله من فضله وعلمه وجعلك نافعا بعلمك تقبل تحياتى تم تعديل أغسطس 13, 2015 بواسطه إبراهيم ابوليله 1
عبد العزيز البسكري قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 السلام عليكم ورحمة الله و بركاته وفّقك الله أستاذنا العزيز ياسر خليل أبو البراء وسدّد خطاك لكل مافيه خير لك و لنا و للمؤمنين أجمعين بارك الله فيك و جزاك الله خيرًا وزادك من علمه و فضله ..مواضيعك مميّزة تستحق المتابعة ..فإنّا متابعون
ياسر خليل أبو البراء قام بنشر أغسطس 13, 2015 الكاتب قام بنشر أغسطس 13, 2015 إخواني وأحبابي بارك الله فيكم مروركم العطر .. لا أريد أن أستقل بالموضوع فكما ذكر أخي الغالي إبراهيم أن المعلومات يعرفها معظمنا ولكن لابد من تناولها لكي نفهم طبيعة عمل المصفوفات حتى يسهل علينا فيما بعد إدراك الأمور بشكل أفضل .. ولن أتطرق إلى الموضوعات الكبرى مرة واحدة ..لابد من وضع حجر الأساس ويا ريت الكل يشارك ويساهم لا أريد متابعين فقط بل مشاركين ومساهمين ولو بقدر قليل فكل يجود بما عنده تقبلوا تحياتي
محمد حسن المحمد قام بنشر أغسطس 13, 2015 قام بنشر أغسطس 13, 2015 السلام عليكم إخوتي الكرام ما شاء الله بارك خلية نحل بموضوع مهم ..ولكي أحصل على قسط كبير لأدرسه دراسة متأنية ..بعد الدوام الشاق ..سأقوم بعون الله تعالى بنسخه إلى ملفات Word لأحصل على رشفة من فيض عطائكم إخوتي الكرام فكل منكم بذل جهودا مشكورة تسجل لكم على مر اﻷيام...ما أحلى العلم !!.وما أجمل التكامل!!. خلايا سداسية تنتج عسلا سائغا للشاربين..هلمو للنهل من علم نافع نحن أجدر به من أولئك الذين أخذوا اللب وأعطونا القشور. نحن موعودون بتسهيل طريق إلى جنة عرضها السموات واﻷرض لسلوكنا طريق العلم الناصع وفوق كل ذي علم عليم والسلام عليكم ورحمة الله وبركاته... 1
ياسر خليل أبو البراء قام بنشر أغسطس 13, 2015 الكاتب قام بنشر أغسطس 13, 2015 وعليكم السلام ورحمة الله وبركاته بارك الله فيك أخي الحبيب أبو يوسف على مرورك العطر وكلماتك الرقيقة والمشجعة خلية نحل آه وبتدي عسل آه لكن بردو النحل بيلسع ... اللي مش هيعمل الواجب هيتلسع ... جمعنا الله وإياكم في الفردوس الأعلى من الجنة .. اللهم آمين 1
مختار حسين محمود قام بنشر أغسطس 15, 2015 قام بنشر أغسطس 15, 2015 استفسار آخى وأستاذى ياسر : هل نقدر نقول على المصفوفة الثنائية إنها هى التى يكون عدد الأعمدة فيها 2 و نقول على المصفوفة المتعددة إنها هى التى يكون عدد الأعمدة فيها 3 أو أكثر بغض النظر عن عدد الصفوف
ياسر خليل أبو البراء قام بنشر أغسطس 15, 2015 الكاتب قام بنشر أغسطس 15, 2015 أخي الحبيب مختار عادةً لا يتم استخدام المصفوفات الأكثر من الأبعاد الثنائية .. بصرف النظر عن عدد الصفوف أو الأعمدة المصفوفة الثنائية مرتبطة ببعدين فقط ..بعد الصفوف مهما كما عددها وبعد الأعمدة مهما كان عددها .. أما بالنسبة للمصفوفة ثلاثية الأبعاد جرب الكود التالي اضغط F8 وشوف نافذة الـ Locals Sub Test() Dim arr(1 To 3, 1 To 5, 1 To 4) End Sub هتلاقي البعد الأول مكون من 3 عناصر وتحت كل عنصر يقع البعد الثاني المكون من 5 عناصر وتحت كل عنصر من العناصر الخمسة يوجد عناصر البعد الثالث والمكون من 4 عناصر لا تهتم بالمصفوفات ذات الأبعاد الأكثر من اثنين الأكثر استخداماً هي المصفوفات الأحادية والثنائية فقط
مختار حسين محمود قام بنشر أغسطس 15, 2015 قام بنشر أغسطس 15, 2015 أشكرك أستاذى الفاضل اضافة : دالة لتحديد عدد أبعاد أى مصفوفة UDF Function ElementCount(B As Variant) As Long Dim V As Variant, Z As Long For Each V In B Z = Z + 1 Next V Do ElementCount = ElementCount + 1 Z = Z / (UBound(B, ElementCount) - LBound(B, ElementCount) + 1) Loop Until Z = 1 End Function Function fDummy(B As Variant) As Long fDummy = ElementCount(B) End Function Sub testArray() Dim Arr(1 To 5, 4 To 7, 10, 1 To 9) Dim B As Variant Dim ND As Long B = Arr ND = fDummy(B) MsgBox "the number of dimensions for The array " & ND End Sub تحياتى لكم
ياسر خليل أبو البراء قام بنشر أغسطس 15, 2015 الكاتب قام بنشر أغسطس 15, 2015 تسلم أخي الحبيب مختار على هذا الكود الجميل والرائع ممكن نختصره شوية (معلش رخم أنا ولازم أضع لمساتي اللي ملهاش لازمة في معظم الأحيان) Sub TestArray() Dim Arr(1 To 5, 4 To 7, 10, 1 To 9) MsgBox "The Number Of Dimensions For The Array " & ElementCount(Arr) End Sub Function ElementCount(B As Variant) As Long Dim V As Variant, Z As Long For Each V In B Z = Z + 1 Next V Do ElementCount = ElementCount + 1 Z = Z / (UBound(B, ElementCount) - LBound(B, ElementCount) + 1) Loop Until Z = 1 End Function 1
الشهابي قام بنشر أغسطس 16, 2015 قام بنشر أغسطس 16, 2015 أستاذي العزيز القدير / ياسر خليل جزاك الله خير ماشاء الله عطاء مستمر ونهر لا ينضب وخفة دم وروح وأخلاق عالية تقبل إحترامي وتقديري وحبي لكم الله يحفظكم ويزيدكم علما ورفعة 1
ياسر خليل أبو البراء قام بنشر أغسطس 16, 2015 الكاتب قام بنشر أغسطس 16, 2015 أخي الغالي الشهابي الغائب عن العين الحاضر في القلب إنه ليحزنني عدم تواجدك معنا بشكل دائم فأنت مدرسة كبيرة وأحب أن نستفيد منها وإن شاء الله تكون معنا في موضوع المصفوفات وتدلي بدلوك فيه تقبل وافر تقديري واحترامي
محمد حسن المحمد قام بنشر أغسطس 16, 2015 قام بنشر أغسطس 16, 2015 السلام عليكم إخوتي الكرام ..أخي الحبيب أبو البراء: ما شاء الله لا قوة إلا بالله....بارك الله بهمتكم .قطعتم شوطا طويلا يمتاز بالجد والعمل ...راجيا الله لكم التوفيق والسداد...وراجيا لنفسي تجديد هذه الذاكرة التي أصبحت .... وتستند إلى نظام قديم...فهل من تحديث لها إلى الجيل الرابع ...أخشى أن تحتاج إلى هارد وير كحاجتها للسوفت وير..تقبلوا تحياتي..
ياسر خليل أبو البراء قام بنشر أغسطس 16, 2015 الكاتب قام بنشر أغسطس 16, 2015 وعليكم السلام أخي الغالي ابو يوسف يشرفني ويسعدني دائماً مرروك العطر بالموضوع وأتمنى متابعتك الدائمة له إن شاء المولى بالنسبة للتحديث فهو أمر وارد وضروري ولكن لن يكون هناك فورمات للهاردوير (ربنا يخليك ويديك الصحة والعافية) .. فقط بعض التحديثات في السوفت وير والجهاز يشتغل طلقة ولا أحسنها جهاز من الأجهزة الحديثة (الأصلي أصلي) تقبل تحياتي ومداعبتي لك 1
مختار حسين محمود قام بنشر أغسطس 16, 2015 قام بنشر أغسطس 16, 2015 أخى وأستاذى العزيز عمر الرخامة ما تجيب الجمال والبساطة دى
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.