أخى الحبيب فضل
هذا الكلام الجميل كثير على جدا فأنا حتى الآن ما زلت تلميذ أتلقى العلم من أساتذة هذا المنتدى العظيم
وأى عمل أو كود أقوم بعملة ما هو الا حصيلة ما تعلمته من الأساتذة المبدعين وهم كثير ولكنى أخص بالذكر منهم اثنين لشدة حبى وتقديرى لهم فقد تعلمت منهم الكثير والكثير وهم الأستاذ / عبد الله باقشير والأستاذ / عبد الله المجرب
لذا أخى الحبيب كان من الصعب أن يقوم التلميذ بشرح ما تعلمه من أساتذته
ولكن تلبية لطلبك أقوم بمحاولة للشرح أدعو الله أن يوفقنى فيها
البداية
MyArr = Trim(Cells(i, 2))
دالة TRIM تترك مسافة واحدة بين الكلمات وتزيل كل المسافات الزائدة الأخرى
وبالتالى يكون MyArr مساوى لقيمة الخلية Cells(i, 2) بعد ازالة المسافات الزائدة
السطر التالى
For Each cll In [c1:p1]
بداية حلقة تكرارية لجميع الخلايا من C1 الى P1 وهى الخلايا التى تحتوى على أسماء مواد الدور الثانى
أما الجملة التالية فهى جملة مركبة تعلمتها من الأستاذين الكبيرين عبد الله باقشير وعبد الله المجرب
x = UBound(Filter(Split(MyArr, ","), cll)) + 1
ولفهم هذه الجملة لابد من تجزئتها وفهم آليه عمل كل جزء أولا ( من الداخل الى الخارج)
1- دالة SPLIT تقوم بتجزئة نص معين ( جملة مثلا ) الى عدة نصوص أو أجزاء ( كلمات مثلا )
وبالتالى الدالة Split(MyArr) تقوم بتجزئة النص المكتوب فى الخلية المقصودة
مثال
اذا كانت الخلية الموجودة فى العمود ( B ) عمود مواد الدور الثانى تحتوى على ( " تاريخ – فيزياء" ) مثلا فان ناتج التقسيم يكون
" تاريخ"
"-"
"فيزياء"
2- دالة FILTER تقوم بعمل تصفية لناتج التقسيم ( الموجود فى الخطوة السابقة ) ويكون معيار التصفية هو الخلية cll وهى الخلايا من C1 الى P1
Filter(Split(MyArr), cll)
فاذا كانت الخلية cll تساوى عربى مثلا فان ناتج التصفية يكون فارغ ( بناءا على ناتج التقسيم السابق)
واذا كانت الخلية cll تساوى تاريخ مثلا فان ناتج التصفية يكون " تاريخ" فقط وهكذا
3- الدالة UBound تستخدم مع المصفوفات Arrays لمعرفة الحد الأعلى للمصفوفة
وكما فى المثال السابق اذا كان ناتج التصفية فارغ مثلا يكون ناتج الدالة UBound
هو -1
أما اذا كان ناتج التصفية " تاريخ" مثلا يكون حد واحد وتكون رتبته ( (index له ( صفر )
ثم بعد ذلك تم اضافة رقم 1 الى الجملة
x = UBound(Filter(Split(MyArr, ","), cll)) + 1
وبالتالى اذا كانت قيمة x تساوى الصفر معنى ذلك أن ناتج التصفية فارغ
وأما اذا كانت قيمة x أكبر من الصفر معنى ذلك أن ناتج التصفية له قيمة تساوى قيمة خلية من الخلايا من C1 الى P1
وبالتالى تكون الخطوة التالية هى وضع قيمة الخلية فى المكان المناسب فى العمود الخاص بها
فى النهاية عذرا للاطالة
وليعذرنى أساتذتى عن أى خطأ فى الشرح
دمتم فى رعاية الله وحفظه
أخوكم / رجب جاويش