ياسر خليل أبو البراء قام بنشر أكتوبر 8, 2016 قام بنشر أكتوبر 8, 2016 السلام عليكم ورحمة الله وبركاته كود البحث المتقدم باستخدام المصفوفات VBA Arrays قدم لنا الأخ الغالي ياسر العربي صاحب الجولات والصولات كود رائع ، ويستخدم الكود في البحث المتقدم ، وقد استخدم المصفوفات والتي هي عشقي في التعامل مع الأكواد ، حيث يتم تنفيذ جميع أسطر الكود بالذاكرة بعيداً عن التعامل بشكل مباشر مع ورقة العمل ، مما يجعل الكود أسرع مئات المرات من استخدام الحلقات التكرارية العادية. وقد ارتأيت أن أقوم بشرح لأسطر الكود ليكون مرجع لكل طالب علم ولكل باحث في هذا الخصوص ، ولنبدأ مرحلة جديدة من عالم الأكواد باستخدام المصفوفات VBA Arrays ، لما لها من مرونة عالية وسرعة فائقة في تنفيذ الأكواد. يوجد بالمرفق ورقتي عمل أحدهما باسم Data وفيها البيانات الخام من 14 عمود ، والورقة الأخرى باسم Result للنتائج وبها الخلية G2 والتي توضع بها نص الكلمة المراد البحث عنها. وإليكم الكود مع الشرح بالتفصيل (وضعت مثال بسيط ليستطيع المتتبع للشرح فهم الكود بسهولة) Sub Araby_Search() 'تعريف المتغير لورقة العمل التي تحتوي على البيانات الخام Dim wsData As Worksheet 'تعريف المتغير لورقة العمـل المطلـوب إظهـار النتائـج بها Dim wsResult As Worksheet 'تعريف المتغير ليحمل قيم المصفـوفة للبيانات الخـام Dim Arr As Variant 'تعريف المتغير ليحمل قيم المصفوفة للنتائج المطلوبة Dim Temp As Variant 'تعريـف المتغير من النـوع النصي ليحمـل قيمة أو نص البحث 'أي الكلمة المطلوب البحث عنها يتم تخزينها في هذا المتغير Dim strSearch As String 'تعريف المتغير وسيستخدم في الحلقة التكرارية لصفوف المصفوفة Dim I As Long 'تعريف المتغير وسيستخدم في الحلقة التكرارية لأعمدة المصفوفة Dim J As Long 'تعريف المتغير وسيستخدم في مصفوفة النتائج لزيادة مقدار الصفوف بمقدار واحد Dim P As Long 'تعيين قيمة للمتغير ليساوي ورقة العمل التي تحتوي '[Data] على البيانات الخام المطلوب معالجتها والمسماة Set wsData = Worksheets("Data") 'تعيين قيمة للمتغير ليساوي ورقة العمل التي تريد إظهار '[G2] النتائج بها بمجرد إدخال قيمة أو نص محدد في الخلية Set wsResult = Worksheets("Result") 'مسح النطاق الذي توضع فيه النتائج استعداداً لوضع النتائج الجديدة wsResult.Range("A8:N10000").ClearContents '[G2] تعيين قيمة للمتغير ليساوي قيمة الخلية 'وهي الخلية التي ستوضع فيها نص الكلمة المطلوب البحث عنها strSearch = wsResult.Range("G2").Value 'تعيين قيمـة للمتغير ليحمل قيم النطاق بالكامل للبيانات الخام ' وذلك [Data] حيث أن مصـدر البيانات الخام ورقة العمل المسماة 'عند [N] وينتهي في العمود [A5] في النطاق الذي يبدأ من الخلية '[&] آخـر صف به بيانات ، ويتم تحديده عن طريـق الجزء بعد علامـة Arr = wsData.Range("A5:N" & wsData.Cells(Rows.Count, 1).End(xlUp).Row).Value 'والتي ستحمل قيم النتائج [Temp] إعادة تعيين أبعاد المصفوفة المسماة '[Arr] وتكون بنفس أبعاد المصفوفة التي تحمل البيانات الخام والمسماة 'سنعتبر المصفوفة أشبـه بالصفـوف والأعمدة حيث الرقـم 1 يمثـل الصفـوف 'بإرجاع أكبر قيمة [UBound]بينما الرقم 2 يمثل الأعمدة ، وتقوم الكلمة 'أبعاد المصفوفة في هذه الحالة >> '------------------------------- 'البعد الأول سيكون من 1 إلى أكبر قيمة للصفوف 'البعد الثاني سيكون من 1 إلى أكبر قيمة للأعمدة ReDim Temp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2)) 'حلقة تكرارية من الصف الأول للمصفوفة إلى آخر صف بها For I = 1 To UBound(Arr, 1) 'إذا كان النص المطلوب البحث عنه فارغ يتم الخروج من تنفيذ الكود If strSearch = "" Then Exit Sub 'هذا السطر هو أهم سطر بالكود حيث هو الشرط الذي من خلاله 'والشرط [Temp] ستوضع النتائج في مصفوفة النتائج المسماة 'هـو تطابق قيمة المصفوفة في صف الحلقة في العمود رقم 14 'حيث يمثـل الرقم 14 العمود داخـل مصفوفة البيانات الخام '[strSearch] يتـم اختبـار التطابـق مع نـص البحث المسمى If Arr(I, 14) Like "*" & strSearch & "*" Then 'زيادة مقدار المتغير بمقدار 1 'فائدة المتغير هنا هو أنه مع كل حلقة تكرارية 'إذا تحقق الشرط فقط يزيد المتغير بمقدار واحد 'ليمثل هذا المتغير صفوف مصفوفة النتائج الجديدة P = P + 1 'حلقة تكرارية داخلية من العمود الأول للمصفوفة إلى آخر عمود بها For J = 1 To UBound(Arr, 2) 'تعبئـة مصفـوفة النتائـج بالبيانات مـن مصفوفة البيانات الخام '[Temp]مثـال لتتضح صورة كيفية تعبئة المصفوفة الجديدة المسماة 'في أول حلقـة سيكون مقداره 1 ويمثل أول صف [P] المتغيـر المسمى 'أول صف هنا لمصفوفة النتائج 'في أول حلقة سيكون مقداره 1 ويمثل أول عمود [J] المتغير المسمى 'في أول حلقة سيكون مقداره 1 ويمثل أول صف [I] المتغير المسمى 'أول صف هنا لمصفوفة البيانات الخام Temp(P, J) = Arr(I, J) 'الانتقال للحلقة التالية للأعمدة Next J 'نهاية جملة الشرط وهو تطابق نص البحث مع العمود رقم 14 في المصفوفة End If 'الانتقال للحلقة التالية في صفوف مصفوفة البيانات الخام Next I 'إذا كانت قيمة المتغير أكبر من صفر فهذا يعني أنه تم إيجاد نتائج للبحث 'حيث أن زيادة المتغير كما أوضحنا مقرونة بتحقق الشرط وطالما تحقق الشرط 'فهذا يعني أن مصفوفة النتائج سيكون بها بيانات ومن ثم يتحقق الجزء الثاني '[A8] وضع نتائج مصفوفة النتائج في أول خلية في ورقة النتائج في الخلية '[P] ويتم تمديد النطاق بمقدار عدد الصفوف طبقاً لقيمة المتغير المسمى '[Temp] وبمقدار عدد الأعمدة طبقاً لأكبر عدد لأعمدة المصفوفة المسماة If P > 0 Then wsResult.Range("A8").Resize(P, UBound(Temp, 2)).Value = Temp End Sub لتحميل الملف المرفق وللإطلاع على الموضوع الأصلي قم بزيارة الرابط التالي رابط الموضوع من هنا 13 1
جلال الجمال_ابو ادهم قام بنشر أكتوبر 8, 2016 قام بنشر أكتوبر 8, 2016 (معدل) ياسر خليل أبو البراء جزاك الله خيرا اسف حزين بجد على قلة التفاعل فى المنتدى تحياتى تم تعديل أكتوبر 8, 2016 بواسطه جلال الجمال_ابو ادهم 2
أبو حنــــين قام بنشر أكتوبر 8, 2016 قام بنشر أكتوبر 8, 2016 جزاك الله خيرا أخي ياسر شرح كامل للكود من ما لا يدع اي مجال للشبهة في اي سطر من الكود . 4
ياسر خليل أبو البراء قام بنشر أكتوبر 8, 2016 الكاتب قام بنشر أكتوبر 8, 2016 أخي الغالي جلال الجمال لا تحزن ..إن فرج الله قريب .. وما علينا إلا أن نزرع أما الحصاد فبالتأكيد له أوانه .. افعل ما يجب عليك فعله فلربما يأتي اليوم الذي يحتاج إليه أناس آخرون ما نقدمه .. فيتركوا لنا دعوة بظهر الغيب .. وما أجملها من دعوة من شخص لا تعرفه في زمان لا تعرفه في وقت وأجل لا تعرفه ، ومن يدري لعلها تخفف عنا أخي الحبيب أبو حنين وجزيت خيراً بمثل ما دعوت لي ولك بمثل إن شاء الله .. والحمد لله أن نال الشرح إعجابكم ، وإن كان الشرح لا يجدي مع الأكواد التي تتعامل بالمصفوفات إذ أنه يجب الشرح بشكل مباشر دون الكتابة ، ولكن حاولت أن أضع الخطوط العريضة ليتمكن الأخوة من تعلم التعامل مع المصفوفات تقبلوا وافر تقديري واحترامي 8
ياسر العربى قام بنشر أكتوبر 8, 2016 قام بنشر أكتوبر 8, 2016 جزيت خيرا اخي الغالي ابو البراء على الشرح الوافي تقبل تحياتي 4
عادل ابوزيد قام بنشر أكتوبر 8, 2016 قام بنشر أكتوبر 8, 2016 الاساتذة الكرام انتم تضعون بذور العلم فى ارض الحياه وترتوى بنفحات من افكاركم الجميلة ليتغذى عليها كل جائع والحصاد الحقيقى ليس لمن يتغذى وانما لمن زرع والحصاد بكل حبة عشر امثالها اللهم اجعل هذا العلم نوراً لكل زارع يوم القيامة 6
ياسر خليل أبو البراء قام بنشر أكتوبر 8, 2016 الكاتب قام بنشر أكتوبر 8, 2016 بارك الله فيك أخي الغالي ياسر العربي ولولا الكود الذي قدمته ما أقدمنا على مجاراتكم أخي العزيز عادل أبو زيد بارك الله فيك على كلماتك الطيبة الرقيقة ، وجزيت خيراً وننتظر أن نرى الحصاد في أعمالكم ودعائكم تقبلوا وافر تقديري واحترامي 2
عاطف عبد العليم محمد قام بنشر أكتوبر 9, 2016 قام بنشر أكتوبر 9, 2016 احسنت جزاك الله خيرا وهذا هو الملف للتطبيق عليه ( كما سبق وطلبت ) نموذج حسابات.rar 2
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2016 الكاتب قام بنشر أكتوبر 9, 2016 أخي الكريم عاطف .. لا أتذكر طلبك في الواقع ..هلا طرحت موضوع جديد ووضعت كافة المعطيات وشكل النتائج المتوقعة مع الملف المرفق ليسهل على الأخوة تقديم المساعدة المطلوبة تقبل تحياتي 1
عاطف عبد العليم محمد قام بنشر أكتوبر 9, 2016 قام بنشر أكتوبر 9, 2016 اخي الكريم حضرتك شرحت كود الاخ ياسر العربي وكنت حضرتك طلبت في موضوعه ان ارفق ملف احترافي للتطبيق عليه ولم تلبث ان طرحت الشرح فالملف المرفق فيه كافة المعطيات والنتائج المتوقعة وهو ينفذ من غير المصفوفة ولو أمكن حضرتك ينفذ باستخدام المصفوفة 1
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2016 الكاتب قام بنشر أكتوبر 9, 2016 سأحاول العمل على ملفك إن شاء الله .. لكن هناك بعض الظروف لدي تمنعني من المشاركة بشكل إيجابي 1
قلم-الاكسل(عبدالعزيز) قام بنشر أكتوبر 9, 2016 قام بنشر أكتوبر 9, 2016 ما نعرفش مين حنشكر صاحب الكود او صاحب طرح و شرح الكود شكر الله سعيكما وبارككماا في كل اموركما المبدع ف الشرح حتى الطفل يستطيع تعلم الكود ارجو ان يطبقه الجميع للابداع وليس للنقل فقط ولا تحرمنا ايها الياسران من ابداعاتكما واكودكما بصراحه شرح اكثر من روعه 2
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2016 الكاتب قام بنشر أكتوبر 9, 2016 بارك الله فيك أخي العزيز عبد العزيز وجزيت خيراً مشكور على كلماتك الطيبة الرقيقة وعلى مرورك العطر الندي بالموضوع والحمد لله أن نال الشرح إعجابكم ... وكما قلت المهم أن يطبقه الجميع للإبداع ، فكل منا بداخله إبداع ما عليه فقط إلا أن ينقب عنه تقبل وافر تقديري واحترامي
أبو حنف قام بنشر أكتوبر 9, 2016 قام بنشر أكتوبر 9, 2016 ما شاء الله كود ولا أروع ، وسرعة ما لها حل .... وصدق أخي @قلم-الاكسل(عبدالعزيز) فلا ندري نشكر من صاحب الشرح أم صاحب الكود ! فالشكر للاثنين معا جزاهم الله خيرا وزادهما من علمه 2
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2016 الكاتب قام بنشر أكتوبر 9, 2016 بارك الله فيك أخي الكريم أبو حنف وجزيت خيراً بمثل ما دعوت لنا تقبل تحياتي 1
خالد الرشيدى قام بنشر أكتوبر 10, 2016 قام بنشر أكتوبر 10, 2016 أستاذي الكبير / أبــــو البراء اردت ان اسجل مدي تقديري واعجابي باعمال حضرتك الاكثر من رائعة التي طالما استفيد بها والشكر موصول لاستاذي / ياسر العربي بارك الله فيك خالص تقديري واحترامي لشخصكم المحترم 2
عاطف عبد العليم محمد قام بنشر أكتوبر 10, 2016 قام بنشر أكتوبر 10, 2016 13 ساعات مضت, ياسر خليل أبو البراء said: سأحاول العمل على ملفك إن شاء الله .. لكن هناك بعض الظروف لدي تمنعني من المشاركة بشكل إيجابي مشكور مقدما واسأل الله ان ييسر لك الامور 1
ياسر خليل أبو البراء قام بنشر أكتوبر 10, 2016 الكاتب قام بنشر أكتوبر 10, 2016 بارك الله فيك أخي وحبيبي في الله خالد الرشيدي والذي طالما أحببت تواجده الدائم فيما بيننا لما له من مكانة عالية بيننا مشكور على مرورك الكريم أخي عاطف وإن شاء الله إذا لم يتدخل أحد الأخوة سأحاول العمل على طلبك 2
حماده سعد الله قام بنشر نوفمبر 16, 2016 قام بنشر نوفمبر 16, 2016 أحبائي في الله جزاكم الله علي هذه الأعمال الرائعة وجعلها في ميزان حسناتكم أرجو معرفة كيفية زيادة عدد الأعمدة في موضوع المصفوفات وشكرا
Medo Basha قام بنشر ديسمبر 1, 2016 قام بنشر ديسمبر 1, 2016 السلام عليكم ورحمة الله وبركاته أرجو منكم المساعدة لو تكرمتم .. لدي ملف اكسل به أكثر من ورقة عمل وأريد أن اطابق البيانات الموجودة في الورقة الأولى مع ما هو موجود في الأوراق الأخرى فما هي الطريقة .. وجزاكم الله خيرا
ناصر سعيد قام بنشر ديسمبر 1, 2016 قام بنشر ديسمبر 1, 2016 أرجو معرفة كيفية زيادة عدد الأعمدة في موضوع المصفوفات وشكرا جزاكم الله خيرا في صفحه الهدف وليس صفحه المصدر
Medo Basha قام بنشر ديسمبر 5, 2016 قام بنشر ديسمبر 5, 2016 في ١/١٢/٢٠١٦ at 11:06, Medo Basha said: السلام عليكم ورحمة الله وبركاته أرجو منكم المساعدة لو تكرمتم .. لدي ملف اكسل به أكثر من ورقة عمل وأريد أن اطابق البيانات الموجودة في الورقة الأولى مع ما هو موجود في الأوراق الأخرى فما هي الطريقة .. وجزاكم الله خيرا نرجو التكرم بالمساعدة لمن يعرف .. وجزاكم الله خيراً
ياسر خليل أبو البراء قام بنشر ديسمبر 15, 2016 الكاتب قام بنشر ديسمبر 15, 2016 'والتي ستحمل قيم النتائج [Temp] إعادة تعيين أبعاد المصفوفة المسماة '[Arr] وتكون بنفس أبعاد المصفوفة التي تحمل البيانات الخام والمسماة 'سنعتبر المصفوفة أشبـه بالصفـوف والأعمدة حيث الرقـم 1 يمثـل الصفـوف 'بإرجاع أكبر قيمة [UBound]بينما الرقم 2 يمثل الأعمدة ، وتقوم الكلمة 'أبعاد المصفوفة في هذه الحالة >> '------------------------------- 'البعد الأول سيكون من 1 إلى أكبر قيمة للصفوف 'البعد الثاني سيكون من 1 إلى أكبر قيمة للأعمدة ReDim Temp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
abbermustfa قام بنشر ديسمبر 16, 2016 قام بنشر ديسمبر 16, 2016 جزاكم الله خير ا الصفحه الام بها بيانات ومنها نستطيع ان نبحث عن الناجحين وعن طلاب الدور التاني وجلبهم ... السؤال ولو عايزين نجلب الصفحه كامله الناجحين مع الدور التاني باعمده محدده نعمل ايه ؟
ياسر خليل أبو البراء قام بنشر ديسمبر 16, 2016 الكاتب قام بنشر ديسمبر 16, 2016 نضيف شرط لسطر الشرط الموجود باستخدام الدالة AND .. ادرس الكود بشكل جيد واقرأ الشرح بشكل جيد لكي تتعرف أكثر والأفضل التطبيق 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.