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

محمد حجازي

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

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

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

  • Days Won

    2

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

  1. السلام عليكم... وأنا أتصفح النت وقع ناظري على هذا الموقع الرائع، فتذكرت الأيام الخوالي بما كانت تحتويه من حلاوة ملأت علي حياتي كلها. لا أخفيكم أن الفرحة ملأت قلبي عندما رأيت الموقع لا يزال يغص بالمشاركات، وأن النقاش جارٍ فيه على قدم وساق. ليس في جعبتي في الوقت الحاضر سوى دروس كنت قد كتبتها منذ فترة لطلاب جامعة دمشق ، أرجو أن تنال إعجابكم. بالتوفيق، 4.zip 5.zip 6.zip 7.zip
  2. السلام عليكم ... أولاً : كل عام وأنتم بخير ثانياً : لقد اشتقت لهذا المنتدى كثيراً ثالثاً : أرجو أن تسامحوني على غيابي ، فظروف المرء و التزاماته قد تفرض عليه ما لا يرضاه رابعاً : أرجو ألا تنسونني من خالص الدعاء . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . مافي خامساً ســـــــــــلام
  3. السلام عليكم ... من المفترض أنك استطعت في الدرس السابق امتلاك بعض الخبرات التي تمكنك من التعامل مع المخططات البيانية بصورة أكثر فاعلية ، و لكن و بالرغم من المعلومات السابقة فقد تواجهك بعض الحالات التي تشعر فيها بأن كليكما (أنت و الاكسل) لا يفهم الواحد منكما الآخر :) . سأورد في هذه المشاركة شرحاً عن بعض المشاكل الشائعة عند مستخدمي المخططات البيانية بواسطة الاكسل ، و التي تظهر عندما تكون عناوين الفئات أرقاماً . قلنا سابقاً بأن معظم مخططات الاكسل (ما عدا بعض المخططات التي تمتاز ببعض الخصوصية كالتخطيط الدائري و التخطيط س و ص المبعثر و ... الخ) تتألف من محورين : محور قيم عامودي يقيس قيم نقاط البيانات المختلفة ، و محور أفقي توجد فيه فئات البيانات التي تعامل كوحدات منفصلة بعيداً عن أي مقياس . و لكن ماذا نعنيه بأن محور الفئات لا يخضع لأي مقياس عند قيامه بتحديد مجالات الفئات ؟ لاحظ أخي الصورة التالية : لاحظ أخي أن فارق السنوات بين الفئات غير متساوي ، ومع ذلك ففد قام الاكسل برصف السنوات على فواصل متساوية (في نقاط متساوية البعد عن بعضها البعض) ، و مرد ذلك إلى أن الاكسل تعامل مع أرقام السنوات على أنها نصوص (مجردة من أي دلالة رقمية) تستخدم للإشارة إلى مجموعة من البيانات . ملاحظة1 : قد يسبب المخطط السابق ذو الفئات المرتبة بشكل غير متجانس في بعض المشاكل عند القراءة ، ومن المحتمل تسببه في تضليل المستخدم الغير متمكن . ملاحظة2 : يمكنك حل المشكلة السابقة باستخدام التخطيط س و ص المبعثر الذي يمتلك محوري قيم ، و تحديد الحد الأعلى و الأدنى لكل محور من أجل الحصول على أفضل قراءة للتخطيط السابق . هناك مشكلة أخرى تظهر عندما تكون عناوين الفئات أرقاماً وهي أن الاكسل لا يستطيع تميزها على أنها عناوين !!!. لفهم هذه المشكلة بشكل واضع نورد المثال التالي : البيانات السابقة هي بيانات افتراضية ... من الجدول السابق نستنتج أن عدد الإناث المتعلمات أكبر من عدد الذكور المتعلمين في جميع السنوات (هذا يدل على أنها بيانات خيالية ) و أن تغير عدد المتعلمين من الفئتين (ذكور و إناث) يكون في نفس الاتجاه . الآن قم بتحديد الجدول السابق و اضغط على المفتاح F11 ليقوم الاكسل بإدراج التخطيط الافتراضي : قد تفاجئ عندما تلاحظ أن الاكسل لم يستطع تحديد عناوين الفئات ، و أنه اعتبرها (عناوين الفئات التي هي بالحقيقة أرقام السنوات) متسلسلة جديدة . السبب في عدم قدرة الاكسل على تمييز البيانات الموجودة في المجال A2:A6 على أنها عناوين الفئات هو أن هذه العناوين موجودة على شكل أرقام . حسناً قد تقول لي أن حل هذه المشكلة بسيط ويكمن في التعامل مع البيانات السابقة كنصوص ، وذلك عن طريق تحديد المجال السابق والنقر على Ctrl+1 ومن ثم اختيار التصنيف Text من التبويب Number ، ولكن مهلاً يا أخي فإن هذه الطريقة لا تجدي نفعاً مع الاكسل ، و الحل يكمن بأحد الطرق التالية : 1. مسح محتوى الخلية A1 ، ومن ثم القيام بإدراج التخطيط . 2. وضع علامة التنصيص المفردة ' في بداية أرقام السنوات ، ومن ثم القيام بإدراج التخطيط . 3. حذف المتسلسلات الإضافية (متسلسلة العام) عن طريق الخيار Source Data الموجود في القائمة Chart ، أو بواسطة أي طريقة أخرى يتيحها لكل الاكسل (سنتحدث عن ذلك لاحقاً) . قد تتفهم السبب في عدم تمكن الاكسل من تحديد عناوين فئات البيانات ، و لكن ما هذه الأرقام التي وضعها الاكسل بدلاً من عناوين الفئات التي لم يستطع إيجادها ؟ . هذه الأرقام هي عبارة عن متوالية حسابية متزايدة تبدأ من الواحد (الحد الأول فيها هو العدد واحد) , و كل عنصر من عناصرها ينتج عن العنصر السابق له بإضافة العدد واحد (أساسها هو العدد واحد أيضاً) . لنقوم الآن بإدراج المخطط السابق عن طريق معالج إدراج التخطيط هذه المرة ، و لنرى ما يمكننا القيام به من أجل تحسين التخطيط الناتج ؛ و سيتم شرح كل ذلك إن شاء الله خطوة بخطوة : قم أولاً بتحديد الجدول السابق و انقر على زر التخطيط الموجود في شريط الأدوات القياسي ، أو قم باختيار الأمر Chart الموجود في القائمة Insert ليظهر لك معالج إضافة تخطيط جديد . هذا المعالج يتألف من أربع خطوات (أربع مربعات حوار) تنتهي بإتمام عملية إدراج التخطيط الجديد ، و البيانات الموجودة في هذه المربعات يمكن تعديلها بسهولة حتى بعد إدراج التخطيط الجديد ، وذلك لأنك ستجدها ضمن القائمة Chart في أي وقت تحتاجها فيه. يمكنك في المربع الأول اختيار نوع التخطيط الذي ترغب بإدراجه : مربع الحوار الثاني متخصص بالبيانات المصدر التي يستقي منها تخطيطك المفترض معلوماته : مربع الحوار هذا يتألف من تبويبين : الأول هو Data Range و قد تعرفنا عليه في الدرس السابق ، و الثاني هو Series : في هذا التبويب و ضمن Series ستجد متسلسلات البيانات الموجودة في تخطيطك المرتقب ، حدد متسلسلة "العام" و قم بحذفها عن طريق الزر Remove . يوجد أيضاً في هذا التبويب عدد من مربعات الإدخال يمكنك من خلالها التحكم ببيانات أي متسلسلة ، و ذلك عن طريق تحديد اسمها و مجال القيم الخاص بها و مجال عناوين الفئات التي تعتمد عليه و ... الخ ؛ و يجب التنويه أيضاً إلى أن عدد هذه المربعات و وظيفتها تتغير بتغير نوع التخطيط الذي تختاره في الخطوة السابقة . الآن و بعد حذف متسلسلة "العام" الزائدة سيظهر لك مربع الحوار السابق بالشكل التالي : الخطوة الثالثة تحتوي على مربع حوار يحتوي على العديد من التبويبات التي تتيح لك إجراء الكثير من التحسينات و الإضافات على تخطيطك . جربها فهي واضحة و مفيدة بشكل كبير : في الخطوة الرابعة يسألك الاكسل عن إذا ما كنت ترغب بإضافة تخطيطك في ورقة تخطيط منفصلة أو ككائن في ورقة عمل موجودة : الآن و بعد انتهائك من الخطوة الرابعة اضغط على مفتاح Finish ليتم إدراج التخطيط حسب المواصفات التي اعتمدتها في الخطوات السابقة : لاحظ أخي أن الفروق بين المتسلسلتين في التخطيط السابق لا تظهر بالشكل المطلوب الذي يمكننا من دراستها بصورة دقيقة ، ويرجع ذلك إلى أن مجال محور القيم كبير بالنسبة لمجال توضع البيانات فيه ، ولذلك فإنه لا مناص هنا من تضيق مجال محور القيم بإتباع ما يلي : حدد محور القيم (المحور العامودي) ومن ثم كليك يمين على هذا المحور و اختار Format Axis لتظهر لك نافذة . ضمن التبويب Scale ستجد الخيارات التالية : قم بإزالة التحديد (من أجل عدم تمكين الاكسل من تحديد قيم هاذين المربعين بشكل تلقائي) من جانب المربعين Minimum و Maximum و أدخل فيهما القيم الجديد كما هو موضع في الشكل السابق . بالإضافة للتعديل السابق ، قمت بإجراء بعض التعديلات الشكلية على عناصر التخطيط السابق و ذلك حتى يظهر بالصورة التالية : هل تشاطرني الرأي بأن هذا التخطيط هو أجمل و أسهل للفهم من التخطيط السابق ؟. (y) أرجو أن أكون قد وفقت في طرح شيء مفيد . مرفق مثال للتخطيط الناتج : تحياتي Chart2.rar
  4. السلام عليكم ... الطريقة تعتمد على الأسلوب CurrentRegion ، و هذا الأسلوب يرجع مجال الخلايا المتصلة . جرب الكود التالي : Sub MoveDown() ActiveSheet.Cells(ActiveCell.CurrentRegion.Rows.Count + 1, ActiveCell.Column).Select End Sub الكود السابق يقوم بتحديد الخلية الموجودة في نهاية كتلة البيانات المتصلة و في عامود الخلية النشطة . يمكنك تحديد كتلة البيانات المرغوبة عن طريق تنشيط خلية ضمن هذه الكتلة .
  5. السلام عليكم ... يمكنك عمل ذلك كما هو موجود في الرابط التالي : http://www.officena.net/ib/index.php?showtopic=8915 و ذلك مع الانتباه إلى تغيير الشرط الموجود في العامود C إلى ما يلي : =IF(A2=0;"";COUNTA(A$2:A2))
  6. السلام عليكم ... تستطيع عمل ذلك مع الحدث Deactivate ، ضع الكود التالي في الورقة المطلوبة : Private Sub Worksheet_Deactivate() If Me.Range("A1").Value = "" Then Me.Activate End Sub الكود السابق لا يسمح لك بالانتقال إلى أي صفحة أخرى مادامت الخلية A1 فارغة . يمكنك زيادة عدد الشروط حسب الرغبة . تحياتي
  7. السلام عليكم ... بالنسبة لدوال قواعد البيانات ، مشروحة في الرابط السابق . بالنسبة للدالة SUMIF راجع الرابط التالي : http://office.microsoft.com/ar-sa/assistan...2092921025.aspx
  8. السلام عليكم ... هناك طريقة لعمل ذلك و لكنها معقدة بعض الشييء . هذه الطريقة تعتمد على العامودان C و D (يمكن إخفائهما). راجع المرفق لتتعرف على الطريقة . RE.rar
  9. السلام عليكم ... راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=46
  10. السلام عليكم ... جرب الكود التالي : Sub MySelect() Sheets("Sheet1").Range(Cells(1, 2), Cells(Sheets("Sheet1").Range("A1").Value, 2)).Select End Sub طبعاً يمكن تطويره ليغطي كافة الاحتمالات الممكنة لقيمة الخلية A1.
  11. السلام عليكم ... راجع أيضاً الرابط التالي : http://www.officena.net/ib/index.php?showtopic=4376
  12. السلام عليكم ... الأخ HUSSIN تم إرسال الدعوة .
  13. السلام عليكم ... و ضعنا في الخلية E2 الصيغة التالية : =IF(B3<>0;ROW();"") الهدف من الصيغة السابقة هو إدراج رقم الصف الذي توجد فيه هذه الصيغة ، وذلك إذا كانت القيمة المقابلة لها في العامود B لا تساوي الصفر . (الصيغة السابقة تطبق على كامل العامود E و ذلك بتعبئتها على هذا العامود) الصيغة الموجودة في الخلية D3 أعتقد أنها مفهومة : =IF(AND(B3<>0;B2<>0);B3-B2/C3*20;"") أما الخلايا D4 و ما بعدها تعتمد على نفس الصيغة : =IF(AND(B4<>0;C4<>0);(B4-INDIRECT("B"&MAX(E$3:E3)))/C4*20;"") (الصيغة السابقة تطبق على كامل الخلايا الواقعة تحت الخلية D4 و ذلك بتعبئتها على هذه الخلايا) الدالة INDIRECT تستخدم لإرجاع قيمة مرجع محدد بسلسلة نصية . المرجع المرغوب (قيمة أول خلية مليئة) موجود طبعاً بالعامود B و بالسطر المحدد بالرقم المستخرج من الدالة MAX . بالنظر إلى العامودين B و E ستجد أن كل خلية مليئة في العامود B سيقابلها رقم سطرها في العامود E ، أما الخلايا الفارغة في العامود B سيقابلها خلايا فارغة أيضاً في العامود E . ما أريد قوله هو أننا نستطيع الحصول على قيمة أول خلية مليئة عن طريق إرجاع مرجعها الذي يتألف من الحرف B و أكبر رقم من المجال الموجود في العامود E والذي يعلو الخلية الحالية .
  14. السلام عليكم ... القاعدة Validation تعمل معي تمام ، راجع المرفق . بالنسبة لكود الـ VB زودني بالملف لأضيف الكود له ، وذلك لأنه يجب أخذ توضع البيانات في الاعتبار عند كتابة الكود . ______.rar
  15. السلام عليكم ... حسب فهمي ، فإن مشكلتك لا تحتاج إلى كود بل إلى استخدام معالج استيراد البيانات ، راجع الرابط التالي : http://www.officena.net/ib/index.php?showtopic=8385&st=15#
  16. السلام عليكم ... لم أفهم قصدك بالضبط ، و لكن يمكن أن يكون هذا هو قصدك . =IF(ROW()=10;"";IF(ISNA(VLOOKUP(ROW()-1;E$2:F$50;2;FALSE));"";VLOOKUP(ROW()-1;E$2:F$50;2;FALSE)))
  17. السلام عليكم ... توجد هذه الطريقة (تستطيع الاستفادة منها عن طريق تسجيل مايكرو) . و توجد طريقة أخرى و هي فعالة ، و لكن مشكلتها أنها تخبرك بآخر سطر موجدة في الجدول بأكمله (و ليس بعامود منه) . إذا كانت الطريقة الثانية تنفعك فأخبرني لأشرحها لك .
  18. السلام عليكم ... جرب الدالة SUMIF أو دوال قواعد البيانات : http://www.officena.net/ib/index.php?showtopic=8015
  19. السلام عليكم ... راجع الرابط التالي : http://www.c4arab.com/showlesson.php?lesid=2111
  20. السلام عليكم ... جرب الدالة التالية من أجل ترتيب عناوين الفئات (تشبه إلى حد كبير الدالة Large) : Function ARRAYING(MyRange As Range, Rank As Byte, NumberRow As Long) For i = 1 To Rank If Application.WorksheetFunction.Large(MyRange, i) = Application.WorksheetFunction.Large(MyRange, Rank) Then n = n + 1 End If Next i For Each MyCell In MyRange.Cells If MyCell.Value = Application.WorksheetFunction.Large(MyRange, Rank) Then n1 = n1 + 1 If n1 = n Then ARRAYING = Cells(NumberRow, MyCell.Column).Value Exit Function End If End If Next MyCell End Function الدالة السابقة لها ثلاث مدخلات : المدخل الأول : هو مجال الخلايا التي تحتوي على الأرقام التي سنعتمد عليها في عملية الفرز . المدخل الثاني : ترتيب الفئة . المدخل الثالث : رقم السطر المقابل للمجال السابق و الذي سنرجع النتيجة (عنوان الفئة) منه . عند زيادة عدد المنتجات قم فقط بسحب المعادلتين الموجودتين في السطرين 11 و 12 . لمزيد من الإيضاح راجع المرفق . الدالة ARRAYING كنت قد كتبتها سابقاً في الموضوع الموجود على الرابط التالي : http://www.officena.net/ib/index.php?showtopic=5474 ABCD.rar
  21. السلام عليكم ... كليك يمين على الخلية المطلوبة ومن ثم اختار Format Cells لتظهر لك نافذة . ضمن التبويب Number اختار التخصيص Custom ، و ضمن المربع Type ضع التنسيق السابق و اضغط على OK.
  22. السلام عليكم … ألم تسأم من التعليقات التقليدية التي يتيحها لك الاكسل ، ألا تريد بعضاً من الابتكار الذي يضفي مزيداً من الحركة على مصنفك ؟. إذا كان الأمر كذلك فتعال معنا لنتعلم كيفية إنشاء تعليقات مميزة ... المشكلة أننا نستخدم المزايا الشائعة للاكسل و لا نحاول الغوص في تفاصيل هذه المزايا التي تتيح لنا أموراً قد نعتقد أنها غير موجودة في الإصدارات الحالية ، هذه المزايا موجودة أمام أعيننا و لكننا لا نراها !. :) قم أولاً بإدراج تعليق في أحد الخلايا (الأمر Comment الموجود في القائمة Insert) ليظهر لك مربع نص يمكنك وضع التعليق فيه ، ولكن ألا ترى معي يا أخي الكريم أن هذا المربع تقليدي بعض الشيء و يحتاج إلى بعض اللمسات التجميلية . إذا كان اعتقادك كذلك فجرب ما يلي ..... لتغيير شكل مربع التعليق إلى أحد الأشكال التلقائية : قم أولاً بإظهار شريط الرسم عن طريق تحديد الخيار Drawing من القائمة الفرعية Toolbars الموجودة في القائمة View . إذا لم يكن مربع التعليق ظاهراً فقم بتحديد الخلية التي تحتوي على هذا التعليق و انقر على الخيار Edit Comment الموجود في القائمة Insert . الآن حدد مربع التعليق و اضغط على الزر Draw الموجود في شريط الرسم لتفتح لك قائمة ، اختر منها Change AutoShape لتفتح لك قائمة أخرى تحتوي على الأشكال التلقائية المختلفة ، انقر فوق الشكل الذي تريده ليتغير التعليق إليه . يمكنك تطبيق تأثيرات التعبئة المعروفة على هذه الأشكال (كالتدرج و الشفافية و إدراج الصور و ... الخ) مرفق مثال يوضح بعض التعليقات الممكنة . Comment.rar
  23. السلام عليكم ... ضع الكود التالي في الـ ThisWorkbook : Private Sub Workbook_Open() If Date - 1 > Sheets("Sheet1").Range("B23").Value Then Sheets("Sheet1").Range("B23").Value = Date - 1 Sheets("Sheet1").Range("A23").Value = Sheets("Sheet1").Range("A21").Value End If End Sub بفرض أنه يتم فتح المصنف كل يوم . عند كل فتح للمصنف يقارن الاكسل التاريخ الحالي بالتاريخ الموجود في الخلية B23 فإذا كان يزيد عنه أكثر من يوم واحد يقوم الاكسل بإدراج قيمة الخلية A21 في الخلية A23 و هكذا ....
×
×
  • اضف...

Important Information