اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

المصفوفات في الإكسيل (نتعلم سوياً لنرتقي) - الحلقة الأولى


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

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

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

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

فهيا بنا سوياً نتعلم معاً ... أنا مثلي مثلكم في الموضوع أنا مجرد متعلم مبتديء فيما يخص هذا الفرع

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

 

عارفين المتغير Variable لما نحب نخزن قيمة خلية على سبيل المثال كنا نضع قيمة الخلية في متغير بهذا الشكل (بفرض أنه هناك نص في الخلية A1 والمطلوب تخزين قيمة الخلية في متغير )

Sub StringVariable()
    Dim strName As String
    strName = Range("A1").Value
    MsgBox strName
End Sub

قمنا بالإعلان عن المتغير وفي السطر التاني وضعنا قيمة للمتغير بحيث يساوي قيمة الخلية A1 وفي  آخر سطر أظهرنا قيمة المتغير من خلال رسالة

في المثال تم تخزين قيمة خلية واحدة ...

طيب لو عندي 100 اسم في العمود الأول ..هل كل خلية هعمل متغير وأخزن فيه قيمة الخلية ( طبعاً مستحيـــــــــــــــــــــــــــــــــــل )

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

لو هنتعامل مع صف واحد يبقا المصفوفة (ذات بعد واحد) ، لو مع عمود واحد (بردو ذات بعد واحد) ، لكن لوهنتعامل مع صفوف وأعمدة يبقا في الحالة دي (المصفوفة ذات بعدين ..بعد الصفوف وبعد الأعمدة)

 

نرتاح شوية بعد ماعرفنا ايه فايدة المصفوفة وننتقل لمثال عملي بسيط لكيفية الإعلان عن المصفوفة .....

ارتحنا ..الحمد لله .. ننتقل إلى الجزء الثاني :yes:

شكل المصفوفة :المصفوفة تتكون من عناصر وكل عنصر له رقم (يعني زي كتاب وله فهرس ..كل  صفحة في الكتاب ليها رقم في الفهرس)

المصفوفة زي الكتاب ... والعناصر زي الصفحات .. وكل عنصر له رقم في الفهرس زي ما كل صفحة ليها رقم في فهرس الكتاب  :gift2:

محرر الأكواد بيتعامل مع المصفوفات ويبدأ يضع فهرس للعناصر بس مش بيبدأ برقم واحد بيبدأ برقم صفر

مثال : لو مصفوفة مكونة من 4 عناصر يبقا الفهرس  هيكون بالشكل ده ( 0 - 1  - 2 - 3 ) يعني أول عنصر له رقم الفهرس صفر ، وتاني عنصر له رقم الفهرس واحد ، وتالت عنصر له الرقم 2 ، والرابع والأخير له الرقم 3 .... تعبتكم معايا في الفهرس

سؤال : هل ممكن إني أخلي محرر الأكواد يغير طريقة الفهرسة لعناصر المصفوفة بحيث يبدأ من رقم 1 ؟ الإجابة نعم (بس اصبر عليا عشان بتوه وبنسى)

 

مثال تطبيقي : ضع الكود التالي في محرر الأكواد

Sub OneDimensionalArrayA()
    Dim Arr(0 To 3) As String
    
    Arr(0) = "A"
    Arr(1) = "B"
    Arr(2) = "C"
    Arr(3) = "D"
    
End Sub

السطر الأول بنعلن عن المصفوفة بعد اسم المتغيرArr وضعنا بين قوسين حجم المصفوفة من 0 إلى 3 أي أن الفهرس يبدأ من 0 إلى 3 (إذاً عدد عناصر المصفوفة كام ؟ عد من 0 إلى 3 هتلاقي الناتج 4 أي 4 عناصر بالمصفوفة)

من محررالأكواد روح للقايمة View وانقر على الأمر Locals window هيظهر نافذة نقدر من خلالها نتابع عمل الكود

