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

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


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

الاجابة  : ستجدونها فى الجزء الثانى  من شرح الأستاذ ياسر  أظن أنها واضحة

اضافة : نسخ نطاق مستخدما أسلوب المصفوفات 

لنفرض أنه عندى مجموعة قيم فى النطاق  ("A1:A10")

كيف يمكن نسخ هذا النطاق بطريقة المصفوفات ؟

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

الكود المستخدم  فى النسخ  :  اختر واحدا  من الكودين التاليين :

Sub copyrangeusingarray()
    Dim Arr
    Arr = Range("A1:A10")
    Range("D1").Resize(UBound(Arr), 1) = Arr 'نسخ عمودى
  
End Sub

Sub copyrangeusingarray2()
    Dim Arr
    Arr = Range("A1:A10")
    Range("G5").Resize(1, UBound(Arr)) = Application.Transpose(Arr) ' نسخ أفقى للبيانات
  
End Sub

بمقارنة  الكودين  نلاحظ اختلافا بعد كلمة  Resize  هذا الاختلاف ينجم عنه  شكل النسخ أفقيا أو رأسيا  وأستاذنا ياسر شرح لنا Application.Transpose   

يلا  جرب الكودين مع وضع مجموعة قيم فى النطاق  ("A1:A10")             تحياتى لكم

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

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

Top Posters In This Topic

أخي الغالي مختار تسلم على الإضافات الجميلة

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

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

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

UBound(Arr) + 1

فيه طريقة تانية  إننا نضع جملة

Option Base 1

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

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

Option Explicit
Option Base 1

أظن أن الحل ده أبسط من الأول .

أخى ياسر يا أستاذ الصرح  فين الحل اللى ما جاش فى الشرح ؟

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

أستاذى الغالى  أنا لا أدرى حلولا أخرى ولذلك أسألك 

جائز الخلط بين الحلين يعنى نصرح بـ  Option Base 0     ونزود واحد على الأعمدة  UBound(Arr) + 1

 

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

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

ولكن يوجد حل آخر في حالة أن الإعلان عن المصفوفة كان من النوع متغير Variant

.........

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

اخى مختار

ايه ياعم انت معزب نفسك ليه

والاستاذ ياسر طبعا

احنا متأكدين انه نده معلومات كتير

عن الموضوع ده

بس انا بحب البساطه دايما

علشان كده

فكرت اعملها بالشكل ده

Sub Fillrangeusingarray()
    Dim Arr

    Arr = Array("A", "B", "C", "D")
    
    Range("A3").Resize(1, 4) = Arr

End Sub

او بالشكل ده

Sub Fillrangeusingarray()
    Dim Arr

    Arr = Array("A", "B", "C", "D")
    
     Range("a3:d3").Value = Arr

End Sub

 

تقبلو تحياتى

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

 أخى ابراهيم

التصريح    Dim Arr   تمام زى ما قال أخونا ياسر  من النوع   Variant

الرقم 4 فى الكود الأول = UBound(Arr) + 1   كله مفهوم بالنسبة لى

ويمكن أن يكون الكود بالشكل ده

Sub Fillrangeusingarray()
    Dim Arr

    Arr = Array("A", "B", "C", "D")
    
    Range("A3").Resize(LBound(Arr) + 1, UBound(Arr) + 1) = Arr

End Sub

 

لكن    حاسس إن فيه حاجة جديدة فى خزانة أبى البراء !!!

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

أخي الحبيب إبراهيم

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

وفي المثالين لو عملت Debug هتلاقي في المثالين المصفوفة بتبدأ برقم صفر

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

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

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

ينفع معاك الكود ده

ولا ايه

Sub Fillrangeusingarray()
    Dim Arr As Variant
        Arr = Array("A", "B", "C", "D")
     ReDim Preserve Arr(1 To 4) As Variant
     Range("A3").Resize(1, UBound(Arr)) = Arr

End Sub

تقبل تحياتى

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

السطر ده ايه لازمته .......؟؟!!

ReDim Preserve Arr(1 To 4) As Variant

اعمل Debug عن طريق F8 وشوف ... الفهرس للمصفوفة بيبدأ من كام ..

 

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

المشكله اخى ياسر

ان الكىبورد بتاعتى كل زراير

ال f معطله لاتعمل

فلن اتمكن من مشاهده ما ينتج عنه

الضغط على زر f8

ولكنك سألت مافائده السطر

ReDim Preserve Arr(1 To 4) As Variant

لو تم حزف هذه السطر

فلن يتم ترحيل اخر قيمه فى المصفوفه الى هيا d

الى الشيت

ولكن بعد اضافة هذا السطر

تم اعاده تحجيم المصفوفه

لتقرأ على انها تبدأ من 1 الى 4 عناصر

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

