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

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

قام بنشر

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

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

لنفرض أنه عندى مجموعة قيم فى النطاق  ("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 هتلاقي في المثالين المصفوفة بتبدأ برقم صفر

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

قام بنشر

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

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

ال 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

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