ضع مؤشر الماوس في أي مكان داخل الإجراء الفرعي المسمى OneDimensionalArrayA ثم من لوحة المفاتيح اضغط F8 ... سنجد السطر التالي مظلل بالأصفر

Sub OneDimensionalArrayA()

بص كويس على نافذة Locals ستجد المتغير من النوع مصفوفة المسمى Arr على يمينه علامة زائد انقر عليها هيفتح لك عناصر المصفوفة ستجد العنصر الأول بهذا الشكل

Arr(0)

وهكذا مع بقية العناصر ..كيف عرف محرر الأكواد أن العناصر 4 عناصر ؟؟ لأننا حددنا حجم المصفوفة بين الأقواس

نلاحظ أيضاً في نافذة Locals في العمود المسمى Value أن العناصر لا تحمل أي قيمة بعد ، سنجد "" (أقواس تنصيص) أي أنها فارغة ...

هذا هو شكل المصفوفة أي أنه يعد بمثابة متغير واحد يحمل عدة متغيرات ...

اضغط F8 مرة أخرى ستجد السطر التالي مظلل بالأصفر

Arr(0) = "A"

لا يوجد أي تغيير في نافذة Locals ... نلاحظ أنه بعد الضغط على F8 والخروج من السطر الأصفر الحالي يتم تنفيذ السطر ..أي أن التنفيذ بعد الخروج من السطر

نضغط F8 للمرة الثالثة لتنفيذ السطر السابق سنجد في نافذة Locals في العمود Value أن العنصر الذي له رقم الفهرس صفر يحمل القيمة A

أكمل بالضغط على F8 وبعد كل ضغطة لاحظ النافذة جيداً لتعرف التغيرات

ماذا كان يحدث في أسطر الكود ..؟ تقوم الأسطر بتعيين قيمة لكل عنصر داخل المصفوفة

الآن جرب بنفسك الكود التالي

Sub OneDimensionalArrayB()
    Dim Arr(1 To 4) As String
    
    Arr(1) = "A"
    Arr(2) = "B"
    Arr(3) = "C"
    Arr(4) = "D"
    
End Sub

لاحظ أننا يمكننا تغيير بداية الفهرسة من صفر إلى 1 كما بالمثال .. لاحظ التغيرات ..بما أن عدد العناصر أربعة تم تغيير الرقم 3 الذي هو آخر رقم بالفهرس إلى 4 .. وفي الأسطر تم التعديل ليناسب التغيير الذي تم بالسطر الأول

ننتقل لآخر جزئية الآن .. معرفة أول رقم في الفهرس وآخر رقم في الفهرس

نعود للمثال الأول

Sub OneDimensionalArrayA()
    Dim Arr(0 To 3) As String
    
    Arr(0) = "A"
    Arr(1) = "B"
    Arr(2) = "C"
    Arr(3) = "D"
    
    MsgBox LBound(Arr)
    MsgBox UBound(Arr)
End Sub

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

لمعرفة آخر رقم في الفهرس نستخدم الكلمة UBound ثم نفتح قوس ونكتب اسم المصفوفة المطلوبة >> الناتج في الثال سيكون رقم 3

جرب بنفسك تغيير أبعاد المصفوفة من 0 إلى 3 ، وخليها من 1 إلى 4 وغير ما يلزم وشوف النتائج

Sub OneDimensionalArrayB()
    Dim Arr(1 To 4) As String
    
    Arr(1) = "A"
    Arr(2) = "B"
    Arr(3) = "C"
    Arr(4) = "D"
    
    MsgBox LBound(Arr)
    MsgBox UBound(Arr)
End Sub

وإلى لقاء آخر ...دمتم على طاعة الله :fff::fff:

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

الجزء الثاني :welcomeani:

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

نتعرف الآن على طريقة أخرى لتخزين قيم المصفوفة .. في السابق خزنا كل قيمة داخل عنصر تباعاً أي تم تعيين قيمة لكل عنصر ..عنصر عنصر

