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

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


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

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

أخي الكريم فضل، بفضل الله ثم بمعادلة بسيطة تم المطلوب...

لا تنسونا بدعائكم الصالح، ولا تنسو الدعاء لابنتي في ظاهر الغيب...

أخوك بن علية

توزيع المواد تحت اسماء اعمدتها.rar

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

الاخ بن على

ما اروع ماقدمته

بارك الله فيك

وطامعين فى شرح المعادله

اللهم يجعل اعمالك فى ميزان حسناتك

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

ماشاء الله عليك أستاذي العظيم ( بن علية الحاجة ) دالة في منتهي الذكاء والبساطة بارك الله فيك وحفظ إبنتكم من كل سؤ

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

الاستاذ الفاضل الكبير / بن علية الحاجى

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

اللهم انت الشافى العافى اللهم انت الروؤف الرحيم اللهم انت الغفور الكريم اللهم انت الخالق العظيم بحقك ياعظيم ياكريم اشفى واعفى وبارك فى ابنة حبيبنا واخونا بن علية الحاجى واشفى يارب كل مريض بحقك ياعظيم . اللهم امين اللهم امين .

ثانيا :- استاذى الكبير / بن علية الحاجى

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

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

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

اخوتى الأفاضل

لإثراء الموضوع

هذا كود يقوم بعمل المطلوب


Sub ragab()

For i = 2 To 21

MyArr = Trim(Cells(i, 2))

    For Each cll In [c1:p1]

	   x = UBound(Filter(Split(MyArr, ","), cll)) + 1

	   If x > 0 Then Cells(i, cll.Column) = cll

    Next

Next

End Sub

توزيع المواد تحت اسماء اعمدتها رجب.rar

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

معادلة سهلة و بسيطة من الأستاذ / بن عليه , و كود و لا أروع من الأستاذ / رجب جاويش

بارك الله فيكم جميعاً و زادكم علماً

تحياتي للجميع

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

قام بنشر (معدل) · مخفي بواسطه عبدالله المجرب, يوليو 11, 2012 - بدون مشاركة
مخفي بواسطه عبدالله المجرب, يوليو 11, 2012 - بدون مشاركة

.

تم تعديل بواسطه أ / هاني عدلي
رابط هذا التعليق

نجم الاكسل

الاستاذ الفاضل / رجب جاويش

حقا لك ان تفخر يانجم الاكسل بهذا العمل الرائع

بسم الله وماشاء الله والحمد لله ولااله الا الله والله اكبر ولاحول ولاقوة الا بالله .

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

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

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

نجم الاكسل

اظن امام هذا الكود الرائع وامام هذا الفكر العالى اظن انه ان الاوان لتلاميذ ومحبين واعضاء هذا الصرح العظيم وانا أولهم مثلما استمتعوا بالحل يجب ايضا ان يستمتعوا بالعلم والفهم والشرح من استاذ جليل مثلك .

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

trim

ubound

filter

spilt

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

انا سوف انتظر وبكل لهفة وبكل حب وبكل استمتاع شرح سيادتكم . الذى اتوقع بانه سوف لايقل جمالا عن كودكم وابداعكم .

جزاكم الله كل خير مع اجمل المنى وارق التهانى لشخصكم الكريم

ولاتنسى يانجم الاكسل

لك ان تفخر بهذا العمل الرائع

فضل

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

أخى الحبيب فضل

هذا الكلام الجميل كثير على جدا فأنا حتى الآن ما زلت تلميذ أتلقى العلم من أساتذة هذا المنتدى العظيم

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

لذا أخى الحبيب كان من الصعب أن يقوم التلميذ بشرح ما تعلمه من أساتذته

ولكن تلبية لطلبك أقوم بمحاولة للشرح أدعو الله أن يوفقنى فيها

البداية


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

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

فى النهاية عذرا للاطالة

وليعذرنى أساتذتى عن أى خطأ فى الشرح

دمتم فى رعاية الله وحفظه

أخوكم / رجب جاويش

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

استاذى الفاضل نجم الاكسل

رجب جاويش

كل التحية والتقدير شاكرا لك هذا الشرح الجميل والمفيد . جزاك الله كل خير وبارك الله فيك فهذا عهدنا بك يانجم فى هذا الصرح العظيم وهو العطاء والعطاء بدون حدود . الف شكر

