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

omar elhosseini

المشرفين السابقين
  • Posts

    1950
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    4

كل منشورات العضو omar elhosseini

  1. كيف ترفع ملف الى المشاركة, شرح بالصور لكيفية رفع الملفات الى المشاركات
  2. تم الحل بالمشاركة الاصلية اضغط هنا
  3. الاخ almaistro اذكر المشكلة او رسالة الخطأ اذكر المكتبات التى اضفتها او ارفق الملف لعل وعسى يستطيع احد الاخوة مساعدتك
  4. الاخ كمال رزق ارفق احد الملفات المعطوبة لعل وعسى يستطيع احد الاخوة ايجاد حل للمشكلة
  5. الاخ أبو أكرم اسعدنى كلامك جدا انك استفدت من الشرح بالمرفق ما تريد Test_1.rar
  6. جزاك الله كل خير اخى ابو اسامة
  7. الاخ salehamr لو عينة البيانات تطابق الاحتمالات التى ذكرتها قد تجد من الاخوة من يستطيع مساعدتك
  8. بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين نبينا محمد صلى الله عليه وسلم الحلقات التكرارية For...Next بسؤال من اخونا justice وهذا رابط سؤال اخونا justice لمن اراد الاستفسار عن بعض النقاط او التعليق على هذه المشاركة التى تخص الموضوع المشار اليه شرح For...Next و الجوانب المتعلقة بها و طرق استخدامها التعبير For...Next هو يقوم بتكرار تنفيذ مجموعة من الاوامر او الاجراءات عدة مرات محددة العدد ونحتاج الية دائما بدلا من تكرار كتابة مجموعة اوامر مثلا 100 مرة تقوم For...Next بنتفيذة 100 مرة ولكن مجموعة اسطر الاوامر ستكتب مرة واحدة فهى تختصر الجهد والوقت و التعبير For...Next له عدة مسميات منها : الحلقة الدوارة او الحلقات الدوارة وايضا يسمى ب الحلقة او الدورة وايضا تسمى ب الحلقات التكرارية على اساس ان التعبير For...Next يؤدى الى تكرار تنفيذ مجموعة من الاوامر او الاجراءات التى تكون بين شقيى For...Next بعدد محدد من مرات التنفيذ ولذلك تسمى بالحلقة او الدوره او التكرارية والتعبير او الحلقة For...Next يستقبل اربعة متغيرات الاول :: العداد :: وهو متغبر عددى الذى يتحكم فى عدد دورات او مرات التكرار ل For...Next وهو الزامى الوجود لتعمل الحلقة الثانى :: قيمة بداية العداد :: التى بيدأ منها العداد بالعد - وهو الزامى الوجود لتعمل الحلقة الثالث :: قيمة نهاية العداد :: التى ينتهى بها العداد وينم الخروج من الحلقة التكرارية وهو الزامى الوجود لتعمل الحلقة الرابع :: الخطوة :: وهى القيمة التى يزداد او ينقص بها العداد وهى اختيارية اذا كانت قيمتها +1 والصورة المبسطة منها كما نرى : For x = 1 To 3 مجموعة اسطر من الاوامر Next x لنضع انفسنا مكان جهاز الكبيوتر لنرى كيف تعمل عندما يبدأ بقراءة هذا الكود الدورة الاولى :: السطر الاول :: وهو For x = 1 To 3 قراء الكبيوتر السطر الاول ووجد انه صدرت له الاوامر التالية ابدأ حلقة تكرارية بالعداد ( x ) الذى قيمة بدايته تساوى ( 1 ) وقيمة نهايتة تساوى ( 3 ) هذه اول دورة تكرارية ستكون قيمة العداد ( x ) تساوى ( 1 ) بمعنى اخر صدرت له الاوامر بعمل حلقة تكرارية لثلاث مرات تبدأ ب 1 وتنهى ب 3 لتنفبذ مجموعة الاوامر التى تقع بين For و Next وفى نهاية هذا السطر الاول من المفروض ان يكون هناك معامل اخر وهو الخطوة ( Step 1 ) ولكن يسمح لنا بتجاهلة طالما قيمة هذه الخطوة تساوى ( 1 ) السطر الثانى :: نفذ مجموعة الاوامر التى من الممكن ان تكون اكثر من سطر السطر الثالث :: ( Next x ) عنما يصل الى نكست يزيد قيمة العداد بقيمة الخطوة ( 1 ) اى ان قيمة العداد ( x ) ستكون مساوية ل ( 2 ) استعدادا للدورة الثانية هنا انتهت الدورة الاولى وكانت قيمة العداد = ( 1 ) وسيبدأ الدورة الثانية وستكون قيمة العداد = ( 2 ) الدورة الثانية :: سيعيد تنفيذ السطر الثانى ولكن ستكون قيمة ( x ) تساوى 2 الدورة الثالثة :: سيعيد تنفيذ السطر الثانى ولكن ستكون قيمة ( x ) تساوى 3 وفى هذه الدور الثالثة عندما ينتهى من نتفيذ السطر الثانى ( مجموعة الاوامر ) ثم ينتقل السطر الثالث ( Next ) لزيادة قيمة العداد بقيمة الخطوة ليصبح العداد ( x ) مساويا ل ( 4 ) تقول له ( Next ) لا حبيبى غير مسموح للعداد بالزيادة لان قيمة نهاية العداد هى ( 3 ) وانت تعرف ذلك من بداية الدورة الاولى اخرج من حلقتى وتنهى الحلقة تبعا لذلك المثال_1 :: Sub Ex_1() For x = 1 To 3 Range("F" & x) = x Next x End Sub لنرى هذا المثال معا وهو على نمط مثال الشرح الاولى السابق مع اضافة سطر اوامر لتنفيذة الدورة الاولى :: السطر الاول :: وهو For x = 1 To 3 العداد هو المتغير العددى x وقيمة البداية له = 1 وقيمة النهاية له = 3 اذن قيمة العداد x تساوى 1 السطر الثانى :: وهو سطر الاوامر Range("F" & x) = x اكتب فى الخلية F1 القيمة x التى تساوى 1 فى الدورة الاولى السطر الثالث :: وهو Next x ولها وظيفة واحدة فقط وهى زيادة او انقاص العداد بقيمة الخطوة وهى هنا زيادة العداد ب 1 اى تصبح x = 2 الدورة الثانية :: قيمة العداد x تساوى 2 السطر الثانى :: وهو سطر الاوامر Range("F" & x) = x اكتب فى الخلية F2 القيمة x التى تساوى 2 فى الدورة الثانية السطر الثالث :: وهو Next x يقوم بزيادة العداد x من 2 إلى 3 الدورة الثالثة :: قيمة العداد x تساوى 3 السطر الثانى :: وهو سطر الاوامر Range("F" & x) = x اكتب فى الخلية F3 القيمة x التى تساوى 3 فى الدورة الثالثة السطر الثالث :: وهو Next x نكست تجد العداد اتى اليها للزيادة مرة اخرى ماهى سيابه بقى فتذكره ايها العداد x الم ترى فى السطر الاول من الحلقة انك تنتهى عندما تكون = 3 أخرج من هذه الحلقة التكرارية وتنهى بذلك هذه الدورة التكرارية التى تم تكرارها ثلاثة مرات المثال_2 :: اذا اردنا ان نكتب فى العمود G بدأ من الصف الاول نزولا الى اسفل الارقام الفردية من 1 إلى 100 ماذا ستكون بداية العداد ونهايته وخطوته اذن ستكون بداية العداد =1 لان ال 1 عدد فردى الخطوة او مقدار الزيادة التى يزداد بها العداد لنحصل على العدد الفردى التالى ل 1 يجب ان تكون 2 ليكون العدد الفردى التالى هو 3 ونهاية العداد ستكون = 99 لان ال 99 عدد فردى وايضا يمكن ان تكون نهاية العداد = 100 لان التحكم هنا سيكون ل Next لماذا لان Next عندما يأتى اليها العداد وقيمتة 99 للزيادة الى 101 لن تسمح له Next بذلك لان قيمة نهاية العداد هى 100 ولكن يجب ان نلاحظ انه اذا استخدمنا قيمة العداد لتحديد رقم الصف الذى سنضع فية الارقام سنجد انه تبعا لقيم العداد سيكتب على السطور الفردية وهى 1...3...5...7...9...11 الخ لانها قيم العداد اذن نحن محتاجين الى احد القرود التى تستطيع العد من 1 إلى 100 ليجلس داخل الحلقة For...Next ليحدد لها الصف الذى تكتب فيه لنرى هذا المثال_2 :: Sub Ex_2() MyRow = 0 For x = 1 To 100 Step 2 MyRow = MyRow + 1 Range("G" & MyRow) = x Next End Sub الدورة الاولى :: السطر الاول :: MyRow = 0 هذا هو القرد MyRow الذى سيحدد لنا رقم الصف الذى نكتب عليه وهو خارج الحلقة وقيمتة تساوى صفر الان ولم يصحو من نومه بعد السطر الثانى :: For x = 1 To 100 Step 2 تحدثنا عنه وهو يحدد بداية العداد ب 1 ونهاية العداد ب 100 ومقدار الخطوة او الزيادة = +2 يعنى قيمة x = 1 السطر الثالث :: MyRow = MyRow + 1 ونحن الان فى الدورة الاولى من الحلقة ينشط قردنا عداد الصفوف و ستكون قيمة هذا القرد تساوى 1 السطر الرابع :: Range("G" & MyRow) = x هذا السطر بيقول اكتب فى العمود G فى صف القرد MyRow الذى قيمتة 1 اكتب x التى قيمتها 1 السطر الخامس :: سنزيد Next العداد وهو = 1 بقيمة الخطوة التى = 2 ليصبح العداد = 3 استعدادا للدورة الثانية x = 3 الدورة الثانية :: السطر الثالث :: MyRow = MyRow + 1 ونحن الان فى الدورة الثانية من الحلقة ستصبح قيمة القرد عداد الصفوف 2 السطر الرابع :: Range("G" & MyRow) = x هذا السطر بيقول اكتب فى العمود G فى صف القرد MyRow الذى قيمتة 2 اكتب x التى قيمتها اصبحت 3 و زى ما اتفقنا ان قيمة زيادة العداد ستكون 2 ويتكرر حدث الدورة الى ان يتم طرد قرد الصفوف من الحلقة الدوارة عندما تجد Next ان العداد x سيتجاوز حدود قيمة نهاية العداد وهى 100 المثال_3 :: لنتقدم خطوة الى الامام نود فيها ان نكتب فى العمود H الاعداد الزوجية بدأ من الصف الاول نزولا الى اسفل ولكن بشرط ان تكون ارقام تنازلية اى 100...98...96...94...92 وليس تصاعدية 2...4...6...8...10 لنرى هذا المثال_3 :: Sub Ex_3() MyRow = 0 For x = 100 To 2 Step -2 MyRow = MyRow + 1 Range("H" & MyRow) = x Next End Sub نرى فى هذا المثال ان القرد كما هو لانه هو منظم المرور الذى يحدد ارقام الصفوف المستخدمة سطر بداية الحلقة وهو For x = 100 To 2 Step -2 نرى ان العداد قيمتة الابتدائية = 100 وقيمتة النهائية = 2 ونلاحظ ان الخطوة او مقدار الزيادة او النقص ( Step -2 ) فى العداد ستكون سالب 2 اى -2 طبعا لاننا نود ان تبدأ الحلقة بكتابة الرقم 100 ثم 98 ثم 96 وهكذا وسيتم التنفيذ بنفس اسلوب المثال الثانى وبنفس قيم ارقام صفوف القرد العداد ولكن بلإختلاف قيمة العداد x بقيمة الزوجية لنلقى نظرة على المثال الثانى والثالث من حيث الخطوة Step سنجدها فى المثال الثانى موجبة وفى الثالث سالبة ماذا نلاحظ :: عندما تكون الخطوة Step موجبة تكون بدية العداد اصغر من نهاية العداد اما عندما تكون الخطوة Step سالية تكون بدية العداد اكبر من نهاية العداد لاتقصر فائدة الحلقات التكرارية على هذا التنفيذ البسيط ولكنها تعمل اشياء على درجة من الاهمية ويمكن ان تكون هناك حلقات تكرارية متداخلة بمعنى ان يمكن ان يكون هناك حلقتان متداخلتين معا او اكثر المثال_4 :: اذا اردنا ان نكتب الاعداد من 1 إلى 100 فى عشرة صفوف وعشرة اعمدة متتالين بدأ من الخلية الاولى فى الصف الاول اى نكتب فى الصف الاول 1 إلى 10 وفى الصف الثانى 11 إلى 20 وفى الصف الثالث 21 إلى 30 هكذا حتى 100 هنا يجب عمل حلقتان تكراريتين الحلقة الاولى :: او الخارجية ستقوم بوظيفة تحديد الصف الذى سنكتب فية وهى هنا حلقة للتحكم فى رقم الصف اى تنظيمية وستقوم بتكرار الحلقة الثانية او الحلقة الداخلية او الحلقة الفعلية التى ستكتب الارقام داخل الصف الذى حددته الحلقة الخارجية عشرة مرات بأرقام متتالية الحلقة الثانية ستقوم بتحديد رقم العمود وتقوم بالكتابة فية تبعا للصف الذى حددتة الحلقة الخارجية سابقا ماذا ينقصنا هنا فعلا ينقصنا قرد ولكن لن يكون له شأن برقم الصف او حتى برقم العمود الذى ينقصنا هنا قرد رقمى لا يعرف سوف الاعداد من 1 إلى 100 حتى يقول لنا القرد اى رقم سنكتب لنرى مثالنا Sub Ex_4() Number = 0 For MyRow = 1 To 10 For MyCol = 1 To 10 Number = Number + 1 Cells(MyRow, MyCol) = Number Next MyCol Next MyRow End Sub الدورة الاولى للحلقة الخارجية :: السطر الاول :: هذا هو القرد الرقمى Number = 0 وهو لا يعرف سوى ان يعد من 1 إلى 100 ولكن نرى ان قيمتة هنا صفر نعم لانه لن يبدأ بتحديد الرقم المراد كتابتة هنا بل وهو داخل الحلقة التكرارية الثانية وقبل كتابة تزاد قيمتة الى 1 السطر الثانى :: هو For MyRow = 1 To 10 وقد اشرنا ان الحلقة الاولى او الخارجية لتنظيم ارقام الصفوف ولذلك سمينا عدادها ب MyRow الذى يبدأ ب 1 وينتهى ب 10 وهى ارقام الصفوف التى سوف نستخدمها ولذلك ستكون قيمة MyRow فى الدورة الاولى للحلقة الخارجية = 1 السطر الثالث :: وهو For MyCol = 1 To 10 وهنا تبدأ الدورة الاولى للحلقة الداخلية من الدورة الاولى للحلقة الخارجية وقد اشرنا ان الحلقة الثانية او الداخلية لتنظيم ارقام الاعمدة والكتابة ولذلك سمينا عدادها ب MyCol الذى يبدأ ب 1 وينتهى ب 10 وهى ارقام الاعمدة التى سوف نستخدمها ولذلك ستكون قيمة MyCol فى الدورة الاولى للحلقة الداخلية للدورة الاولى من الحلقة الخارجية = 1 السطر الرابع :: هنا القرد الرقمى يبدأ فى النشاط ويجهز نفسة بأول رقم سيكتب وهو 1 Number = Number + 1 السطر الخامس :: وهو Cells(MyRow, MyCol) = Number يكتب فى الخلية التى صفها MyRow وهو = 1 وعمودها MyCol وهو = 1 يكتب فيها القرد الرقمى وهو = 1 السطر السادس :: وهو Next MyCol وهو يختص بزيادة قيمة MyCol الى 2 يعنى حدد لنا مكان الكتابة التالى بالعمود 2 على الصف الاول الخاص بالحلقة الخارجية لاننا سنتهى اولا من العشر دورات الخاصة ب الحلقة الداخلية لكتابة الارقام من 1 إلى 10 فى الصف الاول قبل ان نتقل الى Next MyRow لتغير رقم الصف استعدادا للدورة الثانية للحلقة الخارجية اذن بعد زيادة قيمة MyCol الى 2 بواسطة Next MyCol سيذهب الى السطر الرابع ليسئل القرد الرقى Number = Number + 1 اى رقم سنكتب بعد ذلك فبقول 2 ثم يذهب الى السطر الخامس وهو Cells(MyRow, MyCol) = Number مازلنا فى الحلقة الداخلية وقيمة الصف MyRow تساوى 1 لاننا لم ننهى من تنفيذ العشر دورات الخاصة بالحلقة الداخلية ولكن رقم العمود MyCol اصبح = 2 اى سيكتب فى الخلية التى رقم صفها 1 ورقم عمودها 2 سيكتب القرد الرقمى اى 2 وهكذا يستمر قى الكتابة على الصف الاول الى ان تنتهى العشر دورات الخاصة بالحلقة الداخلية وبذلك يكون كتب قى الصف الاول الارقام من 1 الى 10 وبإنتهاء العشر دورات للحلقة الداخلية يخرج منها ليصل الى السطر الثامن الخاص بالحلقة الخارجية السطر الثامن :: وهو Next MyRow لتصبح قيمة MyRow اى رقم الصف = 2 لنبدأ الدورة الثانية من الحلقة الخارجية برقم صف = 2 ويذهب الى السطر الثالث وهو For MyCol = 1 To 10 ليبدأ عشرة دورات للحلقة الداخلية من جديد وبرقم عمود 1 ورقم صف معنا من قبل ذلك وهو 2 ثم يأتى سطر الرابع سطر القرد الرقمى Number = Number + 1 ونسئلة اى رقم سنكتب فيقول 11 انا صاحى لك ثم يأتى السطر الخامس Cells(MyRow, MyCol) = Number فيقول اكتب القرد الرقمى الذى = 11 فى الخلية التى صفها = 2 وعمودها = 1 حتى تنتهى الحلقة الداخلية من دوراتها العشر الخاصة بالدورة الثانية من الحلقة الخارجبة وبذلك تكون كتبت فى الصف الثانى الارقام من 11 إلى 20 وهلم جر الى ان تنتهى الدورة الخارجية من دوراتها العشر وتكون الحلقة الداخلية قد اكملت دوراتها المائة نعم الحلقة الداخلية تؤدى 100 دورة لماذا لان الحلقة الخارجية تنفذ 10 مرات وفى كل مرة تنفذ الحلقة الداخلية 10 مرات اذن الداخلية تنفذ عشر عشرات اى 100 دورة المثال_5 :: فى كثير من الاحيان نستخدم الحلقة الدوارة فى فحص البيانات او التأكد من حدوث شئ معين ونود الخروج منها قبل ان تكمل دورتها المحددة بنهاية العداد فى هذه الحاله نستخدم الجملة الشرطية : If...Then... فاذا تحقق الشرط نخرج من الحلقة ب Exit For نعود الى المثال_1 الذى يكتب فى العمود F بدأ من الصف الاول الارقام من 1 إلى 3 ونضيف له جملة شرطية تقول بعد ما تكتب الرقم 2 اخرج من الدورة ولا تكمل باقى الدورات Sub Ex_5() For x = 1 To 3 Range("F" & x) = x If x = 2 Then Exit For Next End Sub نرى فى السطر الاول ان العداد يبدأ ب 1 وينتهى ب 3 والسطر الثانى يكتب قيمة العداد فى الخلية F1 والعداد = 1 فى الدورة الاولى السطر الثالث يختبر العداد هل هو = 2 يقول له لا السطر الثانى قى الدورة الثانية يكتب قيمة العداد فى الخلية F2 والعداد = 2 فى الدورة الثانية السطر الثالث فى الدورة الثانية يختبر العداد هل هو = 2 يقول له نعم فيقول اذن اخرج من الدورة Then Exit For نجد هنا ان الدورات الثلاثة لم تكتمل بسب السطر الشرطى الذى يجبر الحلقة على الخروج بعد ان بصل العداد الى الرقم 2 وتتم كتابتة فى بعض الاحيان نود عمل حلقة تكرارية لتكرار تنفيذ بعض الاشياء ولا يهمنا ان نعرف عددها او بدايتها ونهايتها او لا نحتاج الى قيمة الخطوة فكل ما يهمنا هو تنفيذ بعض من الاوامر على مجموعة اهداف او نقوم بالبحث عن شئ محدد فى مجموعة من الاهداف فى هذه الحالة نستخدم حالة خاصة من For...Next الا وهى For Each...Next وهى لا تختلف كثيرا عن الاولى ولكن يتم تجاهل العداد وتوابعه ( البداية - النهاية - الخطوة ) تحل محلها حلقة تكررارية على كل عناصر الهدف المثال_6 :: لنفرض انه فى العمود F فى المدى F1:F10 مكتوب الارقام من 1 إلى 10 ونود استبدال محتويات الخلية التى تحتوى على الرقم 5 بكلمة Officena Sub Ex_6() Dim Cel As Range For Each Cel In Range("F1:F10") If Cel = 5 Then Cel = "Officena" Next End Sub لا تنسى كتابة الارقام من 1 إلى 10 فى المدى F1:F10 لتتم تجربة المثال السطر الاول :: وهو Dim Cel As Range تم الاعلان عن المتغير Cel كمدى الذى ستتم علية عملية الاختبار وهذا المدى سيكون عبارة عن خلية واحدة من خلايا المدى فى كل دورة لإختبارها ففى كل دورة سيكون هذا المتغير يمثل خلية واحدة من المدة المشار اليه السطر الثانى :: وهو For Each Cel In Range("F1:F10") هنا تم الاستغناء عن العداد وتوابعه وهذا يعنى ان الدورات ستكون بعدد خلايا المدى المشار اليه Range("F1:F10") اى اعمل دورة لكل خليه فى المدى المشار اليه السطر الثالث :: وهو If Cel = 5 Then Cel = "Officena" هذا سطر الشرط او الاختبار ويقوم بإختبار الخلية التى عليها الدور اذا كانت = 5 يقوم بتغير قيمتها الى Officena اذا لم يتحقق الشرط يذهب الى السطر الرابع السطر الرابع :: وهو Next اى انتقل الى الخلية التالية فى المدى المشار اليه سابقا ليتم التنفيذ عليها وهكذا الى ان تنتهى الدورة فإذا وجد اى خلية = 5 يتم استبدال محتويتها الى Officena الى ان تنهى كل الدورات فالحلقة التكرارية For...Next من اقوى الحلقات الدوارة الاخرى واذا استعطت اجادتها وتطويعها يمكنك الاستغناء نهائيا عن الحلقتان الاخرتين وهما Do...Loop واخوتها While...Wend والحلقة Do...Loop اقوى من الحلقة While...Wend والى لقاء قريب بإذن الله بصالح دعائكم
  9. انظر الصورة والارقام اسفلها هل هذا ما تريد ام هو خطأ
  10. الاخ إكسيلجي اخى هى ليست صعبة كما تتخيل ربما حيرتك الصيغة TYPE بعض الشى فهى كمعالج الخطأ ISERROR تماما فلو كنت استبعد معالج الخطأ هذا لوضحت لك ولكن الفكرة تعتمد على العمود AA الذى يجهز ارقام صف الاسماء بدون تكرار والصيغة بعد اسبعاد معالج الخطأ ستجد انك قد استخدمتها واستخدمها الكثيرين قبل ذلك وهى كالاتى فلا تلوم نفسك وانما الملامة تقع على TYPE =INDEX(A:A;MATCH(SMALL(AA:AA;ROW());AA:AA;0)) ويتم استدعاء الاسماء التى تم تحديدها اعتمادا على العمود AA باستخدام الترتيب برقم الصف الحالى ب SMALL لعمل تتالى للأسماء التى سبق تحديدها على العموم يوجد شرح وافى بالمرفقات Omar_1.rar
  11. اخى العزيز skyblue شكرا لك اخى على كلماتك القيمة وميزة اخرى لم تلحظها اخى وهى عند وجود اسطر فارغة بين اسماء مصدر البيانات فلن تظهر فى الملخص بالنسبة لطلبك اخى مع السهولة واليسر قص العمودين ( E:F ) وادرجهم فى اى مكان من اى ورقة ويمكنك ايضا ادراجهم فى ملف اخر ولكن نتيجة الملخص لن تظهر الا اذا كان الملف مصدر البيانات مفتوح ( او افتح ملف مصدر البيانات واغلقة لتحديث الملخص ) ويمكن عمل ذلك اليا بوضع امر فتح ملف مصدر البيانات وغلقة مباشرة فى حدث فتح ملف الملخص اذا احببت ان يكون الملخص فى ملف منفصل واخبرنى بالنتيجة
  12. الاخ hsa100 هى موجودة فعلا فى العمود ( B ) ولكنه مخفى اظهر العمود تجد اسماء الاوراق
  13. الاخ ahmad_as10 عند فهم معادلات الاكسيل واجادة العمل عليها بنسبة على الاقل 70% مع بعض الذهنية الديناميكية تستطيع تكوين افضل واعقد من هذه المعادلة
  14. الاخ ghassan_aa لم افهم طلبك ارجو التوضيح الاخ almaistro شاهد المرفق اخى اضغط F1 لإختيار الخلايا التى بها صيغ او معادلات اضغط F2 لمعالجة الخلايا المحددة بصيغة التخلص من اخطاء المعادلات Error_Cells.rar
  15. اما اذا اردنا البعد عن ال subtotal وعلامات + و - مع سهولة الاستخدام ببساطة واستخدام الصيغ فقط فشاهد المرفق Omar_1.rar
  16. الاخ هادى سالم شكرا لمروكم الكريم على موضوع : اجابات للموضوعات التى يكون عنوانها ( سؤال فى VBA )
  17. تم عمل شرح للسؤال المدرج فى المشاركة الاولى فى الموضوع اجابات للموضوعات التى يكون عنوانها ( سؤال فى VBA ), شرح بعض الاوامر و التعبيرات اللغوية فى VBA اضغط الرابط للوصول الى الشرح
  18. بسم الله الرحمن الرحيم والصلاة والسلام على اشرف المرسلين نبينا محمد صلى الله عليه وسلم المدى و تعريفه : كيف نعرف المدى Range او النطاق بسؤال استفتاحى من اخونا ابو اسامة العينبوسي وهذا رابط سؤال اخونا ابو اسامة العينبوسي لمن اراد الاستفسار عن بعض النقاط او التعليق على هذه المشاركة التى تخص الموضوع المشار اليه :: المدى و تعريفه : كيف نعرف المدى Range او النطاق هذا الشراح الهدف منه ابتغاء مرضاة وجه الله سبحانه وتعالى ودعوة صالحة اعتقد والله اعلم انه اذا تم تسمية مدى او نطاق فى ورقة العمل يمكن التعامل معه مباشرة فى الاكواد بدون الحاجة الى اعادة تسميتة مرة ثانية و المدى او التطاق عبارة عن خلية واحدة او عدة خلايا متجاورة او متفرقة فيمكن ان يكون خلية واحدة او عمود او صف او جزء منهما او مجموعه من الصفوف والاعمدة كأى جدوال بيانات او يمكن ايضا ان يكون عدة مجموعات متفرقة مثلا ويتم تسميتها بأى اسم فيمكك اختيار عدة مجموعات متفرقة من الخلايا وتسميتها بأى اسم ويشترط فى اسم المدى او النطاق ان لا يكون احد الاسماء المحجوزة والخاصة بالاكسيل كمراجع الخلايا فلا يمكنك تسمية مدى بالاسم ( A1 ) المثال رقم 1 : لا تنسى تسمية المدى A1: A10 من داخل الجدول بأسم MyRng_1 لإستخدامه فى هذا المثال وللأشارة الى المدى واختيارة نستخدم الامر Range مع اسم المدى بين علامتى تنصيص متبوعا بالامر Select لأختياره ويجب وضع اسم المدى بين علامتى التنصيص على الصورة التالية : Sub Ex_1() Range("MyRng_1").Select End Sub المثال رقم 2 : اما اذا تم وضع اسم المدى فى متغير نصى يمكنك هنا التجاوز عن علامتى التنصيص واستخدام اسم المتغير النصى بدلا من اسم المدى على الصورة التالية : Sub Ex_2() TestMe = "MyRng_1" Range(TestMe).Select End Sub المثال رقم 3 : لا تنسى تسمية المدى C1: C10 بأسم MyRng_2 والمدى E1: E10 بأسم MyRng_3 ويمكن الجمع بين عدة امدية او نطاقات فى مدى واحد والتعامل معهم كأنهم مدى او نطاق واحد فأذا كان هناك ثلاثة امدية مسماه فى الجدول كالاتى : MyRng_3 MyRng_2 MyRng_1 يمكنك التعامل معهم دفعه واحدة كأنهم مدى واحد بوضع اسمائهم فى جملة Range وتفصل بينهم بالفاصلة كالمثال التالى : Sub Ex_3() Range("MyRng_1,MyRng_2,MyRng_3").Select End Sub المثال رقم 4 : ويمكن ايضا كما فى المثال الثانى وضع عدة نطاقات فى متغير نصى واحد والتعامل مع المتغير النصى الذى يشير اليهم كالاتى : Sub Ex_4() TestMe = "MyRng_1,MyRng_2,MyRng_3" Range(TestMe).Select End Sub المثال رقم 5 : ولسهولة التعامل مع الامدية او النطاقات فى الاكواد واختصارها : يفضل الاعلان عن المدى المراد التعامل معه بأستخدام جملة Dim anyname As Range هنا تم الاعلان عن الاسم anyname كمدى او نطاق داخل الكود ثم نخصص له المدى المراد التعامل معه بجملة Set بأستخدام المراجع : Set anyname = Range("G1:G10") او بأستخدام اسماء الامدية او النطاقات : Set anyname = Range("MyRng_4") وهنا يمكنك الاستغناء عن الامر Range عند التعامل مع هذا المدى واستخدام الاسم المباشر له كمدى anyname ويكون المثال رقم 5 على ذلك كالاتى : السطر الاول هو الاعلان عن بدأ الروتين او الماكرو ذو الاسم Ex_5 السطر الثانى هو الاعلان عن الاسم anyname كمدى السطر الثالث تخصيص المدى لهذا الاسم بأستخدام المراجع او السطر الرابع تخصيص المدى لهذا الاسم بأستخدام اسماء الامدية او النطاقات السطر الخامس هو التعامل مع المدى بأستخدم الاسم النائب عنه anyname واختيار المدى السطر السادس هو انهاء الروتين Sub Ex_5() Dim anyname As Range Set anyname = Range("G1:G10") 'Set anyname = Range("MyRng_4") anyname.Select End Sub ويجدر ملاحظة الاتى : اولا : عند الاشارة الى المدى بأستخدام هذا الاسلوب لا نستخدم الامر Range الذى عادة يسبق اى مدى بل نستخدم الاسم النائب عن المدى مباشرة وهو anyname لانه تم تعريفة كمدى فى جملة Dim anyname As Range وهو اسهل فى التعامل مباشرة ثانيا : الاسم النائب anyname غير معتمد داخل الجدول اى لا يمكن ان تتعامل مع كأسم مدى لانه خاص بالكود فقط المثال رقم 6 : واحب ان اشير الى شئ هام وهو : يمكن من خلال الكود تسمية اى مدى او نطاق بأسم كما نفعل داخل الجداول ويعتمد التعامل معه فى الجدول وتتم تسمية المدى من خلال الكود بعدة طرق : الطريقة التى يستخدمها معظم المبرمجين بأستخدام الجمله RefersTo كالمثال التالى : Sub Ex_6() ActiveSheet.Names.Add Name:="MyRng_5", RefersTo:="=$J$1:$J$10" Range("MyRng_5").Select End Sub ولا احبذ استخدام هذه الطريقة المطولة التى قد تسبب بعض الخلط بعدم اجادة استخدامها بين المدى العام والمحلى المثال رقم 7 : افضل الطريقة السهلة المبسطة التى تجنبنا الخلط بين نوعى الامدية Global Range / Local Range وليس الان مجال التعرض لشرح التفرقة بينهما وتتم التسمية بأستخدام جملة مكونه من ثلاثة اوامر وهى الامر الاول : اسم الورقة التى ستحتوى على المدى متبوعا بنقطة للفصل بين الامر التالى الامر الثانى : تحديد المدى المراد تسميتة بأستخدام الامر Range متبوعا بنقطة الامر الثالث : هو الامر Name متبوعا بعلامة التساوى ثم اسم المدى بين علامتى التنصيص وهو يختص بتحديد اسم المدى كالمثال التالى : Sub Ex_7() Sheets("ورقة1").Range("K1:K10").Name = "MyRng_7" Range("MyRng_7").Select End Sub المثال رقم 8 : وتوجد طريقة اخرى وهى ان اختار اى مدى ثم اطلاق اى اسم على المدى المختار بأستخدام الامر Selection.Name متبوعا بعلامة التساوى واسم المدى بين علامتى التنصيص Sub Ex_8() Selection.Name = "MyRng_8" End Sub المثال رقم 9 : اما اذا اردنا الغاء او ازالة اسم مدى مسمى سابقا عن طريق الاكواد فما اسهل الهدم Sub Ex_9() Range("MyRng_7").Name.Delete End Sub والى لقاء قريب بإذن الله
  19. فهرس الموضوعات المشروحة المدى و تعريفه : كيف نعرف المدى Range او النطاق الحلقات التكرارية For...Next التحكم فى مجموعات ادوات الفورم او النموذج ( Form ) دفعة واحدة بإستخدام الخاصية Tag الخاصية Offset
  20. الاخ إكسيلجي شكرا لك اخى العزيز ارجو منك التكرم بوضع السؤال فى موضوع منفصل على نمط موضوع الاخ عمر ابو اسامة اى العنوان يشمل سطرين : الاول : يجب ان يكون عنوان ثابت وهو ( سؤال فى VBA ) حتى استطيع الوصول الى الموضوعات ويفيد فى عملية الفهرسة الثانى : العنوان الخاص بك وهو توضيح مختصر لفحوى السؤال شكرا لك مسبقا
  21. الاخ rahekk طيعا يمكن ذلك شاهد المرفق ويجب ملاحظة خطوتين هامتين هما : 1 - عند تعين احد الاحرف الهجائية يجب ان يكتب بالاحرف الصغيرة وليس الكبيرة كالاتى : a b p = صح A B P = خطأ Sub Test_Key_P() Application.OnKey "p", "MyMacro" End Sub Sub MyMacro() ActiveCell.Offset(2, 1).Select End Sub 2 - يجب وضع اسم ماكرو تعين المفاتيح فى حدث فتح الملف حتى تعمل المفاتيح المحدده عند فتح الملف كالاتى : Private Sub Workbook_Open() Test_Key_P End Sub OnKey.rar
×
×
  • اضف...

Important Information