الطريقة التي سنتعلمها الآن هي كيفية تخزين مجموعة من القيم مرة واحدة بسطر واحد .. الأمر في منتهى اليسر ، سنقوم باستخدام كلمة Array ثم نفتح قوس بالضغط على Shift + 9 ثم نضع القيم بالترتيب المطلوب وكل قيمة توضع داخل أقواس تنصيص ويفصل بين كل عنصر وعنصر فاصلة وليس فاصلة منقوطة وفي نهاية المطاف نغلق القوس بالضغط على Shift + 0

اختصار للكلام الكتير شوف السطر ده ..هنخزن قيم المصفوفة بهذا الشكل

Arr = Array("A", "B", "C", "D")

تم تخزين 4 قيم داخل المصفوفة .. لمعرفة أول الفهرس نستخدم كلمة LBound ولمعرفة رقم آخر الفهرس نستخدم كلمة UBound كما عرفنا من قبل

لو ضغطنا F8 وتفحصنا نافذة الـ Locals سنجد أن الفهرس يبدأ من صفر .. إذاً أرقام الفهرس هنا في السطر السابق ستكون 0 ، 1 ، 2 ، 3

طيب نضع المثال بالكامل ثم نقوم بشرحه وتشريحه

Sub OneDimensionalArray3()
    Dim Arr

    Arr = Array("A", "B", "C", "D")
    Range("A1").Resize(1, UBound(Arr)) = Arr
    Range("A2").Resize(UBound(Arr), 1) = Application.Transpose(Arr)
End Sub

في المثال تم الإعلان بشكل عام عن المصفوفة دون تحديد أبعادها كما فعلنا من قبل

تم وضع قيم المصفوفة في السطر الثاني كما أسلفنا

المطلوب الآن أن نعرف كيف نقوم بوضع قيم المصفوفة داخل نطاق وهذا الأمر في غاية الأهمية

السطر الثالث يقوم بوضع القيم في الصف الأول بدايةً من الخلية A1 إلى ؟؟ النهاية مجهولة في الغالب ..عشان كدا بنعتمد على آخر رقم في المصفوفة باستخدام UBound بمعنى آخر : فيه خاصية اسمها Resize (إعادة تحجيم) فالسطر بيقول ايه؟ انطلاقاُ من الخلية A1 سيتم تحديد حجم النطاق طبقاً للأرقام داخل الخاصية Resize الرقم الأول يمثل عدد الصفوف والرقم الثاني يمثل عدد الأعمدة ..

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

طول المصفوفة في المثال 4 عناصر لكن لو استخدمنا كلمة UBound عشان نعرف آخر رقم يبقا في الحالة دي هيكون الناتج 3 مش 4 (يا دي الحيرة)

المشكلة إن المصفوفة بتبدأ من صفر عشان كدا نهايتها عند الرقم 3 ..

لو تركنا المثال زي ما هو كدا ..ايه اللي هيجرا .. الجزء التاني الخاص بعدد الأعمدة اللي هو ده

UBound(Arr)

الناتج هنا لو حسبنا بشكل يدوي يساوي 3 إذاً سيتم تحجيم النطاق بمقدار صف واحد و3 أعمدة .. فلو بصينا على الورقة بعد تنفيذ الكود هنلاقي القيمة A في الخلية A1 ، والقيمة B في الخلية B1 ، والقيمة C في الخلية C1 ووقف لحد هنا .لأننا حددنا عدد الأعمدة 3 من خلال رقم آخر فهرس في المصفوفة ..

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

يعني السطر هيكون بالشكل ده

Range("A1").Resize(1, UBound(Arr) + 1) = Arr

فيه طريقة تانية نخلص من المشكلة بشكل نهائي إننا نضع جملة

Option Base 1

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

يعني الكود هيكون بالشكل ده

Option Explicit
Option Base 1