وبالمناسبة وللظروف السعيدة وحظى السعيد وجد وانا بكتب لك هذة المشاركة اسم العلامة الكبير عبدالله بافشير اسفل المشاركة متابع هذة المشاركة .. ففرصة طيبة لان ادعو العلامة الكبير للمشاركة معنا فى هذا الكود . وان كان لى ملحوظة بسيطة على شرح الكود وهى تخص

وكما فى المثال السابق اذا كان ناتج التصفية فارغ مثلا يكون ناتج الدالة UBound

هو -1

واظن انها صفر ولااعلم ماهو الصح بالضبط

دالة filter مش فاهم دورها قوى

دالة ubound هل هى تحضر اخر رقم فى المصفوفة ولا ايه لست ادرى ومش عارف بالضبط

على اى حالة

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

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

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

أخى الحبيب / فضل

اذا كان ناتج التصفية فارغ يكون ناتج الدالة UBound هو -1 ثم بعد اضافة رقم 1 تكون قيمة x تساوى صفر

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

أما دالة ubound تحضر اخر رقم فى المصفوفة أى الحد الأعلى للمصفوفة وفى هذه الجزئية يمكنك مراجة الرابط التالى للعالم الكبير / عبد الله باقشير

http://www.officena.net/ib/index.php?showtopic=42397

وطبعا شرف لى مشاركة أستاذى العالم الكبير / عبد الله باقشير

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

استاذى الفاضل الكبير نجم الاكسل

رجب جاويش

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

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

ولكن وتحديدا واستفسارى هو بالنسبة لهذا الكود تحديدا

x = UBound(Filter(Split(MyArr, ","), cll)) + 1

متفقين سويا بانه سوف يقوم باخراج رقم سواء كان هذا الرقم صفر او سالب واحد او واحد

هنا السؤال الجوهرى مين فى هذه الدوال الثلاث ubound او filter او spilt كان المسئول عن اخراج هذا الرقم سواء كما قلنا صفر او واحد او سالب واحد

فهمنا بالطبع ان دالة spilt وهى دالة من دوال visual basic 6 تقوم بتقطيع او بتجزئة النص الى عدة نصوص

وفهمنا ايضا ان دالة ubound تقوم باحضار اخر رقم فى المصفوفة

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

فمن اين خرج هذا الناتج سواء كان الصفر او الواحد او السالب واحد

وشكرا ياحبيبى وارجو الا اكون اثقلت عليك جزاك الله كل خير وجعل جميع اعمالك فى ميزان حسناتك وشكرا

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

أخى الحبيب / فضل

كما قلت أنت فان دالة UBound تقوم باحضار اخر رقم فى المصفوفة ( الحد الأعلى للمصفوفة )

وبالتالى تكون هذه الدالة هى المسئولة عن اخراج الرقم -1 ( والذى يعنى عدم وجود بيانات تصفية ) أو صفر ( والذى يعنى وجود بيان تصفية واحد )

هذه الأرقام طبعا قبل الجمع مع الواحد الموجود فى نهاية الجملة

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

استاذى الكبير الفاضل / رجب جاويش

اسمحلى ان استغل وجودك فى المنتدى الان وانا بكتب مشاركتى للاستفسار واجراء الحديث الممتع معك حول الكود

اولا :- ما فائدة جمع الرقم واحد وممكن الاستغناء عنه بالتعديل البسيط لهذا السطر من الكود هكذا فبدلا من اكبر من جعلتها يساوى والكود يعمل بطريقة عادية وممتازة ,

If x = 0 Then Cells(i, cll.Column) = cll

ثانيا :- ان مش متخيل شكل المصفوفة هل هى المصفوفة مرقمة مثلا من صفر الى مثلا 5 وبالتالى تخيلى عند احضار اخر رقم فى المصفوفة سوف اجد ارقام مختلفة ليست بالضرورة -1

ثالثا :- لن اخفى عنك سرا انا شاكك فى دالة filter وهى المسئولة عن هذا الرقم وان دورها مثل دور دالة countif عندنا فى الاكسل ولكن ليس معى دليل او ضمان لهذا الشك

رابعا :- منتظر تفسيرك ورايك ياحبيبى .

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

أخى الحبيب / فضل

هذا مزيد من الشرح عن دالة Filter

نفرض أن لدينا الكود الآتى


Sub ragab()

a = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

b = Filter(a, "S")

End Sub

نلاحظ أن ناتج الفلترة فى المثال السابق يكون صفيف Array الحد الأدنى له صفر ويتكون من جميع القيم التى تحتوى على حرف S فى الصفيف a وهى حساسة لحالة الأحرف ( كبيرة أو صغيرة ) وهى كالآتى

b(0) = "Sunday"

b(1) = "Saturday"

فاذا غيرنا معيار التصفية الى " sunday" مثلا يكون ناتج التصفية صفيف Array يتكون من حد واحد فقط ( رتبته صفر ) وهو كالاتى

b(0) = "Sunday"

وهكذا

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

أخوك / رجب جاويش

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

أخى الحبيب / فضل

اليك مقطع فيديو صغير يزيل الشك الخاص بدالة Filter تماما

ويؤكد لك أنها بعيدة عن دالة countif تماما

وأنها ينتج عنها صفيف Array حده الأدنى صفر ويتكون من جميع القيم الناتجة عن عملية الفلترة

test5.rar

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

استادى الفاضل / رجب جاويش

سامحنى سامحك الله وان شاء الله سوف تكون اخر ملاحظة

ماهو تفسيرك عند تنفيذ هذا الكود وظهور رقم 1

Sub ragab()

a = Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

b = UBound(Filter(a, "S"))

Range("a1").Value = b

End Sub

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

أخى الحبيب / فضل

كما اتفقنا من قبل أن دالة Filter فى هذا المثال ينتج عنها Array ( حده الأدنى صفر ) ويتكون من عنصرين

كالآتى


b(0) = "Sunday"

b(1) = "Saturday"

ويكون الحد الأدنى صفر والحد الأعلى 1

وكما اتفقنا أيضا أن دالة UBound تعطى الحد الأعلى للمصفوفة الناتجة

لذا يكون الناتج 1

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

استاذى الفاضل الكبير/نجم الاكسل

رجب جاويش

كل الشكر والتقدير لشخصكم الكريم على المجهود الكبير الذى تبذلونه فى نشر العلم والمعرفة . وسعيكم المخلص على تلبية كل استفسارات وتساؤلات الاعضاء .

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

جزاك الله كل خير ياحبيبى يانجم

ويارب نتقابل ان شاء الله فى مشاركات اخرى اكثر اثارة واكثر متعة . وان شاء الله فى القريب العاجل

اخوك فضل

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

السلام عليكم

بعد اذن الاساتذة الكرام

بصراحة اعجبني الحل البسيط للاستاذ بن عليه واقتبس

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

اللهم انت الشافى العافى اللهم انت الروؤف الرحيم اللهم انت الغفور الكريم اللهم انت الخالق العظيم بحقك ياعظيم ياكريم اشفى واعفى وبارك فى ابنة حبيبنا واخونا بن علية الحاجى واشفى يارب كل مريض بحقك ياعظيم . اللهم امين اللهم امين .

========================================

ثالثا :- لن اخفى عنك سرا انا شاكك فى دالة filter وهى المسئولة عن هذا الرقم وان دورها مثل دور دالة countif عندنا فى الاكسل ولكن ليس معى دليل او ضمان لهذا الشك

حل ممتاز واستخدام رائع للصفيف من الاخ رجب

واقول لاخي فضل

يختلف عمل filter عن countif وهي كما شرحها الاخ رجب

واذا اردت الحل بدالة

countif اليك الحل


Sub Abu_Ahmed()

Dim cl As Range

For i = 2 To 21

For Each cl In [C1:P1]

If Application.CountIf(Cells(i, 2), "*" & cl & "*") >= 1 Then Cells(i, cl.Column) = cl

Next cl

Next i

End Sub

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

السلام عليكم

الاخ الحبيب والخلوق بن عليه حفظك الله

وحفظ ابنتك الحبيبة من كل مكروه

وابلغكم رمضان وغفر لكم

واقتبس

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

اللهم انت الشافى العافى اللهم انت الروؤف الرحيم اللهم انت الغفور الكريم اللهم انت الخالق العظيم بحقك ياعظيم ياكريم اشفى واعفى وبارك فى ابنة حبيبنا واخونا بن علية الحاجى واشفى يارب كل مريض بحقك ياعظيم . اللهم امين اللهم امين .

تقبل تحياتي وشكري

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

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