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

ياسر خليل أبو البراء

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

    13,165
  • تاريخ الانضمام

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

  • Days Won

    412

كل منشورات العضو ياسر خليل أبو البراء

  1. هو فيه حل لمشكلة المرجع الدائري .. من خلال خصائص الإكسيل ..Excel Options ثم اختر Formulas ثم علم علامة صح على المربع بجانب الخيار المسمى Enable Iteratve calculation ولكن ما هو شكل النتائج المتوقعة مع المجموع 100 على سبيل المثال .. لأن الناتج في هذه الحالة وبالاحتفاظ بالمعادلات يساوي 0 ... أو جرب الكود التالي في حدث ورقة العمل .اعمل كليك يمين على اسم ورقة العمل ثم View code والصق الكود التالي Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub Application.EnableEvents = False If Target.Address = "$E$4" Then Target.Offset(, 1) = Target / Target.Offset(, -1) If Target.Address = "$F$4" Then Target.Offset(, -1) = Target / Target.Offset(, -2) Application.EnableEvents = True End S
  2. خلي السطر بالشكل ده عشان تجمع بين الشرطين If (Found.Offset(0, -1) > 4 And Sheets(H).Range("D5").Value > 50) Or (Found.Offset(0, -1) > 3 And Sheets(H).Range("D5").Value < 50) Then
  3. لن أطيل في الرد وسأوجز في كلمات بسيطة .. (لعله خير) (وعسى أن تكرهوا شيئاً وهو خير لكم ..) (ضاااااااااااااااقت فلما استحكمت حلقاتها فرجت .. وكنت أظنها حتماً ستفرج)
  4. وعليكم السلام ورحمة الله وبركاته أخي الحبيب أبو يوسف ما هي المعادلات المستخدمة ؟يرجى إدراج بعض النتائج المتوقعة ..
  5. أخي الكريم راجع الرابط التالي فيه حل لمشكلتك إن شاء الله من هنا
  6. أخي الحبيب أبو يوسف يؤسفني توقف القطار فأنا أحب دائماً أن أرى قطارك مسرعاً .. ولكن لي عتاب عليك لما تعتمد على غيرك في تحريك عجلات القطار ..لما لا تبادر أنت وتحرك العجلات وعندها ستجد أنك ستقوم بسحب الجميع مع هذه الحركة كيف ستحركه ؟ ابدأ بتناول التفاصيل الصغيرة ..قم بشرح ما توصلت إليه (يعني كأنك بتفكر بصوت عالي) وإن توقفت في جزئية سألت عنها وحاولت فيها ..هكذا أتعلم ! قد يبدو الأمر صعباً ولكنه لن يكون صعباً على الإطلاق إذا ما تكررت المحاولات ووجد الامل بشكل مستمر ... في انتظار دفع عجلات القطار ليصل إلى مبتغاه ونحن معك بما أوتينا على قدر ما نعلم .. ولن نبخل بمعلومة أو بوقت تقبل وافر تقديري واحترامي
  7. التعديل في هذا السطر فقط If Found.Offset(0, -1) > 4 And Range("D5") > 50 Then غيره ليصبح بهذا الشكل If Found.Offset(0, -1) > 4 And Sheets(H).Range("D5") > 50 Then
  8. فقط عدل هذا الجزء وجرب الكود Sheets(H).Range("D5").Value > 50
  9. أخي الغالي مختار تسلم على الإضافات الجميلة بس بردو لازم إنت تجاوب وتقول كل الحلول الممكنة اللي ممكن من خلالها تخلي المصفوفة تبدأ من الواحد مش من الصفر ... وعلى فكرة فيه حل مش موجود في الشرح ..
  10. ممكن تكون شغال على 2003 ..عشان كدا بتحصل المشكلة معاك جرب تغير XFD1 إلى مثلاً AA1 أو أي عمود بعيد عن البيانات
  11. أعتقد أن المرفق غير معبر عن الطلب بشكل كافي لتقديم المساعدة ..يرجى إرفاق ملفك الأصلي مع مسح البيانات الحساسة ووضع بيانات وهمية مكانها
  12. جرب الكود التالي .. Private Sub Workbook_Open() Dim X As Long, WS As Worksheet, SH As Worksheet Set WS = Sheets("متوسط اوزان الشهر ") X = WS.Range("XFD1").Value Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlManual If X > 5 Then For Each SH In ThisWorkbook.Sheets If SH.Name <> "متوسط اوزان الشهر " Then SH.Delete Next SH Else WS.Range("XFD1").Value = X + 1 End If ThisWorkbook.Save Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
  13. وعليكم السلام ورحمة الله وبركاته بارك الله فيك أخي الحبيب أبو يوسف على مرورك العطر وكلماتك الرقيقة والمشجعة خلية نحل آه وبتدي عسل آه لكن بردو النحل بيلسع ... اللي مش هيعمل الواجب هيتلسع ... جمعنا الله وإياكم في الفردوس الأعلى من الجنة .. اللهم آمين
  14. بارك الله فيك أخي الحبيب مختار وتسلم على التجميعة الجميلة دي يا ريت اللي متابع الشرح يشوف الأمثلة ويشوف هل فيه شيء مش مفهوم أو فيه شيء جديد عشان يت تناوله في المرات القادمة إن شاء الله أخي مختار بالنسبة للمثال الأول : نسأل الأعضاء سؤال تم شرحه عشان نشوف الدماغ حاضرة ولا نامت Sub Fillrangeusingarray() Dim Arr Arr = Array("A", "B", "C", "D") Range("A3").Resize(1, UBound(Arr) + 1) = Arr End Sub في المثال ده ليه تم إضافة رقم 1 في آخر السطر ؟ وما هي الحلول الممكنة التي نمكننا من التخلص من المشكلة ؟ أي التعامل بدون إضافة رقم 1
  15. إخواني وأحبابي بارك الله فيكم مروركم العطر .. لا أريد أن أستقل بالموضوع فكما ذكر أخي الغالي إبراهيم أن المعلومات يعرفها معظمنا ولكن لابد من تناولها لكي نفهم طبيعة عمل المصفوفات حتى يسهل علينا فيما بعد إدراك الأمور بشكل أفضل .. ولن أتطرق إلى الموضوعات الكبرى مرة واحدة ..لابد من وضع حجر الأساس ويا ريت الكل يشارك ويساهم لا أريد متابعين فقط بل مشاركين ومساهمين ولو بقدر قليل فكل يجود بما عنده تقبلوا تحياتي
  16. وعليكم السلام ورحمة الله وبركاته أخي وحبيبي في الله أبو يوسف جزيت خيراً على دعائك الطيب ومرورك العطر وإن كنت أفضل ألا يكون مروراً وفقط وأن يكون تفاعلاً ومشاركةً ومساهمةً .. أقدر ضغوط عملك وأتمنى تواجدك بيننا إن شاء الله تقبل وافر تقديري واحترامي
  17. جرب التعديل البسيط Private Sub Workbook_Open() Dim exDate As Date, SH As Worksheet exDate = "10/08/2015" Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlManual If Date >= exDate Then For Each SH In ThisWorkbook.Sheets If SH.Name <> "متوسط اوزان الشهر " Then SH.Delete Next SH ThisWorkbook.Save End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
  18. أخي الحبيب بكار مشكور على مرورك الطيب وتشجيعك للموضوع .. في انتظار مساهماتك في الموضوع
  19. السلام عليكم ورحمة الله وبركاته آثرت أن أفرد كل حقة في موضوع وكل حلقة ستكون ثلاثة أجزاء إن شاء الله حتى لا يطول الموضوع ويتوه الأعضاء بين طيات السطور نستكمل الحديث عن المصفوفات ...ونتحدث اليوم عن المصفوفة ثنائية الأبعاد .. عشان نفهم شكل المصفوفة الثنائية ..تخيل ورقة عمل يكون اتجاهها من الشمال لليمين ..طبق عملي عشان تفهم شكل المصفوفة كويس .. افتح ملف إكسيل وخلي ورقة العمل اتجاهها من الشمال لليمين من خلال التبويب Page Layout ثم الأيقونة Sheet Right-to-Left وضع بعض البيانات في الخلايا بالشكل التالي : A1= 10 B1=20 A2=30 B2=40 A3=50 B3=60 أنا تعمدت إنك تكتب القيم بالترتيب ده لأن هو ده اللي المصفوفة بتشوفه .. يعني نفس الترتيب ده هيكون داخل المصفوفة ، بمعنى آخر المصفوفة بتبدأ تشوف القيم الموجودة ابتداءً من اليسار أول خلية A1 وبعدين تمشي في الصف ولما الصف يخلص تروح للصف التالي يعني على شكل زجزاج ..ارسم الاتجاهات هتلاقي المصفوفة بتمشي على زجزاج .. نشوف الكود عشان نتأكد أكتر من صحة الكلام ده Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") End Sub نكتب السطرين دول .. نظهر نافذة Locals عشان نشوف عناصر المصفوفة ونشوف القيم لكل عنصر ضع مؤشر الماوس في أي مكان داخل الماكرو ادعس F8 3 مرات ، وشوف النافذة .. اضغط على علامة الزائد عشان تشوف شكل المصفوفة الثنائية (ذات البعدين) هنلاقي 3 أبعاد (دا البعد الأول ..اللي هو بعد الصفوف) Arr(1) Arr(2) Arr(3) بجانب كل بعد من أبعاد الصفوف علامة زائد ..لو فتحنا علامة الزائد الأولى هنلاقي الشكل ده Arr(1,1) Arr(1,2) ركز في شكل العنصر ...دلوقتي المحرر بيشوف البعد الأول بشكل مستقل (بعد الصفوف يعني بيتعامل مع الصفوف أولاً ...الصف في المقام الأول) ..بعد ما سيادته يشوف الصفوف يبدأ في عملية تشريح الصف عمود عمود ويجلب كل قيمة في العمود .. فلما فتحنا الجزء الخاص بالصف الأول لقينا Arr(1,1) يعني الصف الأول العمود الأول يعني A1 ... وقيمته تساوي 10 وفي نفس الصف انتقل للعمود الثاني Arr(1,2) يعني الصف الأول العمود الثاني ..يعني B1 وقيمته تساوي 20 ... بعد الانتهاء من جميع الأعمدة في الصف الأول يبدأ ينتقل للصف الثاني .. ومن الصف الثاني يبدأ يتعامل مع كل عمود وهكذا وهكذا وهكذا أرجو أن تكون وصلت المعلومة بشكل جيد لأن فهمك لطبيعة المصفوفة هيسهل عليك فهم أي معلومة أخرى ************** ننتقل لجزئية جديدة ألا وهي أول رقم في الفهرس وآخر رقم ..أعتقد ممكن تعرفوها بسهولة أول رقم في الفهرس وآخر رقم من خلال كلمة LBound وكلمة Ubound زي ما اتعملنا قبل كدا أضف السطرين للكود السابق Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr) MsgBox UBound(Arr) End Sub نفذ الماكرو هتلاقي أول رقم 1 وآخر رقم 3 (دا أول صف وآخر صف )) صحيح ... نعم صحيح معنى الكلام ده إن هو بيجيب أول وآخر رقم للبعد الأول بعد الصفوف ...طيب إحنا عندنا دلوقتي بعد ثاني اللي هو بعد الأعمدة .. دا ملوش لازمة ولا مهم ؟! أكيد مهم ...وعشان نعرفه يبقا لازم هنا في التعامل مع المصفوفات ثنائية الأبعاد نكون محددين أكتر ونحدد البعد اللي إحنا عايزينه في المثال السابق ممكن نعدل تعديل بسيط عشان نفهم النقطة دي Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr, 1) MsgBox UBound(Arr, 1) End Sub عملنا ايه أضفنا رقم 1 ودا بيمثل البعد الأول ..وبالتالي نحصل على نفس النتائج أول رقم 1 وآخر رقم 3 نفهم من كدا إن محرر الاكواد بيفهم إنك لو تركت الرقم 1 من غير ما تكتبه يبقا نفس الكلام لو كتبته (يبقا الافتراضي إنه بيتعامل مع البعد الأول ..معلش اعذروه إنه بيفضل البعد الأول ..وتقريباً بيفضل البعد الأول بعد الصفوف لأن الصفوف فيها كتير من حروف المصفوفة (الحر عمل عمايله مع دماغي)) أظن كدا فهمنا إننا لو عايزين نعرف أول رقم وآخر رقم في البعد الثاني هنستبدل رقم 1 برقم 2 Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox LBound(Arr, 2) MsgBox UBound(Arr, 2) End Sub هتلاقي النتائج 1 و 2 يعني أول رقم في البعد الثاني بعد الأعمدة هو 1 (العمود الأول) ، وآخر رقم في البعد الثاني هو 2 (العمود الثاني) مما سبق : يمكن معرفة طول المصفوفة وعرضها جرب الكود التالي Sub TwoDimensionalArray() Dim Arr Arr = Range("A1:B3") MsgBox "طول المصفوفة أي عدد الأسطر أو الصفوف بها " & UBound(Arr, 1) MsgBox "عرض المصفوفة أي عدد الأعمدة بها " & UBound(Arr, 2) End Sub اعتمدنا هنا على كلمة UBound لأنها بتجيب من الآخر ..فبتجيب في السطر الأول عدد أسطر أو صفوف المصفوفة ، وفي السطر الثاني بتجيب عدد الأعمدة .. طيب : لونظرنا نظرة تفحص لشكل النطاق (اللي هو شبه شكل المصفوفة ) هنلاقيه على شكل مربع أو مستطيل .. وعشان نعرف عدد عناصر أو عدد خلايا النطاق نعمل ايه يا ترى ..بنضرب الطول × العرض عشان يديني المساحة (فين بتوع الرياضيات !!) طيب الطول في المثال السابق 3 (عدد الصفوف) ، والعرض يساوي 2 (عدد الأعمدة) يبقا معنى الكلام ده إن عدد عناصر المصفوفة يساوي = 3 × 2 = 6 عناصر أضف السطر التالي في نهاية الكود السابق MsgBox "عدد عناصر المصفوفة أي حجمها يساوي " & UBound(Arr, 1) * UBound(Arr, 2) آخر نقطة هنتكلم فيها .. استبدل هذا السطر في الكود Arr = Range("A1:B3") إلى هذا السطر Arr = Range(Cells(1, 1), Cells(3, 2)) ركز في الجزء ده : Cells(3, 2) طبعاً دي طريقة تانية لتحديد النطاق إننا بنستخدم كلمة Cells يليها رقم الصف ورقم العمود ، ولما نستخدمها بالشكل ده مع كلمة Range معناها نقطة البداية للنطاق (اللي هو A1) ، والجزء التاني نقطة النهاية (اللي هو (B3) ركز مع آخر خلية في النطاق هتلاقي رقم 3 يمثل آخر صف ، ورقم 2 يمثل رقم آخرعمود (أظن كدا وضحت) يعني طول المصفوفة وعرضها بنقدر نحدده من خلال آخر عنصر أو آخر خلية نكتفي بهذا القدر حتى لا يفقد الموضوع أهميته وإلى لقاء آخر متجدد بإذن الله
  20. أخي الغالي مختار ابدأ اشتغل بس واحدة واحدة علينا ... يعني كل نقطة في يوم عشان نقدر نستوعب كويس .. وأنا معاك إن شاء المولى الحمد لله بدأت تمطر في عز الحر
  21. أخي الحبيب أبو يوسف عندما يكون المطلوب عام وشامل لا تجد استجابة ..عليك بتجزئة طلبك .. واحدة واحدة زي ما بيقولوا (لو تفتكر موضوع المدرسة القرآنية .. الأخ صاحب الموضوع طرح موضوعه أكثر من مرة ولم يجد أي استجابة لأن في طرحه في أول الأمر كان عام وشامل وغير محدد الهدف ..حتى تدخلت وطلبت منه أن يبدأ من نقطة الصفر ويبدأ في طلبه جزئية جزئية ..وهكذا حتى تم الأمر بفضل الله وعونه ..) فإليك نصيحتي .. عندما يقطع الخبز إلى قطع صغيرة يسهل مضغه ومن ثم يسهل هضمه ..فرفقاً بإخوانك وابدأ ملفك بنفسك دعك من ملفات الآخرين (صمم برنامجك بنفسك) ابدأ في التصميم واطلب جزئية جزئية حتى لو تطلب الأمر أن تطرح عشرات الموضوعات .. ولكن لكل موضوع طلب .هكذا ستجد الاستجابة السريعة كلما كان الطلب بسيطاً كلما كانت الاستجابة أكبر والانتهاء من الموضوع أسرع أرجو أن تتقبل نصيحة ابن لأبيه
  22. أخي الحبيب خالد الرشيدي بارك الله فيك وجزاك الله كل خير ..إبداع متواصل بلا فواصل إليك تعديل بسيط جداً ..بحيث تتعامل مع الأرقام فقط أكبر من الصفر .. أي تجنباً للنصوص والتواريخ المدخلة في العمود الأول وكذلك عمل تنسيق لللتاريخ بحيث يتناسب مع يوم / شهر / سنة Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A1:A100")) Is Nothing Then VBA.Calendar = vbCalGreg If Target > 0 And IsNumeric(Target) Then With Target(1, 2) .Value = Format(Date, "[$-1010000]yyyy/mm/dd;@") .EntireColumn.AutoFit End With Else Target(1, 2).ClearContents End If End If End Sub
  23. أخي الحبيب إبراهيم صبراً حتى نهضم الموضوع بشكل جيد ..لا أريد كلام نظري وحسب بل التطبيق مهم جداً في تثبيت المعلومة أريد منك مساعدتي في اقتراح الجزئيات التي يجب شرحها وتشريحها وبالأمثلة التطبيقية كما فعلت من قبل في مشاركاتك السابقة تقبل وافر تقديري واحترامي
×
×
  • اضف...

Important Information