Sub OneDimensionalArray3()
    Dim Arr

    Arr = Array("A", "B", "C", "D")
    Range("A1").Resize(1, UBound(Arr)) = Arr
    Range("A2").Resize(UBound(Arr), 1) = Application.Transpose(Arr)
End Sub
    

 

ننتقل لآخر سطر ونعرف ايه الاختلاف .. ركز وحاول دايماً تشوف الفرق ..

في السطر السابق للسطر الأخير وضعنا قيم المصفوفة في الصف الأول في الأربعة أعمدة A - B - C - D

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

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

روح لورقة العمل وحدد أي مجموعة قيم في صف واحد ... يعني مثلاً حدد النطاق A1:D1 واعمل Copy نسخ وتعال في أي خلية بعيد شوية واعمل كليك يمين ثم Paste Special أي لصق خااااص وعلم علامة صح على الخيار Transpose الموجود في النافذة اللي هتظهر لك ولاحظ ما يحدث

هتلاقي القيم اتغيرت من الشكل الأفقي للشكل الرأسي وهو دا حل المشكلة ..

أي لوضع القيم في عمود نستخدم الجملة Application.Transpose عشان نحول المصفوفة من شكل أفقي لشكل رأسي

طبعاً مننساش إن خاصية Resize هنا هتختلف : بمعنى عدد الصفوف هنا يمثل عدد عناصر المصفوفة أما عدد الأعمدة فعمود واحد ...

بص للسطرين عشان تعرف الفرق ما بين وضع القيم بشكل أفقي ووضعها بشكل رأسي :rol:

مش هطول عليكم عشان نقدر نستفيد وأنا معاكم بستفيد مثلكم تماماً ..

تقبلوا تحياتي وإلى لقاء آخر متجدد بإذن الله :wink2:

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

الجزء الثالث

إخواني الكرام نتعرف اليوم على الحلقات التكرارية للمصفوفة أو تحديداً لعناصر المصفوفة

نفترضأن لدينا مصفوفة مكونة من 5 عناصر ونريد وضع قيم هذه المصفوفة في 5 صفوف في النطاق A1:A5 (تعلمنا أننا يمكننا ذلك في سطر واحد ..راجع ما سبق)

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

لعمل حلقة تكرارية نقوم أولاً بالتفكير .. ما هو المتغير الذي سيجعلنا نقوم بالحلقة التكرارية (هنا قد يكون المتغير الصف .. لأننا نريد أن نضع قيمة في الصف رقم 1 ثم الصف رقم 2 ثم الصف رقم 3 وهكذا ... وقد يكون المتغير عناصر المصفوفة لأننا نتعامل مع العنصر رقم 1 ثم العنصر رقم 2 ثم العنصر رقم 3 وهكذا)

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

بالمثال يتضح المقال

Sub LoopArrays()
    Dim I As Integer
    Dim Arr(1 To 5) As Integer
    
    Arr(1) = 10
    Arr(2) = 20
    Arr(3) = 30
    Arr(4) = 40
    Arr(5) = 50
    
    For I = LBound(Arr) To UBound(Arr)
        Cells(I, "A") = Arr(I)
    Next I
End Sub

هذا هو الكود بالكامل .. نبدأ في عملية التشريح

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

المتغير I في السطر الأول سيكون بمثابة حكم الراية ..في أول لفة تلاقيه رافع راية احدة (حسب نقطة البداية ...يعني ممكن تكون نقطة البداية لا تساوي 1 ...ممكن الحلقة التكرارية تبدأ من أي رقم تاني غير الواحد ...المهم في المثال إحنا هنبدأ من 1) ...

نرجع تاني لحكم الراية ..مع اللفة التانية هيكون قيمة المتغير 2 ومع اللفة التالتة هيكون 3 وهكذا ....

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

 

الأسطر التالية بيتم فيها تخزين قيم المصوفة : العنصر الأول في المصفوفة هيكون قيمته 10 ، والثاني 20 وهكذا

