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

محمد حجازي

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

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

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

  • Days Won

    2

كل منشورات العضو محمد حجازي

  1. السلام عليكم ... انقر على الخيار Customize الموجود ضمن القائمة Tools لتظهر لك نافذة ، ضمن التبويب Toolbars حدد المربع Forms ليظهر لك شريط النماذج وبداخله أدوات التحكم المختلفة. استخدم الأداة Option Button وبنفس الطريقة المشروحة للأداة السابقة. بالتوفيق
  2. السلام عليكم ... راجع الرابط التالي: http://www.officena.net/ib/index.php?showtopic=5320
  3. السلام عليكم ... هذا تطبيق عملي كما وعدكم سابقاً : تنتج شركة الأمل للألبان ثلاثة أنواع من المنتجات . تتطلب كل وحدة من المنتج الأول أربع دقائق من وقت الآلات، وأربعون دقيقة من وقت العمال وبكلفة إنتاج مقدارها عشرُ ليرات للوحدة الواحدة . أما المنتج الثاني فتحتاج الوحدة منه إلى ثلاث دقائق من وقت الآلات ، وخمسون دقيقة من وقت العمال وبكلفة إنتاج مقدارها اثنتي عشرة ليرة . في حين تحتاج كل وحدة من المنتج الثالث إلى خمس دقائق من وقت الآلات ، ومائة وعشرون دقيقة من وقت العمال وبتكلفة خمس عشرة ليرة . علماً بأن أسعار بيع هذه المنتجات على التوالي هي : 17 ، 20 ، 25 ليرة . فإذا كانت هذه الشركة تعمل بمعدل ستة أيام في الأسبوع وبمعدل عمل صافي مقداره 16 ساعة يومياً . وكان يوجد بها ست آلات وستون عاملاً وميزانية أسبوعية مقدارها 15000 ليرة . هذا بافتراض أن كل ما ينتج يسوق . فكيف يمكن توزيع الطاقة المتوفرة بهذه الشركة بشكل يزيد من أرباحها . (المصدر : امتحانات جامعة القدس المفتوحة ، أما الحل فهو نتاج مجهودي الشخصي الذي يحتمل الخطأ :h ) الحل: بفرض أن : X1 : عدد الوحدات المنتجة أسبوعياً من المنتج الأول X2 : عدد الوحدات المنتجة أسبوعياً من المنتج الثاني X3 : عدد الوحدات المنتجة أسبوعياً من المنتج الثالث النموذج الخطي يكون على الشكل التالي : والآن لنبدأ بحل النموذج الخطي السابق : لنقم أولاً برسم الجدول التالي و وضع الصيغ في كل خلية حسب العلاقات الموجودة في النموذج الخطي : نلا حظ من الشكل السابق (في شريط الصيغة) أن الصيغة التالية : =7*A3+8*B3+10*C3 و الموجودة في الخلية D3 تعبر عن تابع الهدف بدلالة متغيرات القرار الممثلة بالخلايا A3 , B3 , C3 . وبنفس الطريقة نضع الصيغ في الخلايا الباقية كما يلي : الخلية B6 : =4*A3+3*B3+5*C3 الخلية B7 : =40*A3+50*B3+120*C3 الخلية B8 : =10*A3+12*B3+15*C3 أما في الخلايا C6 , C7 ، C8 فيتم وضع ثوابت المتراجحات (الطرف الأيمن للمتراجحات) . والآن نقوم بفتح برنامج Solver وإدخال المعلومات فيه كما في الشكل التالي : نلاحظ أن خلية الهدف هي الخلية $D$3 ، وأن تابع الهدف من نوع Max كما نلاحظ أن الخلايا التي تحتوي على المتغيرات موجودة ضمن المجال $A$3:$C$3 ونلاحظ من الشكل السابق المتراجحات المقيدة لنموذج البرمجة السابق ، هذا ونلاحظ أننا أدخلنا قيود عدم السلبية في البرنامج (وكما ذكرنا سابقاً بأننا يمكننا الاستغناء عن قيود عدم السلبية بمجرد تحديد الخيار Assume Non-Negative من نافذة Solver Options) بعد الانتهاء من كل ما سبق نضغط على الزر Solve فتظهر لنا النافذة التالية : نلاحظ تغير قيم الخلايا A3 , B3 , C3 ، وبالتالي تغير قيم الخلايا B6 , B7 , B8 ، D3 . الحل الناتج يقترح بأن ننتج 1500 وحدة أسبوعياً من المنتج الأول ولا ننتج أي وحدة من المنتجين الثاني و الثالث ، حيث يتحقق ربح أسبوعي مقداره 10500 ليرة ، وهو أعظم ربح ممكن . وفي هذه الحالة فإنه يجب أن تعمل الآلات بمقدار 6000 دقيقة عمل فعلية ، ويجب أن يعمل العمال بمقدار 60000 دقيقة عمل فعلية ، وحيث أن ميزانية الإنفاق الأسبوعية سوف تستهلك بالكامل . نلاحظ من الحل السابق (مقارنة الخلايا B6 وB7 بالخلايا C6 و C7) وجود فائض غير مستغل في كل من وقت الآلات و وقت العمال (طاقة معطلة) ، وفي هذه الحالة نحن أمام خيارين : 1. التخلص من الطاقة الفائضة قبل البدء بالإنتاج ، أي بيع الآلات وتسريح العمال الفائضين عن الحاجة وذلك لعدم تحمل تكاليف إضافية لا فائدة منها (رواتب ، تكاليف صيانة الآلات ، تكاليف تعطيل رأس المال ، ... الخ) . 2. دراسة إمكانية استغلال الطاقة الفائضة ، حيث يوجد عدة طرق لمعالجة هذه المشكلة من بينها زيادة ميزانية الإنفاق الأسبوعية ، وهذا يتطلب إجراء مقارنة بين سعر الظل للوحدة النقدية الإضافية (الربح الإضافي الناتج عن زيادة ميزانية الإنفاق الأسبوعية بمقدار وحدة نقدية واحدة) وتكلفة اقتراضها . عذراً ، لا أستطيع التوسع في الشرح أكثر من ذلك لأن مهمتي الآن هي شرح برنامج Solver وليس إعطاء دروس في بحوث العمليات .... ومن كان يريد الاستزادة فعليه بالمراجع . في هذه المرحلة يخيرنا البرنامج بين الاحتفاظ بقيم الحل على ورقة العمل بالنقر فوق Keep Solver Solution ، أو استعادة البيانات الأصلية بالنقر فوق Restore Original Values . يمكنك الحصول على أحد أنواع التقارير الموجودة في المربع Reports ، وذلك بتحديد التقرير المرغوب و النقر فوق OK ليتم إنشاء التقرير في ورقة عمل جديدة . يستخدم الزر Save Scenario لحفظ قيم الخلايا القابلة للتعديل كسيناريو . ملاحظات: 1. في المثال السابق ، إذا كانت المنتجات غير قابلة للتجزئة فإنه يجب تعريف القيم الموجودة في الخلايا A3 , B3 , C3 كأعداد صحيحة Int وذلك في المجموعة Subject to the Constraints: . 2. إذا كانت إحدى القيم الموجودة في الخلايا B6 , B7 , B8 غير محققة للمتراجحة المقابلة لها ، فهذا يعني أن المسألة مستحيلة الحل . حيث أن Solver يقوم بالبحث عن الحل الأمثل في حدود القيود المفروضة ، وعندما لايجد حلاً أمثلاً فإنه يقوم بالبحث عن الحل الأمثل الذي يحقق أكبر عدد ممكن من القيود المفروضة . إليكم الآن مسألة أخرى أترك حلها لكم : ملاحظة : لقد توخيت البساطة في المسائل التي طرحتها ، ومن يريد مسائل أكثر تعقيداً فعليه بالمراجع المتخصصة . مرفق مثال عن المسألة السابقة: بقي لدينا التحدث عن التقارير التي يوفرها لنا الـ Solver ، و عن رسائل الخطأ المحتمل ظهورها عند استخدامه ، وسوف أتابع الشرح إن شاء الله في هذين الموضوعين عندما استطيع الحصول على بعض الوقت لإتمام ذلك. تحياتي Solver.zip
  4. السلام عليكم ... بعد أن تعرفنا في الدرس السابق على كيفية تشكيل نموذج برمجة خطية ، سنتعرف اليوم على كيفية حل هذا النموذج بواسطة تطبيق Solver : من القائمة Tools نختار Add-Ins لتظهر لنا النافذة التالية : إذا لم يكن مربع الاختيار Solver Add-in مفعلاً فقم بتفعيله ثم اضغط OK . قم باختيار القائمة Tools مرة أخرى وستجد الخيار Solver قد أدرج ضمنها : قم باختيار Solver حتى تظهر لك النافذة التالية : نضع في المربع Set Target Cell مرجع الخلية التي تحتوي على تابع الهدف ، ونحدد في الخيار Equal To: نوع تابع الهدف : Max : تعني أن البرنامج يقوم بالبحث عن أعلى قيمة ممكنة لتابع الهدف عند حل النموذج ، وذلك ضمن القيود المفروضة . Min : تعني أن البرنامج يقوم بالبحث عن أصغر قيمة ممكنة لتابع الهدف عند حل النموذج ، وذلك ضمن القيود المفروضة . Value of : تعني أن البرنامج يعمل على حل النموذج عند قيمة محددة لتابع الهدف ، وذلك ضمن القيود المفروضة . نضع في المربع By Changing Cells مرجع الخلايا التي تحتوي على متغيرات النموذج الخطي ، الخيار Guess يقوم بتوقع الخلايا التي تحتوي على متغيرات النموذج في ضوء الخلية التي تحتوي على تابع الهدف (أنا شخصياً لا أنصح باستخدام هذا الخيار لأنه لا يعطي نتائج صحيحة في أغلب الأحيان ، و أنصح بالاعتماد على الإدخال اليدوي لنطاق الخلايا التي تحتوي على متغيرات النموذج) . في المجموعة Subject to the Constraints: نقوم بإدخال القيود : الخيار Add لإضافة القيود ، الخيار Change لتعديل القيود المظللة ، الخيار Delete لحذف القيود المظللة . نضغط على الخيار Add لتظهر لنا النافذة التالية : في المربع Cell Reference: أدخل مرجع الخلية التي تريد تقييد القيمة (Constraint) له ، بمعنى آخر أدخل مرجع الخلية التي تحتوي على الطرف الأيسر للقيد (قيد مورد ، قيد متغير) . انقر فوق العلاقة ( <= أو = أو >= أو Int أو Bin ) التي تريد تطبيقها بين طرفي القيد ، عند النقر فوق Int تظهر كلمة integer (عدد صحيح) في المربع Constraint . عند النقر فوق Bin تظهر كلمة binary (ثنائي 0 أو 1) في المربع Constraint . في المربع Constraint نضع رقماً أو مرجع الخلية التي تحتوي على ثوابت القيود (الطرف الأيمن للقيود) . لقبول القيد وإضافة آخر، انقر فوق Add . لقبول القيد والعودة إلى مربع الحوار Solver Parameters، انقر فوق OK . ملاحظات : 1. يمكنك تطبيق العلاقتين Int و Bin في القيود الموجودة على الخلايا التي يمكن تعديلها فقط . 2. يمكن لبرنامج Solver أن يقبل عدداً من المتغيرات قد يصل إلى 200 متغير ، كما أنه يمكن أن يتضمن كل متغير على قيود قد تصل إلى 100 قيد ، وذلك بالإضافة إلى الحدود وقيود الأعداد الصحيحة على المتغيرات . الخيار Reset All لإعادة الإعدادات إلى قيمها الأصلية. الخيار Options يسمح لنا بتصميم الطريقة التي يقوم بها Solver بحل المشكلة ، وذلك حسب الخيارات التالية : - المربع Max Time يحدد أقصى وقت للحل (عدد الثواني التي تريد السماح بها لوقت الحل) ، حيث يمكن إطالة هذا الزمن حتى 32767 ثانية . - المربع Iterations يحدد العدد الأقصى للتكرارات أو عدد المرات التي يمكن أن يعمل من خلالها البرنامج على حل المشكلة . - المربع Precision يحدد درجة الدقة التي يجب أن يحسب بها البرنامج الحل الأمثل للمعادلة وفق القيود المفروضة ، فقد تصل هذه الدقة إلى 0.000001 وهي القيمة الافتراضية والتي تعني أنه إذا كانت قيمة معادلة القيد ضمن 0.000001 من ثابت القيد فهذا الجواب مقبول . - المربع Tolerance يحدد الدقة التي يجب أن يعتمدها البرنامج في تأكده من تحقق شروط القيود ، حيث أن نسبة التفاوت المسموح به الافتراضية 5% تعني أنه إذا كانت قيمة العدد تتراوح بين 5% زيادة أو نقصاناً فإن البرنامج يعتبره عدداً صحيحاً ، وهذا الخيار يمكن استخدامه في مسائل البرمجة فقط عندما تكون القيود تستخدم أعداداً صحيحة . - المربع Convergence يحدد النقطة التي يجب أن يتوقف عندها البرنامج عن البحث عن حل أفضل ، حيث يمكننا تحديد هذا الخيار بالقيمة بين 0 و 1 ، فعندما تكون قيمة التغير في المعادلة الهدف أصغر من القيمة المحددة في مربع Convergence فإن البرنامج يتوقف عن البحث ، وتجدر الملاحظة إلى أنه كلما كانت قيمة التقارب أصغر كلما استغرق البرنامج وقتاً أطول في البحث عن الحل الأفضل . - الزر Save Model يستخدم لحفظ النموذج الحالي ، و الزر Load Model يستخدم لتحميل نموذج تم حفظه مسبقاً . - الخيار Assume Linear Model يستخدم لجعل البرنامج يفترض أن النموذج الذي يتعامل معه هو نموج خطي ، مما يبسط العمليات التي يقوم بها البرنامج الشيء الذي يختصر من زمن الحل . - الخيار Assume Non-Negative يستخدم لجعل البرنامج يقبل النتائج (قيم المتغيرات) الموجبة فقط ، وبواسطة هذا الخيار يمكن الاستغناء عن إدخال القيود التي تمثل شرط عدم السلبية . - الخيار Use Automatic Scaling يستخدم عندما نتعامل مع متغيرات ونتائج معادلات مختلفة من حيث الحجم ، كأن نقوم بحساب معدل معين باستخدام متغيرات كبيرة نسبياً من حيث المبالغ . - الخيار Show Trial Solution يستخدم لعرض قيم كل محاولة حل (لعرض نتائج كل دورة حل) . نكمل شرح البرنامج في الدرس القادم مع وعد مني بإدراج مثال عملي عن طريقة الحل .
  5. السلام عليكم ... تستخدم الوظيفة الإضافية Solver لحل مسائل البرمجة الخطية و اللاخطية ، ولكننا سنقتصر في أمثلتنا هنا على مسائل البرمجة الخطية (حيث يمكن للوظيفة Solver حل جميع مسائل البرمجة الخطية بما فيها مسائل الإنتاج و مسائل النقل و التخصيص ..... الخ) ، مع العلم أن مسائل البرمجة اللاخطية تُحل بنفس الطريقة . البرمجة الخطية : إن أسلوب البرمجة الخطية هو أحد الأساليب الهامة في اتخاذ القرارات ، وتعتبر مسائل البرمجة الخطية إحدى مسائل التفضيل Optimization Problems ، وتعتبر أيضاً من مسائل بحوث العمليات Operations Research . مسائل التفضيل هي مسائل تبحث عن تعظيم أو تقليل تابع مكون من متغيرات رقمية مع التقيد بمتراجحات تمثل شروط خاصة للمسألة . في بداية الثلاثينات تم تشكيل نوع جديد من مسائل التفضيل عرفت بمسائل البرمجة ، فعند وجود عدد من الموارد Resources (قوة عمل ، مواد أولية ، ....الخ) تشترك معاً في إنتاج سلعة أو تقديم خدمة فإنه يمكن تشكيل مسألة برمجة لحساب وإيجاد أفضل تخصيص Optimal Allocation لهذه الموارد وذلك لتحقيق هدف معين . ملاحظة : الهدف من مسائل البرمجة الخطية هو إيجاد أفضل حل ممكن (أفضل قيمة لتابع الهدف) وذلك ضمن الشروط المفروضة. مكونات مسألة البرمجة الخطية : 1. تابع هدف Objective Function نسعى لإيجاد أفضل وضع له (سواءً كان الهدف تعظيم أم تقليل) . 2. متغيرات قرار يجب تحديدها للوصول إلى الهدف المرغوب . 3. متراجحات تشير إلى الموارد وتحدد كميتها فتسمى بالمقيدات Constraints . مراحل تشكيل مسألة البرمجة الخطية : 1. تشكيل تابع الهدف. 2. وضع المتراجحات و المعادلات التي تمثل مقيدات (شروط) المسألة . 3. وضع متراجحات عدم السلبية : وتعني أن متغيرات القرار لا يمكن إلا أن تكون قيماً موجبة ، حيث يتماشى ذلك مع الواقع (لا يمكن أن تكون مثلاً عدد الوحدات المنتجة سالبة) . ملاحظة : عندما تكون العلاقة بين المتغيرات في دالة الهدف و المتراجحات الشرطية خطية ، تسمى عندئذ المسألة مسألة برمجة خطية Linear Programming . أما إذا كانت العلاقة بين المتغيرات في دالة الهدف أو أحد المتراجحات الشرطية (شروط المسألة) غير خطية ، تسمى عندئذ المسألة مسألة برمجة لا خطية Non Linear Programming . مثال مبسط : تنتج شركة المجد نوعين من المواد الغذائية X1,X2 ، حيث يحقق النوع الأول ربحاً قدره (70) وحدة نقدية ، أما النوع الثاني فيحقق ربحاً مقداره (50) وحدة نقدية . إن إنتاج وحدة من النوع الأول يتطلب وحدتين من المادة الأولية الأولى وأربع وحدات من المادة الأولية الثانية . أما إنتاج وحدة من النوع الثاني فيتطلب أربع وحدات من المادة الأولية الأولى وأربع وحدات من المادة الأولية الثانية . أما الكمية المتاحة من المادة الأولية الأولى فهي (40) وحدة ، ومن المادة الأولية الثانية (70) وحدة . و المطلوب بناء نموذج رياضي لهذه المسألة . الحل : بفرض أن X1 هي عدد الوحدات المنتجة من النوع الأول . بفرض أن X2 هي عدد الوحدات المنتجة من النوع الثاني . فيكون النموذج الرياضي على الشكل التالي : نلاحظ أن تابع الهدف يسعى لتعظيم الأرباح هذا شرح سريع جداً ، وعذراً إن لم أستطع إيصال المعلومة بالشكل المطلوب ، وذلك لأنني افترضت أن مستخدم الوظيفة الإضافية Solver سيكون على دراية كاملة بعلم البرمجة الخطية و اللاخطية. في الدرس القادم سوف نتعرف على كيفية حل هذه النماذج الرياضية باستخدام تطبيق Solver.
  6. السلام عليكم ... هذه سلسلة تعليمية عن استخدام الوظيفة الإضافية Solver كنت قد نشرتها سابقاً في أحد المواقع ولكن و للأسف فقد فقدت نتيجة خلل فني في ذلك الموقع ، ولذلك فقد أحببت أن أعيد طرحها في هذا المنتدى بعد أن قمت بعمل بعض التعديلات عليها ، أرجو أن تنال إعجابكم.
  7. السلام عليكم ... في الرابط أدناه حل لمشكلة قريبة من مشكلتك : http://www.officena.net/ib/index.php?showtopic=5802 الكود الموضوع في هذا الرابط يقوم بعرض الأرقام الموجودة في مجال معين بترتيب تنازلي مع بيان تكرارها . جرب الكود السابق و أخبرني في حالة عدم جدواه لأكتب لك كود خاص بحالتك. تحياتي
  8. السلام عليكم ... هل يروق لك هذا التعديل (بالنسبة لطلبة الفصل الأول). لقد توخيت البساطة في هذا التعديل ، ومن الممكن انجاز المهمة بطرق أكثر احترافية و تعقيداً مثل كود الفيجوال . تحياتي SALEH1.zip
  9. السلام عليكم ... يمكنك ذلك عن طريق الخيار New Web Query الموجود ضمن القائمة Data (القائمة الفرعية Emport External Data). بالتوفيق
  10. السلام عليكم ... اضافة بسيطة لما سبق : نلاحظ أن القائمة "الانقال إلى أوراق العمل" تختفي عند الانتقال لورقة تحتوي على تخطيط بياني ، هل تعرف السبب؟؟؟؟؟؟؟؟؟ السبب يكمن باستخدام الثابت xlWorksheet مع الاسلوب MenuBars ، وهناك مجموعة من الثوابت الأخوة للثابت السابق و التي تستخدم لتحديد مجال عمل القوائم المنشئة ، وهذه الثوابت هي كما يلي: xlWorksheet :تستخدم لعرض القائمة عندما يكون إحدى صفحات العمل في حالة عمل أو مفتوحة. xlChart :تستخدم لعرض القائمة عندما يكون إحدى صفحات الرسم البياني في حالة عمل (مفتوحة حالياً) . xlModule :تستخدم لعرض القائمة عندما يكون إحدى صفحات المقاطع البرمجية (الموديل) في حالة عمل (مفتوحة حالياً) . xlWorksheet :تستخدم لعرض القائمة عندما لا يكون هناك أي صفحات من الأنواع (جداول عمل ، رسومات بيانية ، مقاطع برمجية) مفتوحة أو في حالة عمل. بالتوفيق
  11. السلام عليكم ... يمكنك عمل ذلك بشكل يدوي وذلك كما يلي : انقر فوق الخيار Customize الموجود في القائمة Tools لتظهر لك نافذة ، ضمن التبويب Commands وتحت Categories ستجد مجموعة باسم New Menu انقر عليها واسحب الشريط New Menu (الموجود تحت Commands) إلى شيط القوائم . حدد المجموعة Macros (الموجودة تحت Categories) واسحب الشريط Custom Menu Item (الموجود تحت Commands) إلى داخل القائمة الجديدة (أو أي قائمة). الآن يمكنك زيادة عناصر القائمة الجديدة بتكرار نفس الخطوات السابقة ، ويمكنك تغيير اسم القائمة وعناصرها و ربط هذه العناصر بالمايكراوت المطلوبة عن طرق الخيارات التي تظهر بالنقر بزر الفأرة الأيمن على أي قائمة . يعيب على الطريقة اليدوية أن القوائم تبقى موجودة في التطبيق مع أي ملف آخر يقوم المستخدم بفتحه. ويمكنك حل هذه المعضلة عن طريق اتباع كود الـ VBA: الفكرة تكمن بإنشاء القائمة عند فتح الملف وحذفها عند إغلاق الملف (كي لا تبقى موجودة عند فتح ملفات أخرى) ، لاحظ الكود: Private Sub Workbook_Open() With MenuBars(xlWorksheet) .Menus.Add Caption:="الانقال إلى أوراق العمل", before:="Help" With .Menus("الانقال إلى أوراق العمل").MenuItems .Add Caption:="منتدى أوفيسنا - الاكسل", OnAction:="Move1_1" .Add Caption:="منتدى أوفيسنا - الاكسس", OnAction:="Move1_2" .Add Caption:="منتدى أوفيسنا - الوورد", OnAction:="Move1_3" .Add Caption:="-" .Add Caption:="منتدى الفريق العربي - الفيجوال", OnAction:="Move2_1" .Add Caption:="منتدى الفريق العربي - الدلفي", OnAction:="Move2_2" .Add Caption:="منتدى الفريق العربي - السمبلي", OnAction:="Move2_3" End With End With End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) MenuBars(xlWorksheet).Menus("الانقال إلى أوراق العمل").Delete End Sub نلاحظ أننا عند إنشاء أي عنصر نقوم بربطه بالمايكرو المخصص له ، فمثلاً عند إنشاء عنصر القائمة "منتدى أوفيسنا - الاكسل" قمنا بربطه بالمايكرو Move1_1 . كما نلاحظ أننا قمنا بإدراج الخط الفاصل عن طريق إنشاء عنصر قائمة باسم "-". تحياتي
  12. السلام عليكم ... بدل السطر التالي من الكود السابق : For ii = MyRange.Column To MyRange.Column + MyRange.Columns.Count - 1 بالسطر: For ii = MyRange.Column + MyRange.Columns.Count - 1 To MyRange.Column Step -1 تحياتي
  13. السلام عليكم ... يمكنك يا أخي عمل ذلك بسهولة إذا كنت تتقن التعامل مع أكواد VBA وهذا هو الأسلوب الأسهل . ولكن هناك أيضاً أسلوب بسيط للمبتدئين الذين لا يمكنهم التعامل مع VBA : - قم بوضع مربع التحديد داخل الخلية A1. - كليك يمين على مربع التحديد و اختار Format Control لتظهر لك نافذة ، تحت التبويب Control قم بربط المربع بالخلية C1 مثلاً وذلك عن طريق الخيار Cell link. - الآن اذهب للخلية B1 وضع فيها الصيغة التالية: =IF(C1;5;3) هذا شرح مبسط جداااااااً ، وبهذا فيمكنك طبعاً تغيير الارتباط مع الخلية C1 وتغيير الصيغة الموجودة في الخلية B1 تبعاً لذلك ، وكما يمكنك اخفاء الخلية C1 أيضاً . مرفق مثال يوضح الفكرة: بالتوفيق CheckBox.zip
  14. السلام عليكم ... قم أولاً بتحديد الورقة كاملة و انقر على الخيار Cells الموجود في القائمة Format ، وتحت التبويب Protection قم بإزالة التحديد في الخيار Locked ، ومن ثم قم بحماية الورقة وحدد كلمة السر على أنها 123. الآن اضغط على Alt+F11 وادخل إلى نفس الورقة وألصق الكود التالي فيها: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Locked = False Then Me.Unprotect Password:="123" Target.Locked = True Me.Protect Password:="123", DrawingObjects:=True, Contents:=True, Scenarios:=True End If End Sub وكرر هذه العملية بالنسبة لجميع الأوراق في المصنف. بالتوفيق
  15. السلام عليكم ... بفرض أن الخلية التي تقوم بإدخال البيانات فيها هي الخلية A1 . قم بتحديد الخلية A1 وانقر على الخيار Conditional Formatting الموجود في القائمة Format لتظهر لك نافذة جديدة . حدد الشرط على أنه Formatting Is وألصق الصيغة التالية في مربع الشرط : =A1<>TRUNC(A1) وقم بعدها بتحديد التنسيق الذي تريد ظهوره عند وجود عدد يحتوي على فواصل في الخلية A1 واضغط على OK. بالتوفيق
  16. السلام عليكم ... لاحظ أخي الكريم أن الرسالة الأولى تطلب منك تحديد مجال أما الرسالة الثانية فتطلب منك تحديد رقم. أي عند ظهور الرسالة الأولى حدد مجال الدمج وعند ظهور الرسالة الثانية أدخل رقم العامود الذي تريد ظهور النتائج فيه ، فمثلاً عند كتابة الرقم 5 فإن الكود يقوم بوضع نتيجة الدمج في الخلايا المقابلة للخلايا الأصلية وذلك في العامود الخامس E . جرب كتابة رقم العامود (وعدم إدخال مجال) في رسالة الإدخال الثانية و أخبرني بالنتيجة. بالتوفيق
  17. السلام عليكم ... يا أخي ، ما فائدة ذلك في العمل ؟!!!!!! على أية حال ، يمكنك عمل حلقة تكرارية باستخدام التعليمة For Each ومن ثم تقوم بفحص خلية واحدة في كل دورة و معرفة فيما إذا كانت تحقق الشرط (أي أن الخلية المقابلة لها في العامود المعين تحقق الشرط) وتقوم بدمج كل خلية تحقق الشرط في المجال الرئيسي ومن ثم القيام بتحديده. وهنا أنبه جميع الأعضاء إلى أنه لا يسمح لأي عضو طرح أكثر من تسائل في نفس الموضوع ، وهنا أنبهك إلى أن الموضوع قد انتهى و لا يحق لك طرح استفسارات بعيدة عن عنوان الموضوع الأصلي. إذا كان هذا الأمر مهماً لك في العمل ، فأدرجه في موضوع مستقل.
  18. السلام عليكم ... مرفق المثال معدل كما طلبت. لاحظ أننا في كل عملية إنشاء لعنصر قائمة نقوم بربط هذا العنصر بالمايكرو المخصص ، ولاحظ أننا ننشئ القوائم عند فتح الملف ونحذفها عند إغلاقه (كي لا تبقى موجودة عند فتح ملفات أخرى). بالتوفيق jaffjaff123.zip
  19. السلام عليكم ... هذا بسيط ويمكن تحديد الخلايا التي تحتوي على بيانات فقط ، ولكن حددلي ما تريد بالضبط ولا داعي لكلمة مثلاً. :d
  20. السلام عليكم ... جرب الكود التالي: Sub Integrate() On Error GoTo YourMistake Dim MyRange As Range Dim NumberColumn As Integer Dim MyText As String Dim i As Long Dim ii As Integer Set MyRange = Application.InputBox(prompt:="أدخل مجال الدمج", Title:="مجال الدمج", Type:=8) NumberColumn = Application.InputBox(prompt:="أدخل رقم العامود الذي تريد عرض النتائج فيه", Title:="عامود النتائج", Type:=1) If NumberColumn <= 0 Then MsgBox prompt:="يجب أن يكون رقم العامود عدد صحيح أكبر من الصفر", Title:="خطأ" ElseIf NumberColumn >= MyRange.Column And NumberColumn <= MyRange.Column + MyRange.Columns.Count - 1 Then MsgBox prompt:="عامود النتائج موجود ضمن عامود الدمج", Title:="خطأ" Else Worksheets(MyRange.Worksheet.Name).Range(Cells(MyRange.Row, NumberColumn), Cells(MyRange.Row + MyRange.Rows.Count - 1, NumberColumn)).ClearContents For i = MyRange.Row To MyRange.Row + MyRange.Rows.Count - 1 For ii = MyRange.Column To MyRange.Column + MyRange.Columns.Count - 1 If Worksheets(MyRange.Worksheet.Name).Cells(i, ii).Value = "" Then GoTo 1 MyText = Worksheets(MyRange.Worksheet.Name).Cells(i, ii).Value & "-" & MyText 1 Next ii Worksheets(MyRange.Worksheet.Name).Cells(i, NumberColumn).Value = Left(MyText, Len(MyText) - 1) MyText = "" Next i End If Exit Sub YourMistake: If Err = 424 Then Exit Sub ElseIf Err = 5 Then Resume Next Else MsgBox Err.Description End If End Sub مرفق الملف : بالتوفيق Integrate.zip
  21. السلام عليكم ... بالنسبة للسؤال الأول : تابع الرابط التالي: http://www.c4arab.com/showlesson.php?lesid=2111 بالنسبة للسؤال الثاني : تأكد من أن الورقة المطلوبة لها نفس الاسم الموجود على الكود (Sheet1 مثلاً) ، وانظر إلى الخلية A1 الموجودة في هذه الورقة (كما هو موجود في الكود).
  22. السلام عليكم ... أرجو أن أكون قد فهمت الموضوع بشكل صحيح. ضع الصيغة التالية في الخلية B2 واسحبها على جميع الأسطرو الأعمدة: =B$1*INDIRECT(ADDRESS(COLUMN()+ROW()-2;1))
  23. السلام عليكم ... ليش العذاب يا أخي ؟!!! بحثت لك في دوال الاكسل الجاهزة و لم أجد مبتغاك. على أية حال فقد أنشئت لك الدالة SheetsCount : أولاً قم بوضع الكود التالي في الموديل: Function SheetsCount(Index As Integer) As String SheetsCount = Sheets(Index).Name End Function الدالة السابقة تقوم بإرجاع اسم الورقة بناءاً على ترتيبها. الآن اذهب إلى ورقة العمل واستخدم هذه الدالة مع الدالة INDIRECT في وضع هذه الصيغة: =INDIRECT(SheetsCount(2)&"!"&"D4") بالتوفيق SheetsCount.zip
  24. السلام عليكم ... يمكنك ذلك عن طريق إضافة الأسطر التالية للكود: Dim MyDate As String MyDate = Application.InputBox(prompt:="أدخل التاريخ", Title:="التاريخ", Type:=2) Sheets("Sheet1").Range("A1").Value = MyDate ويمكنك تغيير اسم الورقة و الخلية التي ترغب بلصق التاريخ فيها كما ترغب.
  25. السلام عليكم ... بالنسبة للإبقاء على الفورم فيمكنك ذلك عن طريق حذف السطر الذي يحتوي على الكلمة End من جميع الأكواد ، ولكن تبقى لدينا مشكلة أخرى وهي أن أوراق العمل لا يمكن تحريرها طالما أن الفورم ظاهر على الشاشة ، وهنا أقترح عليك الاستعانة بأشرطة القوائم وذلك عوضاً عن الأزرار . إذا كنت تريد استخدام أشرطة القوائم فأخبرني لأكتب لك الكود الخاص بذلك.
×
×
  • اضف...

Important Information