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

محمد حجازي

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

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

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

  • Days Won

    2

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

  1. السلام عليكم ... مرفق المثال معدل ويحتوي على زر أمر (كما طلبت). بالنسبة للكود ففكرته بسيطة ، وهي أنه يقوم بفحص كل خلية من المجال I5:I24 ، وذلك في كل ورقة موجودة في المصنف " الصف الأول الإعدادي " ويرى إذا كانت القيمة الموجودة فيها من ضمن أعلى خمس قيم وذلك طبعاً بعد فحص الخلية المقابلة لها في العامود J و التأكد من أنها تحتوي على الشرط "ناجح" ، فإذا كان ذلك محقق فإنه يضيف معلومات هذا الطالب في الملف الجديد الذي تم إنشاءه وفي النهاية فإنه يقوم بفرز المعلومات في الملف الجديد وينسقها ضمن جدول معين. معذرة على الشرح السريع وذلك لأني مشغول هذه الأيام ولا أملك الكثير من الوقت . على أيه حال فإنني أتمني أن يعجبك التنسيق الذي وضعته لك في الملف الجديد الذي سوف يحفظ في نفس مسار الملف القديم وتحت اسم (أوائل الصفوف) ، وكما يجب الانتباه إلى أن الملف الجديد سوف يخزن فوق أي ملف له نفس الاسم وذلك دون الرجوع إليك ، وإذا كنت تريد ظهور رسالة تخيرك بين الحفظ فوق الملف القديم أو لا فأخبرني لأشرح لك طريقة تعديل ذلك. بالتوفيق NewMySort.zip
  2. السلام عليكم ... بالطبع يمكن ذلك عن طريق نافذة إدخال تحتوي على مربع نص ، ولكن ومن أجل تفادي الأخطاء التي قد تحصل في حالة إدخالك اسم لورقة غير موجودة ، فقد آثرت أن أعتمد على القائمة المنسدلة. مرفق المثال بعد التعديل: Book111.zip
  3. السلام عليكم ... هناك طريقة أخرى ... ابحث عن المجلد XLSTART داخل المستندات وقم بإضافة الكود إلى الملف PERSONAL الموجود بداخله . بالتوفيق
  4. السلام عليكم ... يمكنك عمل ذلك عن طريق الارتباط التشعبي ، ابحث في المنتدى فقط عن كلمة " الارتباط التشعبي" وستجد إن شاء الله مبتغالك. ملاحظة : هذه الخاصية موجودة في أغلب برامج الأوفيس ولذلك فإنه من المحتمل أن تفيدك الموضوعات الموجودة في الأقسام الأخرى (والتي تتحدث عن الارتباط التشعبي).
  5. لسلام عليكم ... الأخ jaffjaff ، أنت على حق و الصيغة بعد التعديل تصبح على الشكل التالي: =C1+INT((INT(A1/30)+B1)/12)&" / "&MOD(INT(A1/30)+B1;12)&" / "&MOD(A1;30) إذا كانت الصيغة السابقة صحيحة ، فقم يا أخ jaffjaff بشرح الصيغة ، وذلك امتثالاً لطلب الأخ ايمن ابوأنس :d :pp: تحياتي
  6. السلام عليكم ... وضح قصدك ! إذا كان قصدك جعل دالة التفقيط متاحة في كل ملف اكسل جديد (أي عدم الحاجة لنسخ الدالة في كل ملف تقوم بإنشاءه) ، فهنا يمكنك اتباع الطريقة البسيطة التالية: قم بتسجيل مايكرو لا على التعين وذلك عن طريق الخيار: Tools > Macro > Record New Macro وذلك لتظهر لك نافذة ، تحت Store macro in غير الخيار الموجود في القائمة المنسدلة إلى Personal Macro Workbook وسجل مايكرو لا على التعيين. الآن اضغط على Alt+F11 لتظهر لك نافذة محرر الفيجوال ، من نافذة المشاريع (على اليسار) اختار المشروع PERSONAL.xls وإدخل على الموديل الخاص به وامسح المايكرو المسجل وضع مكانه دالة التفقيط واحفظ الإعدادات عند الخروج من الاكسل. الآن فإن دالة التفقيط أصبحت فعالة في أي ملف اكسل تقوم بفتحه من جهازك.
  7. السلام عليكم ... جرب الكود التالي: Sub MySort() Dim EndRow As Long Set NewBook = Workbooks.Add With NewBook.Sheets(1) .Name = "أوائل الصفوف" .Cells(1, 1).Value = "اسم الطالب" .Cells(1, 2).Value = "الفصل" .Cells(1, 3).Value = "مجموع العلامات" End With For Each MySheet In Workbooks("الصف الأول الإعدادي").Worksheets For Each MyCell In MySheet.Range("I5:I24").Cells If MySheet.Cells(MyCell.Row, 10).Value = "ناجح" Then If MyCell.Value = MySheet.Cells(5, 12).Value Or MyCell.Value = MySheet.Cells(6, 12).Value Or MyCell.Value = MySheet.Cells(7, 12).Value Or MyCell.Value = MySheet.Cells(8, 12).Value Or MyCell.Value = MySheet.Cells(9, 12).Value Then EndRow = NewBook.Sheets(1).Range("A1").CurrentRegion.Rows.Count NewBook.Sheets(1).Cells(EndRow + 1, 1).Value = MySheet.Cells(MyCell.Row, 2).Value NewBook.Sheets(1).Cells(EndRow + 1, 2).Value = MySheet.Name NewBook.Sheets(1).Cells(EndRow + 1, 3).Value = MyCell.Value End If End If Next MyCell Next MySheet With NewBook.Sheets(1) .Range(Cells(1, 1), Cells(EndRow + 1, 3)).Sort Key1:=.Range("C2"), Order1:=xlDescending End With End Sub ولكن الكود السابق يحتاج لإضافة جدول أعلى خمس علامات (في كل ورقة). جرب المرفق ، وإذا كان هذا قصدك فأخبرني لأكمل الكود (تنسيق وحفظ الجدول الجديد). بالتوفيق MySort.zip
  8. السلام عليكم ... معليش أخوي ، ما فهمت عليك . الرجاء توضيح مطلبك بمثال : أي حدد لي طبيعة المدخلات و المخرجات بالتفصيل الممل.
  9. السلام عليكم ... من الممكن عمل ذلك ولكن حدد لي أولاً أسلوب الإدخال: هل سيكون لليوم خانتي إدخال وكذلك للشهر و السنة. هل سيتم الفصل بين الأيام و الأشهر و السنوات بكشيدة مثلاً. الرجاء مزيد من التوضيح.
  10. السلام عليكم ... على أية حال يمكنك إبطال الفيروس عن طريق الضغط على Ctrl+Alt+Delete والتأشير على برنامج الاكسل واختيار End Task (انهاء المهمة) ، ولا تنسى أن هذا الفيروس لا يسبب أضراراً كغيره :d بالنسبة لسؤالك : الضمانة الفعلية هي الالمام بلغة الـ VBA وذلك حتى يمكنك فحص الكود وفهمه و التأكد من أنه غير مضر ، وذلك طبعاً قبل تنفيذه يعني هذه دعوة للجميع من أجل تعلم لغة الـ VBA. تحياتي
  11. السلام عليكم ... بالنسبة لكيفية إدراج الدالة ، راجعي الرابط التالي الذي يحتوي على تساؤل مشابه: http://www.officena.net/ib/index.php?showtopic=5311 بالنسبة للتنسيق الشرطي : قومي أولاً بتغيير لون المجال B7:B52 من ورقتي (جدول الفرز ، ميزان المراجعة) إلى اللون الأسود ومن ثم حددي أول خلية B7 وقومي بإدراج تنسيق شرطي للشرطين التاليين (لاتنسي تحديد الشرط على أنه صيغة): =T7=10 من أجل لون الخط الأخضر =T7=5 من أجل لون الخط الأزرق لاحظي أنني كتبت المراجع بشكلها النسبي (لا يوجد علامة $ ) ولمزيد من المعلومات ابحثي عن كلمة " تنسيق شرطي " في المنتدى! الآن قومي بتعبئة باقي الخلايا انطلاقاً من الخلية B7 (وذلك لأن الصيغة في هذه الخلية تقبل التعبئة). أو قومي بنسخ الخلية B7 ومن ثم حددي المجال B7:B52 واختاري لصق خاص > تنسيقات. بالتوفيق
  12. السلام عليكم ... المرفق كما طلبت: DMY.zip
  13. السلام عليكم ... النص الذي كتبه الأخ كريم وذلك توضيحاً لسؤاله: بالنسبة لمشكلتك الأولى : بالطبع فإن مراجع الخلايا الموجودة في الصيغ لا ترجع سوى قيم هذه الخلايا ، وأما التنسيقات فلا تنقلها. يمكنك حل هذه المشكلة عن طريق إنشاء دالة وظيفتها إرجاع لون الخلية المقابلة في ورقة العمل (جدول مساعد لميزان المراجعة) وذلك على النحو التالي: Function FONTCOLOR(Reference As Range) FONTCOLOR = Reference.Font.ColorIndex End Function ومن ثم ربط هذه الدالة بالتنسيق الشرطي للخلايا الوجهة. مرفق المثال بعد التعديل على الورقتين (جدول الفرز ، ميزان المراجعة) ، ويمكنك تطبيق نفس الطريقة على باقي الأوراق. لاحظ أننا خصصنا العامود T في ورقة (جدول الفرز) و العامود R في ورقة (ميزان المراجعة) وذلك من أجل إرجاع الرقم الذي يمثل لون الخط في الخلايا المقابلة من الورقة (جدول مساعد لميزان المراجعة) ويمكنك إخفاء هذه الأعمدة لاحقاً إذارغبت بذلك. بالنسبة لمشكلتك الثانية: أرجو التوضيح لأني لم أفهم ما تريد بالضبط. تحياتي sort1.zip
  14. السلام عليكم ... جرب الصيغة التالية : =C1+INT(B1/12)&" "&MOD(B1;12)+INT(A1/30)&" "&MOD(A1;30) وذلك على اعتبار ما يلي : - A1 تحتوي على الأيام . - B1 تحتوي على الأشهر ، وأن كل شهر يتألف من 30 يوماً. - C1 تحتوي على السنوات ، وأن كل سنة تتألف من 12 شهراً. أرجو أن يكون هذا مطلبك
  15. السلام عليكم ... يمكنك ذلك عن طريق الكود التالي: Sub MyReplace() Worksheets("Sheet1").Range("A1:E100").Replace What:="Muhammad", Replacement:="Ahmad", SearchOrder:=xlByColumns End Sub الكود السابق يستبدال الكلمة Muhammad بالكلمة Ahmad وذلك ضمن المجال A1:E100 الموجود في الورقة Sheet1. ويمكنك تغيير إعدادات البحث (قبل الاستبدال) عن طريق المعامل SearchOrder وذلك كما يلي: البحث في الأعمدة xlByColumns البحث في الصفوف xlByRows بالتوفيق
  16. السلام عليكم ... الأخطاء قد تنتج عن عدم وجود ناتج للدالة VLOOKUP (يترجم للخطأ البرمجي 1004) ، وبذلك يمكنك اعتراض هذه الأخطاء و التعامل معه باستخدام الجملة On Error ، وهنا: - يمكنك إظهار رسالة تخبرك بعدم وجود نواتج : Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo NoNumber If Target.Column = 3 And Target.Row >= 2 And Target.Row <= 20 Then Me.Cells(Target.Row, 4).Value = Application.WorksheetFunction.VLookup(Target.Value, Me.Range("A2:B20").Value, 2, False) End If Exit Sub NoNumber: If Err = 1004 Then MsgBox "الرقم المدخل غير موجود" Else MsgBox Err.Description End If End Sub - أو الاكتفاء بعدم إرجاع شيئ عندما لا يكون للدالة VLOOKUP أي نواتج: Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo NoNumber If Target.Column = 3 And Target.Row >= 2 And Target.Row <= 20 Then Me.Cells(Target.Row, 4).Value = Application.WorksheetFunction.VLookup(Target.Value, Me.Range("A2:B20").Value, 2, False) End If Exit Sub NoNumber: If Err <> 1004 Then MsgBox Err.Description End If End Sub مرفق مثال للطريقة الأولى: VLOOKUP.zip
  17. السلام عليكم ... مازال الشرح غير واضح : لننظر إلى الكود التالي: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Row >= 2 And Target.Row <= 20 Then Me.Cells(Target.Row, 3).Value = Application.WorksheetFunction.VLookup(Sheets("Sheet2").Range("A1").Value, Sheets("Sheet2").Range("B1:C10").Value, 2, False) End If End Sub الكود السابق يتم لصقه في الورقة المطلوبة ، وهو يعمل بمجرد تفجير حدث تعديل خلية موجودة في نفس الورقة. - يجب قبل كل شيء تحديد مجال عمل الكود ، ففي الكود السابق حددنا المجال A2:A20 على أنه المجال الذي يكون فيه الكود فعال ، لننظر كيف ترجمنا المجال السابق: If Target.Column = 1 And Target.Row >= 2 And Target.Row <= 20 Then المتغير Target يستخدم للإشارة إلى الخلية التي تم تعديلها. الآن من الشرط السابق : إذا كانت الخلية المعدلة موجودة في العامود الأول وأن سطرها ينتمي للمجال المغلق [2,20] فإنه سيتم الانتقال للعبارة التالية: Me.Cells(Target.Row, 3).Value = Application.WorksheetFunction.VLookup(Sheets("Sheet2").Range("A1").Value, Sheets("Sheet2").Range("B1:C10").Value, 2, False) وإلا فلا. - العبارة السابقة (الثانية) تعمل على البحث عن القيمة الموجودة في الخلية A1 (في الورقة Sheet2) وذلك ضمن العامود الأول من المجال B1:C10 (العامود B في الورقة Sheet2) وترجع القيمة المقابلة لها في العامود C (في الورقة Sheet2) . القيمة الناتجة عن عملية البحث السابق يتم لصقها في الخلية المقابلة للخلية المعدلة في العامود C: Me.Cells(Target.Row, 3).Value لاحظ من العبارة البرمجية السابقة أننا استخدمنا Me للدلالة على الهدف الحالي (الورقة الموجود فيها الكود) ، وأننا استخدمنا التعليمة Cells للإشارة إلى الخلية المقابلة للخلية المعدلة في العامود الثالث C. مما سبق نستنتج أنه يمكننا تعديل الكود السابق ليتناسب مع احتياجاتنا ، لا حظ الكود التالي: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Row >= 2 And Target.Row <= 20 Then Me.Cells(Target.Row, 3).Value = Application.WorksheetFunction.VLookup(Sheets("Sheet2").Cells(Target.Row, 1).Value, Sheets("Sheet2").Range("B1:C10").Value, 2, False) End If End Sub وأخيراً ، يمكن القول بأن هذا هو طلبك : Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 2 And Target.Row <= 20 Then Me.Cells(Target.Row, 4).Value = Application.WorksheetFunction.VLookup(Target.Value, Me.Range("A2:B20").Value, 2, False) End If End Sub وأظن أنك ستعرف بالضبط ما يحصل (بعد الشرح السابق) (y) بالتوفيق
  18. السلام عليكم ... بالطبع يمكنك ذلك ، سأشرح الطريقة باختصار: أولاً أنت بحاجة للتعليمة InputBox لإخال البيانات (معايير البحث) التي ستكون كما يلي: - الفئة التي تريد تغيير بياناتها. - القيم الجديدة ويمكنك الاستعاضة عن التعليمة InputBox بفورم جاهز تقوم بتصميمه. ومن ثم فإنك ستبحث عن البيانات حسب الفئة وذلك عن طريق الحلقة التكرارية For Each واختبار الخلية (في كل دورة) إذا كانت تحقق شروط البحث ، فإذا كان كذلك فسيتم التعديل (حسب شروط معينة) وإلا فلا. ويمكنك استخدام التعليمة MsgBox لإظهار رسالة تخبرك بانتهاء العمل (اختياري). هذه هي الخطوات الأساسية ، وطبعاً لكل حالة خصوصيتها ومتطلباتها من الأكواد. بالتوفيق
  19. السلام عليكم ... الرجاء توضيح السؤال : ماهي نوعية التحديث التي تريدها؟؟؟
  20. السلام عليكم ... إذا كانت لك خبرة في الفيجوال فإنه لا ينقصك سوى معرفة التعليمة WorksheetFunction ، لا حظ الكود التالي: Sub Function_Vlookup() Sheets("Sheet1").Range("D1").Value = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("A1").Value, Sheets("Sheet1").Range("B1:C10").Value, 2, False) End Sub الكود السابق يقوم بالبحث عن القيمة الموجودة في الخلية A1 في العامود B ويرجع القيمة المقابلة لها في العامود C ويلصق القيمة الناتجة عن البحث في الخلية D1. بالتوفيق
  21. السلام عليكم ... راجع الرابط التالي: http://office.microsoft.com/ar-sa/assistan...2016411025.aspx
×
×
  • اضف...

Important Information