نيجي بقا للحلقة التكرارية في نهاية الكود ...

بعد الإعلان عن المصفوفة وتخزين القيم لعناصر المصفوفة ، تيجي الحلقة التكرارية عشان نقدر نعدي على كل عناصر المصفوفة

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

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

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

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

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

بلغة البرمجة : لما المتغير I يساوي نقطة النهاية (زي المثال نقطة النهاية تساوي 5) لما المتغير I يساوي 5 ، بكدا تتوقف الحلقة التكرارية ..أي يتوقف الترس

المهم في الكود كله السطر اللي بين سطري الحلقة التكرارية (هو دا اللي هيتنفذ مع كل لفة)

Cells(I, "A") = Arr(I)

كلمة Cells اللي يعرف شوية في البرمجة يعرف إنها متبوعة بين قوسين برقم الصف ورقم أو اسم العمود

فلو كنا في اللفة الأولى يبقا المتغير I يساوي واحد ...في الحالة دي رقم الصف هو 1 واسم العمود A أي الخلية A1 >> ملحوظة هامة ممكن نشيل حرف "A" ونضع مكانه رقم العمود 1

بالشكل ده

cells(I,1)

يبقا الخلية A1 تساوي ؟؟؟ مجهول !!! تساوي العنصر في المصفوفة الذي يحمل رقم الفهرس ..يعني إحنا قلنا إن المتغير I يساوي واحد إذاً الخلية A1 تساوي أول عنصر في المصفوفة

ثم تبدأ اللفة الثانية ويتغير المتغير I يصبح 2 فنبدأ بالتعامل مع الصف الثاني والعمود الأول أي الخلية A2 ونقول تساوي قيمة ثاني عنصر من عناصر المصفوفة وهكذا وهكذا

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

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

تم تعديل بواسطه ياسر خليل أبو البراء
  • Like 11
رابط هذا التعليق
شارك

  • الردود 73
  • Created
  • اخر رد

Top Posters In This Topic

إضافة بسيطة لإثراء الموضوع بعد إذن أخي الحبيب ياسر أبو البراء

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

 

 

شرح معادلة الصفيف.rar

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

أخي الغالي حسام

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

أخي الحبيب بكار

جزيت خيراً على مرورك الكريم وعلى ملف شرح معادلات الصفيف

الموضوع يخص التعامل مع المصفوفات داخل محرر الأكواد

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

اكتب كود تقوم فيه بتخزين مصفوفة من 7 قيم على أن تبدأ الفهرسة من رقم 1 .. وقم بتخزين أيام الأسبوع .. وأظهر أول رقم وآخر رقم في الفهرس من خلال رسالة

تم تعديل بواسطه ياسر خليل أبو البراء
  • Like 1
رابط هذا التعليق
شارك

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

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

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

تحياتي و احتراماتي

 

 

جزاك الله خيرا.gif

تم تعديل بواسطه عبد العزيز البسكري
رابط هذا التعليق
شارك

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

اخى واستاذى ياسر

مشكورا على الموضوع الشيق

والممتع

بجد ان متأكد ان شاء الله الاستفاده

ستكون كبيره

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

................................

واسمح لى بالاجابه على السؤال

Sub OneDimensionalArray()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
        Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"

    MsgBox LBound(Arr)
    MsgBox UBound(Arr)
End Sub

تقبل تحياتى

 

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

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

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

الأخ الغالي إبراهيم أبو ليلة

عوداً حميداً .. اشتقنا لك ولمشاركاتك القيمة وتسلم على الأداء العالي والمميز

وبالمناسبة سأسأل سؤال متقدم على الشرح ... كيف نضع قيم المصفوفة في النطاق A1:G1 أي وضعها في الصف الأول لتكون القيمة sat في الخلية A1 وتكون القيمة sun في الخلية B1 وهكذا للقيم السبعة للمصفوفة ؟

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

