بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|
نجوم المشاركات
Popular Content
Showing content with the highest reputation on 01/12/15 in all areas
-
أخي عبد الله راجعت الخاص وحملت الملف وسأعمل عليه اليوم إن شاء الله وأستأذنك إذا نجح الأمر في نشر الملف للإستفادة منه (لن أنشره إلا إذا وافقت) نقطة أخري : سأغير العنوان السينيمائي للموضوع2 points
-
2 points
-
السلام عليكم تفضل اخي اليك الملف وفيه المعادلات مع بعض التنسيق الشرطي ؟ تحياتي واحترامي الملف++.rar2 points
-
السلام عليكم ورحمة الله وبركاته الى السادة اعضاء منتدانا الكرام اليكم اليوم شرح محاكاة الدالة DateDif با المعادلات و الاكواد. بالنسبة المحاكلة بالاكواد عملت دالة بسيطة اسميتها DateGap في الصورة ادناه تم الاعتماد على الدلة DateDif كمعيار لقياس مدى دقة المعادلات و الدلة DateGap اولا المعادلات و الصيغ على افتراض ان التاريخ الاول هو A1 و التاريخ الثاني A2 فأن: 1 - لايجاد الفرق بين التاريخين باليوم و الشهر و السنين معا الايام =IF(DAY($A$2)>=DAY($A$1),DAY($A$2)-DAY($A$1),DAY($A$2)+DAY(EOMONTH($A$2,-1))-DAY($A$1)) الاشهر =MOD(IF(DAY($A$2)>=DAY($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1)-1),12) السنوات =TRUNC(IF(DAY($A$2)>=DAY($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1)-1)/12) 2 - ايجاد الفرق الكلي بالايام و الاشهر و السنوات الفرق الكلي بالأيام =A2-A1 الفرق الكلي بالأشهر =IF(DAY($A$2)>=DAY($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1)-1) الفرق الكلي بالسنوات =TRUNC(IF(DAY($A$2)>=DAY($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1),(YEAR($A$2)-YEAR($A$1))*12 + MONTH($A$2)-MONTH($A$1)-1)/12) ثانيا بالكود - الدلة DateGap 1 - لايجاد الفرق بين التاريخين باليوم و الشهر و السنين معا الايام =dategap($A$1,$A$2,"md") الاشهر =dategap($A$1,$A$2,"ym") السنوات =dategap($A$1,$A$2,"y") 2 - ايجاد الفرق الكلي بالايام و الاشهر و السنوات الفرق الكلي بالأيام =dategap($A$1,$A$2,"d") الفرق الكلي بالأشهر =dategap($A$1,$A$2,"m") الفرق الكلي بالسنوات =dategap($A$1,$A$2,"y") الملاحظة ===== الدلة DateGap تولد اخطا: 1 - خطأ التاريخ الاول اكبر من التاريخ الثاني DATEGAP_WRONG_DATE_ORDER 2 - خطأ معامل الدالة .. (المعمل يجب ان يكن احدى القيم التالية: y m d md ym) DATEGAP_WRONG_OPERATOR يمكنك تحميل الدلة و المثال من الملف المرفق اسال الله تعالى ان يتقبل منى ومنكم صالح الاعمال DateGap DateDif الفروقات بين التواريخ.zip1 point
-
1 point
-
بارك الله فيك أخى ابن مصر الحمد الله توصلت للحل أشكرك وأشكر أستاذى الفاضل بن عليه ************************************** بعد ما حملت ملفك يابن مصر لقيت نفس اللى عملته تغيير الاشارات فى المسأله وفى المعادله الأولى فقط لك :fff: انتظرنى قريباً برنامج جديد انما ايه هيفرح حبابينا الأطفال1 point
-
تم التعديل على الملف حسب الحاجة مع الترقيم التلقائي حذف صفوف اوتو ماتيك.rar1 point
-
السلام عليكم ورحمة الله في الملف المرفق تجد حلين أرجو أن يفي بالغرض المطلوب... بن علية المرفق : تفقيط 1 بشرط.rar1 point
-
1 point
-
هذا ما أريده فعلاً .. بارك الله فيك أستاذي الفاضل .. جزاك الله خيرًا1 point
-
1 point
-
1 point
-
كود لنسخ ملف الاكسل كل 30 يوما و يتم تخزين الملف الجديد في المجلد Monthly Reports مع تاريخ الانشاء و اللوقت عملت مثال لتتضح الطريقة كل ماعليك فعله هو وضع الاجراء CheckAndCopyThisWB في حدث فتح الملف Sub CheckAndCopyThisWB() ' المجلد الذي سيتم تخزين الملفات فيه Const DestDir As String = "\Monthly Reports\" ' عنوان الخلية التي تحتوي على اخر تاريخ تم نسخ الملف Const LastCopyCell As String = "B1" ' اسم الملف بدون امتداد Dim WBName As String ' امتداد الملف بدون الاسم Dim WBExtension As String ' المسار كاملا لملف المصدر Dim SourceFile As String ' المسار كاملا للملف الجديد Dim DestFile As String ' تأكد انه مرة 30 يوما على اخر عملية نسخ او ان الملف ينسخ للمرة الاولى If Sheets("LOG").Range(LastCopyCell).Value = "" Or DateAdd("d", 1, Sheets("LOG").Range(LastCopyCell).Value) <= Date Then WBName = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - (Len(ThisWorkbook.Name) - InStrRev(ThisWorkbook.Name, ".") + 1)) WBExtension = Mid(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, "."), 7) SourceFile = """" & ThisWorkbook.FullName & """" DestFile = """" & ThisWorkbook.Path & DestDir & WBName & Format(Now(), "dd-mmm-yy-h-mm;@") & WBExtension & """" ' انسخ الملف Shell "CMD /C COPY /-Y " & SourceFile & " " & DestFile, vbHide ' حدث تاريخ اخر عملية نسخ Sheets("LOG").Range(LastCopyCell).Value = Date End If End Sub Check and Copy Workbook.zip1 point
-
1 point
-
جزاكم الله خيرا ربنا يتقبل منا ومنكم صالح الاعمال1 point
-
عملت لي صدااااااااااااااااااااع لم استطيع ان اطبق العمل عليها رغم انك ابدعت كثيرا في شرحها اخى الحبيب ابوسليمان لاراضى لك هذا الصداع فقط ارسل الى الملف الذى جربت فيه وساوضح لك الخطا ان شاء الله تقبل تحياتى1 point
-
السلام عليكم اخى الكريم ياريت واحده واحده علشان الاخوه الاعضاء يقدرو يساعدوك وعموما انا حاولت افهم ياريت تبعت ملف محاكى للى انت عاوزه يكون بسيط تقبل تحياتى بطاقة حضور الموظف.rar1 point
-
وعليكم السلام أعتقد أن النموذج ليس به أخطاء ولكن تصميمك للاستعلامات والعلاقات هو من تسبب في ذلك1 point
-
جزيت خيراً أخي الغالي أبو تراب على المعلومات القيمة .. واعذرني أني لم أفهم مقصودك من الدالة إذ أن الموضوع كما تعلم ليس موضوع تعليمي بقدر ما هو أكواد جاهزة .. فلم يخطر ببالي أنك تقصد هذا المقصد من الدالة .. تقبل اعتذاري عن سوء فهمي لك وجزيت خير الجزاء على المعلومات المفيدة جداً1 point
-
اولا تقبل شكري على الاهتمام بهذا الكود للتوضيح الغرض من الدالة ليس الدالة نفسها (فالدالة SUM تكفي و زيادة) و لكن الغرض الاساسي هواعطاء مثال على عمل اي دالة قادرة على قبول و سيط او اكثر دون تحديد عددها. على كلا اذا كان هناك ميزة للدالة فربما في ال VBA فالدالة WorksheetFunction.Sum تقبل الى حد 30 وسيط. من ناحيت الخطأ فسبب ان الدالة سترجع خطأ اذا وجدت اي وسيط ليس برقم حتى لوكان NULL. في رايي انه يمكن القياس على هذه الدالة لانشاء دوال اكثر ملائمة .. مثلا ;كتبت دالة مستفيدا من فكرة الكود بحيت تعمل على تعبئة الخلاياء باي نوع من البيانات الكود مع كود الاختبار Sub Fill(R As Range, ParamArray Values() As Variant) Dim i As Integer For i = LBound(Values) To UBound(Values) R.Offset(0, i).Value = Values(i) Next i End Sub Sub test() Fill [A1], 100, "This", True, -25.5 End Sub1 point
-
أخي أبو تراب ..الدالة غير منطقية .حيث توجد الدالة Sum أصلا بالإكسيل ولا أجد ميزة لهذه الدالة .. لو أمكن مثال توضيحي لمعرفة مزايا الدالة .. التي تجعلها متميزة عن الدالة المدمجة بالإكسيل قمت بعمل مقارنة بسيطة بين الدالتين أولاً الدالة المدمجة في هذه المعادلة =SUM(1,,,,,1) تعطي ناتج أما عند استخدام نفس المعادلة مع الدالة المستحدثة فتعطي خطأ Value =SumNew(1,,,,,1) بالنسبة لعدد الوسائط الدالة المدمجة Sum تقبل 255 وسيط أما الدالة المستحدثة فتقبل 254 فقط ..إذاً ما المميز في الدالة؟1 point
-
إحنا إخوات يا أ / ياسر وهانحن نسعى لتعم الفائدة على الجميع ولا داعى للإعتذار فأنت من الأخوة الأعزاء أنا إللى بعتذر لأننى لم أوضح شرح للأكواد وشكرا لمجهودك العظيم1 point
-
اعذرني أخي الحبيب ياسر البنا تجميع الأكواد يحتاج لوقت ومجهود .. وأكواد دسمة للغاية فأضطر آسفاً إلى وضعها بدون شرح (مع أن هذا يخالف الهدف الأساسي من الموضوع) ، لاشك أنها أكواد في قمة الروعة ، ولكننا نحتاج إلى شروحات حتى تكون المكتبة مرجعاً هاما يمكن لأي باحث الرجوع إليه والاعتماد على نفسه في تطبيق الحلول المقدمه في المكتبة تقبل اعتذاري .. وجزيت خيراً على كل ما تقدمه يكفيني ولو كود واحد بس بشرط يكون مشرووووووووح1 point
-
1 point
-
بطل حجج شوية تعبان وشوية ملكش بالكورة يالا لف التراك 100 مرة هههههههههههههههههههه1 point
-
الأخ الحبيب أبو عمر أولا هذا ليس بكود بل هذه معادلة (المعادلة في الإكسيل تبدأ بعلامة يساوي = أما الكود عبارة عن أسطر برمجية تكتب في محرر الفيجوال بيسك والكود يكتب بين Sub يليه اسم الإجراء وبعد كتابة الأكود ينتهي بالجملة End Sub) ثانيا لو أردت فهم معادلة بشكل جيد قم بتقسيمها جزء جزء حتى يسهل فهمها (قسمها تفهمها إن شاء الله) ثالثا إليك شرح المعادلة بشكل مبسط .. المعادلة عبارة عن معادلة بحث في النطاق A2:A20 وطالما أن البحث لا يشمل البحث عن خلية واحدة فبالتالي المعادلة معادلة صفيف أي تبدأ بقوس وتنتهي بقوس وهذه الأقواس لا تكتب يدوياً إنما يتم الضغط على CTRL + SHIFT +ENTER بعد الانتهاء من كتابة المعادلة ، هذا شرح عام للمعادلة نقسمها : =IFERROR(INDEX($A$2:$A$20; MATCH(0;COUNTIF($I$1:I3;$A$2:$A$20);0));"") الجزء الأول بعد علامة يساوي مرتبط بآخر جزء وهو خاص في حالة حدوث خطأ في ناتج المعادلة وهذا الخطأ هو #N/A تمت إضافته لتفادي الخطأ ، وفي حالة حدوث الخطأ يتم وضع فراغ وليس مسافة لأن الفراغ لا يشغل حيز أم المسافة بالمسطرة تشغل حيز =IFERROR( ;"") الجزء الثاني دالة INDEX وهي دالة البحث (لتعرف كيف تعمل الدالة قم بوضع مؤشر الماوس بعد القوس التالي مباشرة للدالة فيظهر لك البارامتر الخاص بالدالة - سيفيدك هذا في فهم المعادلة بشكل كبير - ، بالنسبة لهذه الدالة يتبعها ثلاثة بارامترات .. الأول هو Array أي المصفوفة أو بشكل أبسط النطاق والمقصود به نطاق البحث وهو هنا A2:A20 والبارامتر الثاني هو رقم الصف المطابق للبحث والبارامتر الثالث رقم العمود وهذا البارامتر اختياري أي يمكن تجاهله وهو في معادلتنا هذه تم تجاهله لأن البحث في عمود واحد وهو A نأتي للجزء الخاص باستخراج رقم الصف وهو أهم جزء في المعادلة .. MATCH(0;COUNTIF($I$1:I3;$A$2:$A$20);0) الدالة Match من ضمن دوال البحث ويتبعها ثلاثة بارامترات أيضا : الأول خاص بالقيمة المراد البحث عنها ، والثاني نطاق البحث عن القيمة ، والثالث عبارة عن تحديد طريقة البحث وتكون إحدى القيم 1 أو 0 أو -1 (الصفر للبحثث المتطابق) القيمة المطلوب البحث عنها 0 والجزء الأخير 0 للبحث المتطابق.... أما نطاق البحث عن القيمة فهي عبارة عن معادلة تكون نواتجها عبارة عن 1 أو صفر ، هنا تم استخدام الدالة COUNTIF دالة العد الشرطية COUNTIF($I$1:I1;$A$2:$A$20) ويتبعها النطاق وهو هنا الخلية $I$1:I1 حيث أول النطاق خلية ثابتة أمأ آخر النطاق خلية غير ثابتة حتى يتغير النطاق عند سحب المعادلة ، والبارامتر الثاني للدالة COUNTIF هو الشرط والشرط هنا هو القيم الموجودة في النطاق A2:A20 في الخلية I2 مثلا يبحث في النطاق فيجد كلمة المندوب والشرط هو إحدى القيم في النطاق A2:A20 فيرجع القيمة 0 فيعطي رقم الصف الذي يطابق القيمة صفر وهو الصف رقم 1 ، بالتالي يكون ناتج المعادلة MATCH في أول خلية رقم 1 وهو أول اسم (أحمد) وهكذا يتم استخراج القيم الغير مكررة في النطاق A2:A20 حتى إذا تم استخراج القيم كلها في النطاق لا تجد الدالة قيم أخرى فتعطي فراغ في باقي الخلايا الحمد لله الذي بنعمته تتم الصالحات1 point
-
السلام عليكم أخي الكريم الرمز الأول { } يستخدم في معادلات الصفيف وهو لايكتب مع المعادلة ، هو يتكون أوتوماتيكيا بعد الكتابة المعادلة وضغط Ctrl-Shift-Enter بدلا من Enter وحدها تجد شرح أوفي لهذه الخاصية علي الرابط http://office.microsoft.com/ar-sa/excel-help/HA010228458.aspx?pid=CH100648411025 الرمز الثاني [] يستخدم في الربط بين ملفات مختلفة فأنت تعرف مثلا أنك ممكن تجعل الخلية A1 في Sheet1 ترتبط بالخلية X71 مثلا في Sheet2 بمعني أنك إن وقفت علي الخلية A1 في Sheet1 ثم طبعت = ثم ذهبت بالماوس للخلية X71 مثلا في Sheet2 ثم Enter ستجد المعادلة في الخلية A1 في Sheet1 كالتالي =Sheet2!X71 وهذه العلامة ! التي أضيفت أوتوماتيكيا تدل الإكسل أن الرباط بين هذه الخلية وخلية في ورقة أخري من نفس الملف والآن إذا أعدنا نفس الحوار السابق للربط بين خليتين في ملفين مختلفين (بشرط يكونا مفتوحان كلاهما) ستجد المعادلة أشبه بــ =[Book1]Sheet2!X71 أي أن هذا الرمز [] الذي يضاف أوتوماتيكيا عن الربط بين ملفين يدل الإكسل أن الرباط بين هذه الخلية وخلية في ورقة أخري من ملف آخر غير اللي انت فيه1 point
-
السلام عليكم الاخ الحبيب / عباس السماوي بارك الله فيك وجعلك الله دائما في عون الجميع جزاك الله خيرا1 point
-
الدوال المنطقية : تمهيداً لفهم طبيعة هذه الدوال نورد المثال التالي : من المفترض أنك تعودت على كتابة صيغ حسابية عادية تحتوي عمليات الجميع و الضرب و ... الخ ، ولكن ماذا عن الصيغ المنطقية ؟ . الآن قم بكتابة الصيغة المنطقية التالية في شريط الصيغة و لكن بدون أن تدرجها : =A1>0 ماذا تتوقع أن تعطي الصيغة السابقة ؟ . حسناً ستقول أن الاكسل لن يفهم المقصود من هذه الصيغة أو لن يستطيع التعبير عنها على أقل تقدير !. و سيقوم حتماُ بإرجاع خطأ معين عندما يقوم بقراءتها. و لكن يا أخ قد يكون تخمينك في غير محله :p أدرج الصيغة السابقة و لاحظ النتيجة الاكسل يقوم بإرجاع إحدى القيمتين TRUE أو FALSE وذلك ليخبرنا عما إذا كانت الصيغة المنطقية السابقة محققة أم لا . الآن بعد التمهيد السابق لنبدأ بالتعرف على الدوال المنطقية التي يوفرها لنا الاكسل : الدالة AND : الدالة AND هي دالة منطقية تتعامل مع قيم منطقية (شأنها شأن الـ OR و الـ NOT) . ما المقصود بذلك ؟ ببساطة يجب أن تكون مدخلات هذه الدالة عبارة عن قيم منطقية (ناتجة عن علاقات منطقية محددة) لتقوم بدورها بإرجاع قيمة منطقية أيضاً . أي أنه يجب أن تكون جميع وسائط هذه الدالة عبارة عن علاقات منطقية . الدالة AND تقوم بإرجاع القيمة TRUE إذا كانت جميع مدخلاتها هي TRUE ، و تقوم بإرجاع القيمة FALSE إذا كان هناك مدخل واحد أو أكثر من مدخلاتها FALSE ، لاحظ الصيغة التالية : =AND(A1>0;B1=5) لاحظ أن الدالة السابقة ترجع القيمة TRUE في حالة واحدة فقط وهي أن تكون القيمة الموجودة في الخلية A1 أكبر من الصفر و القيمة الموجودة في الخلية B1 تساوي 5 ، و إلا فسوف ترجع القيمة FALSE . يمكنك زيادة عدد الشروط كما تشاء (ضمن حدود الاكسل) وذلك عن طريق فصل هذه الشروط (العلاقات المنطقية) عن بعضها بالفاصلة المنقوطة (شأنها شأن الـ OR) . الدالة OR : الدالة OR تقوم بإرجاع القيمة TRUE إذا كان هناك مدخل واحد على الأقل من مدخلاتها TRUE ، و تقوم بإرجاع القيمة FALSE إذا كانت جميع مدخلاتها FALSE ، لاحظ الصيغة التالية : =OR(A1<0;B1=10) لاحظ أن الدالة السابقة ترجع القيمة TRUE إذا كانت القيمة الموجودة في الخلية A1 أصغر من الصفر ، أو إذا كانت القيمة الموجودة في الخلية B1 تساوي 10 ، أو إذا تحققت العلاقتين السابقتين معاً ، و ترجع القيمة FALSE في حالة كون القيمة الموجودة في الخلية A1 ليست أصغر من الصفر و القيمة الموجودة في الخلية B1 لا تساوي 10 . الدالة NOT : تقوم هذه الدالة بعكس القيمة المنطقية لمدخلها ، فإذا كانت قيمة مدخلها TRUE فإنها ترجع FALSE ، و إذا كانت قيمة مدخلها FALSE فإنها ترجع TRUE ، لاحظ الصيغة التالية : =NOT(A1=0) الدالة السابقة ترجع القيمة TRUE في حال كون القيمة الموجودة في الخلية A1 لا تساوي الصفر ، و ترجع القيمة FALSE في حال كون القيمة الموجودة في الخلية A1 تساوي الصفر . يمكن الاستعاضة عن الصيغة السابقة بالصيغة : =A1<>0 الدالة NOT لا تتعامل سوى مع وسيط واحد . يمكننا أن نقوم بدمج الدوال السابقة (AND و OR و NOT) عن طريق تداخل الدوال ، لاحظ الصيغة التالية : =NOT(OR(AND(A1>0;B1=5);AND(A1<0;B1=10))) الآن بعد أن تعرفنا على الدوال السابقة قد تتساءل في أي شييء يمكننا استخدامهم ؟!! قد تجد جواباً لسؤالك بعد أن تتعرف على الدالة IF :pp: الدالة IF : الشكل العام لهذه الدالة هو كما يلي : =IF(condition;result1;result2) في المدخل الأول condition يجب وضع الشرط أو الدالة المنطقية أو العلاقة المنطقية التي ستعطي إحدى القيمتين TRUE و FALSE. إذا كانت قيمة المدخل الأول TRUE فإن الدالة IF ستنفذ الصيغة الموجودة (أو ترجع القيمة الموجودة) في جواب الشرط الأول result1 . و إذا كانت قيمة المدخل الأول FALSE فإن الدالة IF ستنفذ الصيغة الموجودة (أو ترجع القيمة الموجودة) في جواب الشرط الثاني result2 . لاحظ الصيغ التالية : =IF(A1>=50;"ناجح";"راسب") =IF(A1>B1;A1-B1;B1-A1) =IF(NOT(OR(A1="";B1=""));A1+B1;) =IF(COUNT(A1:A5)=5;SUM(A1:A5);"") =IF(ISNA(VLOOKUP(C2;A2:B10;2;FALSE));"";VLOOKUP(C2;A2:B10;2;FALSE)) ويمكننا استثمار الدالة IF في تداخل الدوال ، لاحظ الصيغة التالية : =IF(A1<0;"";IF(A1<50;"راسب";IF(A1<60;"مقبول";IF(A1<70;"جيد";IF(A1<80;"جيد جداً";IF(A1<90;"ممتاز";IF(A1<=100;"درجة الشرف";""))))))) أرجو أن أكون قد وفقت في إيصال المعلومة .... تحياتي1 point