دون الحاجه الى كتابة الرقم 1

تقبل تحياتى

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

بعيدا عن Option Base 1    أو نزود واحد على الأعمدة  UBound(Arr) + 1

 

ايه رأيكم فى اسلوب الحلقات

Sub mokhtest()

Dim Arr

    Arr = Array("A", "B", "C", "D")
   
For i = LBound(Arr) To UBound(Arr)
   Cells(3, i + 1).Value = Arr(i)
Next i


End Sub

 

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

اخى مختار

منور

صاحى ليه لحد دلوقتى ياراجل

على العموم

حل موفق

ولكنى اعتقد ان الى ف دماغ

اخونا ياسر

ازاى يتم التنفيذ بدون حلقات تكراريه

على العموم نستنى بقى لحد ما اخونا ياسر

يصحى من النوم

تقبل تحياتى

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

بعيدا عن Option Base 1    أو نزود واحد على الأعمدة  UBound(Arr) + 1

 

ايه رأيكم فى اسلوب الحلقات

Sub mokhtest()

Dim Arr

    Arr = Array("A", "B", "C", "D")
   
For i = LBound(Arr) To UBound(Arr)
   Cells(3, i + 1).Value = Arr(i)
Next i


End Sub

 

طب انت ايه رأيك يقى

ان انا مش هضيف رقم 1 ده خالص

لا على المصفوفه

ولا داخل الحلق التكراريه

Sub mokhtest()
Dim arr
 arr = Array("A", "B", "C", "D")
ReDim Preserve arr(1 To 4) As Variant
   For i = LBound(arr) To UBound(arr)
      Cells(3, i).Value = arr(i)
   Next

End Sub

تقبل تحياتى

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

بسم الله ما شاء الله تفاعل جميل جداً بالموضوع وأنا نفسي استفدت من هذا التفاعل

نجرب الكود  التالي ونحاول نعمل Debug (اتصرف يا أخ إبراهيم في أي لوحة مفاتيح عشان هنحتاج نعمل Debug بشكل دائم لأن الأمر ده هيعلمنا إزاي كل سطر بيتنفذ و دا مهم جداُ في بناء الأكواد)

Sub Test()
    Dim Arr
    Arr = [{"A", "B", "C", "D"}]
    Cells(3, "A").Resize(1, UBound(Arr)).Value = Arr
End Sub

بدون استخدام كلمة Array فقط استخدمنا بدلاً منها هذه الأقواس [  ] ، وعشان تقرا المصفوفة بحيث تبدأ من الواحد استخدمنا الأقواس {  } .... بس خلاص

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

أخى ابراهيم مش بقولك إن خزانة أستاذنا ياسر مملوءة علماً وأدباً

 

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

صدقني أخي الغالي المتميز مختار

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

الحمد لله الذي بنعمته تتم الصالحات

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

  • 1 year later...

ياه

فعلا والله

من مزايا العلم

انك كلما تبتعد عنه يبتعد عنك اكثر من بعدك عنه

اياك ان تتعلم شيئا وتكتفى به

دون السعى المستمر لتطويره وتنميه

لانه فى هذه الحاله ستصبح لاشئ

ولذلك

انا حاسس انى اول مره اسمع او اشوف

ازاى بنتعامل مع المصفوفات

وان مش انا ال شاركت فى الموضوع ده من الاساس

وكل الشكر للاخ جمال

لانه اعاد الموضوع الى الاذهان

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

 

 

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

7 ساعات مضت, جمال الخطيب said:

جميل جدا ، وبارك الله فيكم
ولكن ما فرق بين المصفوفة ، والاسماء المعرفة ، يعني لدي خلايا من a1:b50 معرفة باسم

ولو كان هناك فرق ، ما هو الافضل ولماذا؟

الفرق ان الاول يبقى حاجز مكان في الداكرة طوال الوقت

اما المصفوفة تخزن مكان في الذاكرة وقت الحاجة اليها فقط

لذى المصفوفة فائقة السرعة

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

2 دقائق مضت, إبراهيم ابوليله said:

اخى واستاذى شوقى

فينك يا اخى من زمان

ما بنشوفك

وحشتنا ووحشتنا مواضيعك

ومشاركاتك الجميله

تقبل تحياتى

ربي يحفظك اخي ابراهيم

انتم دائما في القلب فقط ضروف الدنيا التي تبعدني عنكم

تحياتي وتقديري لك

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

3 دقائق مضت, شوقي ربيع said:

ربي يحفظك اخي ابراهيم

انتم دائما في القلب فقط ضروف الدنيا التي تبعدني عنكم

تحياتي وتقديري لك

كان الله فى العون يا اخى

تقبل تحياتى

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

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