اخى ياسر

موضوع انتظره من زمان

وفقك الله

اعانك الله ارجو ربط الشرخ بامثله تبين كيف تفكر في صناعة الكود ( الية عمل الكود)

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

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

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

دائما متألق وتأتى بكل ما هو رائع وجديد ومفيد للجميع

أدام الله عليك الصحة والعافية

وجزاك الله خير وسدد خطاك

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

الاخ الحبيب سعد عابد

الحمد لله أن وفقني لبدء الموضوع وإن شاء الله تتابع معنا الموضوع من البداية حتى نصل سوياً لخط النهاية

الأخ الغالي ياسر فتحي

عوداً حميداً .. بتغطس كل فترة تروح فين ؟

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

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

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

اخى واستاذى ياسر

مشكورا على الترحيب

ولكن بالراحه عليا

انا فى المصفوفات

عامل زى شعبوله التعبوله

ولكن دى محاوله منى

Sub OneDimensionalArray()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
        Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"

Range("a1") = Arr(1)
Range("b1") = Arr(2)
Range("c1") = Arr(3)
Range("d1") = Arr(4)
Range("e1") = Arr(5)
Range("f1") = Arr(6)
Range("g1") = Arr(7)
End Sub

تقبل تحياتى

تم تعديل بواسطه إبراهيم ابوليله
رابط هذا التعليق
شارك

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

ايضا بالاستعانه الى فكره الوصول الى

اخر رقم عن طريق

 

UBound

يصبح شكل الكود

كالاتى

Sub OneDimensionalArray()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
    Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"
For g = 1 To UBound(Arr)
Cells(1, g) = Arr(g)
Next
End Sub

تقبل تحياتى

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

ايضا بالاستعانه الى فكره الوصول الى

اول رقم

LBound

واخر رقم عن طريق

UBound

يصبح شكل الكود

كالاتى

Sub OneDimensionalArray()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
    Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"
For i = LBound(Arr) To UBound(Arr)
Cells(1, i) = Arr(i)
'MsgBox Arr(i)
Next
End Sub

تقبل تحياتى

تم تعديل بواسطه إبراهيم ابوليله
رابط هذا التعليق
شارك

بسم الله ما شاء الله عليك أخي الحبيب إبراهيم .. هو دا الشغل ولا بلاش أفكار جميلة جداً وتثري الموضوع بشكل كبير ..

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

هسهل عليك الموضوع أكتر

المصفوفة عبارة عن قيم زي ما اتعلمنا .. القيم دي بتكون بالظبط زي شكل الصف

بمعنى إن قيم المصفوفة شبيهة بالصف فلما نقول إن المصفوفة لها 7 قيم يبقا كل قيمة في عمود في صف واحد ...

هسهلها أكتر فيه خاصية اسمها Resize حاول تستغلها .....

تقبل تحياتي :fff:

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

السلام عليكم ورحمة الله وبركاته...موضوع رائع أخي الحبيب أبو البراء ومتابعة حثيثة ...ما شاء الله بارك الله..أتابع أعمالكم الرائعة بصمت ..

أحسنتم أحسن الله إليكم.والسلام عليكم.

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

ماشى ياعم ياسر

قصدك كده يعنى

Sub OneDimensionalArray()
Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
      Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"
Cells(1, 1).Resize(1, 7) = Arr
End Sub

تقبل تحياتى

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

أخي الغالي أبو يوسف

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

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

وممكن تشيل رقم 7 لو عدد عناصر المصفوفة مجهول وتضع مكانها

UBound(Arr)

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

 

نيجي بقا لسؤال تاني جميل .. عايزين نضع القيم في عمود واحد وليس في صف واحد يعني القيم توضع في النطاق من A1:A7

تقبل تحياتي ومشكور على متابعتك الممتازة للموضوع

تم تعديل بواسطه ياسر خليل أبو البراء
رابط هذا التعليق
شارك

اخى ياسر

هذه محاوله منى

Sub OneDimensionalArray()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
        Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"

Range("a1") = Arr(1)
Range("a2") = Arr(2)
Range("a3") = Arr(3)
Range("a4") = Arr(4)
Range("a5") = Arr(5)
Range("a6") = Arr(6)
Range("a7") = Arr(7)
End Sub
Sub OneDimensionalArray2()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
    Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"
For g = 1 To UBound(Arr)
Cells(g, 1) = Arr(g)
Next
End Sub
Sub OneDimensionalArray3()
    Dim Arr(1 To 7) As String
    
    Arr(1) = "sat"
    Arr(2) = "san"
    Arr(3) = "mon"
    Arr(4) = "tu"
    Arr(5) = "wen"
    Arr(6) = "th"
    Arr(7) = "fra"
For i = LBound(Arr) To UBound(Arr)
Cells(i, 1) = Arr(i)
'MsgBox Arr(i)
Next
End Sub

تقبل تحياتى

تم تعديل بواسطه إبراهيم ابوليله
رابط هذا التعليق
شارك

بارك الله فيك وجزاك الله خيرًا أستاذنا الفاضل ابراهيم أبو ليله على المتابعة و الاجابة الموفّقة

تم تعديل بواسطه عبد العزيز البسكري
رابط هذا التعليق
شارك

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

غداً نلتقي لأنه موعد النوم ...

أستودعك الله

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

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

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

Sub OneDimensionalArray4()
Dim myArray()As Variant

myArray = Array("Sat","Sun","Mon","Tue","Wed","Thi","Fri")
Range("A1:G1") = myArray
End Sub

 

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

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

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

دلوقتي قدرت تضع قيم المصفوفة في صف ..اتشطر يلا وضع قيم المصفوفة في عمود في النطاق A1:A7

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

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

اضافه جميله الى الاكواد السابقه

.............................................

اخى ياسر

قولتلك بالراحه

شويه شويه

على العموم

اليك هذه الكود

Sub OneDimensionalArray4()
Dim Arr
Arr = Array("sat", "san", "mon", "tu", "wen", "th", "fra")
Arr = WorksheetFunction.Transpose(Arr)
Range("A1").Resize(7, 1).Value = Arr
End Sub

تقبل تحياتى

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

اخى ياسر

فكرت اجمع الكودين فى كود واحد

Sub kh_Array1()
Dim arr(7, 7) As String
arr(0, 0) = "sat"
arr(1, 0) = "san"
arr(2, 0) = "mon"
arr(3, 0) = "tu"
arr(4, 0) = "wen"
arr(5, 0) = "th"
arr(6, 0) = "fra"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
arr(0, 0) = "sat"
arr(0, 1) = "san"
arr(0, 2) = "mon"
arr(0, 3) = "tu"
arr(0, 4) = "wen"
arr(0, 5) = "th"
arr(0, 6) = "fra"
Range("a1").Resize(7, 7).Value = arr
End Sub

تقبل تحياتى

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

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

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

الشكر موصول لحبيب الكل أستاذنا " ياسر خليل أبو البراء" الذي بموضوعه جعلنا أكثر مراجعة و بحث عن المعلومات ..

ألف تحية تقدير واحترام لكما ..

دائما بنفس الكود تم  أضافة سطر للجمع كذلك بين الكوديْن :

Sub OneDimensionalArray4()
Dim myArray()As Variant

myArray = Array("Sat","Sun","Mon","Tue","Wed","Thi","Fri")
Range("A1:G1") = myArray
Range("A1:A7").Value = Application.Transpose(myArray)
End Sub

 

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

بسم الله ما شاء الله تفاعل كبير جداً من الأخ الحبيب إبراهيم والأخ الحبيب عبد العزيز

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

نريد أن نقضي على أسلوب الطالب والمعلم فكلنا هنا باحثين عن المعلومة وكلنا يكمل بعضنا البعض ..

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

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

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

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