سعيد بيرم قام بنشر أكتوبر 19 مشاركة قام بنشر أكتوبر 19 السلام عليكم ورحمة الله وبركاته طبتم جميعا بكل خير أينما كنتم أرغب فى مساعدتكم فى هذا الموضوع فربما أجد حلاً على أيديكم الكريمة كيف يمكن عمل قائمة بأيام الشهر تبدأ من يوم الأحد وحتى يوم الخميس من كل أسبوع بإستثناء يومى الجمعة والسبت على إعتبار أنهما عطلة من كل أسبوع بمعنى أخر عند تغيير شهر الإدخال بالخلية C2 إلى شهر جديد وليكن نوفمبر 2024 أريد أن يبدأ هذا الشهر من يوم الأحد الى الخميس حتى نهايته وهكذا مع باقى شهور العام ***** فهل يمكن تحقيق ذلك أرجو أن يكون ذلك منطقيا ***** برجاء الإطلاع على المرفق وجزاكم الله خيرا أيام الشهر من يوم محدد.xlsx رابط هذا التعليق شارك More sharing options...
أبومروان قام بنشر أكتوبر 19 مشاركة قام بنشر أكتوبر 19 السلام عليكم ورحمة الله وبركاته ممكن تتسخدم المعادله ادناه لعله يكون المطلوب =IF(WEEKDAY(DATE($F$2,$E$2, ROW(A1)))=6, "", IF(WEEKDAY(DATE($F$2, $E$2, ROW(A1)))=7, "", DATE($F$2, $E$2, ROW(A1)))) أيام الشهر من يوم محدد.xlsx رابط هذا التعليق شارك More sharing options...
سعيد بيرم قام بنشر أكتوبر 19 الكاتب مشاركة قام بنشر أكتوبر 19 شكرا لك أخى الكريم لطيب المشاركة هل هناك طريقة أخرى غير ذلك نظرا لوجود صفوف فارغة مع الأخذ فى الإعتبار عدم تقسيم التاريخ الى ثلاث خلايا 1 رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 19 مشاركة قام بنشر أكتوبر 19 (معدل) وعليكم السلام ورحمة الله تعالى وبركاته بعد ادن الاستاد @أبومروان لتجنب الفراغات يمكنك تجربة هدا الخلية A5 =IF($C$2<>"",TEXT(B5, "dddd"),"") او =IF(C2="", "", FILTER(CHOOSE(WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5), 1), "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"), WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5), 1))) الخلية B5 =IF(C2="", "", FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5))) لانشاء قائمة شهور السنة =EOMONTH(DATE(2024, 1, 1), ROW(A1)-2) + 1 أيام الشهر من يوم محدد.xlsx تم تعديل أكتوبر 19 بواسطه محمد هشام. 1 رابط هذا التعليق شارك More sharing options...
سعيد بيرم قام بنشر أكتوبر 19 الكاتب مشاركة قام بنشر أكتوبر 19 (معدل) أخى واستاذى الفاضل / محمد هشام السلام عليكم ورحمة الله وبركاته عند تغير اى شهر أتلقى رسالة مفادها " لا يمكنك تغيير جزء من المصفوفة " فهل من سبيل أخر بواسطة ال VBA **** ببساطة أريد أن يبدأ كل شهر من يوم الأجد مع تجاهل يومى الجمعة والسبت على إعتبار أنهما أجازة " عطله رسمية " ويمكنك تحديد تاريخ بداية ونهاية كقائمة وليكن من 1/9/2024 حتى 30/6/2025 فربما لديك حل أخر وافر التحية والتقدير وجزاكم الله خيرا تم تعديل أكتوبر 19 بواسطه سعيد بيرم رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 19 مشاركة قام بنشر أكتوبر 19 40 دقائق مضت, سعيد بيرم said: عند تغير اى شهر أتلقى رسالة مفادها " لا يمكنك تغيير جزء من المصفوفة " المعادلات تشتغل معي بشكل جيد وتنفد المطلوب على العموم ادا كنت تقصد انك ترغب بظهور أسماء الأيام باللغة العربية جرب حل اخر كما هو موضح أسفله أسماء الأيام بالعربية =IF(C2="", "", FILTER(CHOOSE(WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5), 1), "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت"), WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5), 1))) التواريخ =IF(C2="", "", FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5) * (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <> 7))) 57 دقائق مضت, سعيد بيرم said: يمكنك تحديد تاريخ بداية ونهاية كقائمة وليكن من 1/9/2024 حتى 30/6/2025 =EOMONTH(DATE(2024, 9, 1), ROW(A1)-2) + 1 أيام الشهر من يوم محدد.xlsx رابط هذا التعليق شارك More sharing options...
سعيد بيرم قام بنشر أكتوبر 19 الكاتب مشاركة قام بنشر أكتوبر 19 جزاكم الله خيرا أخى محمد بمراجعة ما تفضلت به تبين أن هناك بعض الشهور لم تبدأ بيوم الأحد مثالا على ذلك 1/1/2025 يبدأ بيوم الأربعاء فهل من سبيل أخر رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 19 مشاركة قام بنشر أكتوبر 19 (معدل) نعم اخي @سعيد بيرم سنقوم بتعديل المعادلات لإستخراج الأيام والتواريخ بداية من يوم الأحد من كل شهر مع تجاهل يوم الجمعة والسبت الخلية (A5) =IF(C2="", "", FILTER(CHOOSE(WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5) * (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <> 7) * (SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1) >= C2 + (7 - WEEKDAY(C2, 1)))), 1), "الأحد", "الإثنين", "الثلاثاء", "الأربعاء", "الخميس"), WEEKDAY(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5) * (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <> 7) * (SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1) >= C2 + (7 - WEEKDAY(C2, 1)))), 1))) الخلية (B5) =IF(C2="", "", FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5) * (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <> 7) * (SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1) >= C2 + (7 - WEEKDAY(C2, 1))))) او =IF(C2="", "", FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, EDATE(C2, 0), 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, EDATE(C2, 0), 1), 1) < 6) * (SEQUENCE(DAY(EOMONTH(C2, 0)), 1, EDATE(C2, 0), 1) >= EDATE(C2, 0) + (7 - WEEKDAY(EDATE(C2, 0), 1))))) قم بتنسيق عمود التاريخ بما يناسبك ستظهر لك قائمة بأيام الشهر بدءا من أول يوم أحد وتجاهل يومي الجمعة والسبت لإستخراج عدد الأيام المتبقية في الشهر المحدد في الخلية (C2) =IF(C2="", "", COUNTA(FILTER(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <= 5) * (WEEKDAY(SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1), 1) <> 7) * (SEQUENCE(DAY(EOMONTH(C2, 0)), 1, C2, 1) >= C2 + (7 - WEEKDAY(C2, 1)))))) بالتوفيق ........ في حالة كنت تستخدم إصدار قديم لن تشتغل معك الصيغ. أخبرني بذالك لمحاولة إنشاء دالة أو كود vba ينفذ نفس المهمة أيام الشهر من يوم V2 محدد.xlsx تم تعديل الأحد at 04:54 بواسطه محمد هشام. 1 رابط هذا التعليق شارك More sharing options...
سعيد بيرم قام بنشر الأحد at 13:40 الكاتب مشاركة قام بنشر الأحد at 13:40 (معدل) السلام عليكم ورحمة الله وبركاته أخى محمد هشام فى حقيقة الأمر لا أدرى ماذا يحدث نفس الرسالة السابقة " لا يمكنك تغيير جزء من المصفوفة " ربما حضرتك تستخدم إصدار أحدث علما بأننى أستخدم إصدار 2010 فهل ياترى قد يكون ذلك سببا تم تعديل الأحد at 13:47 بواسطه سعيد بيرم رابط هذا التعليق شارك More sharing options...
عبدالله بشير عبدالله قام بنشر الأحد at 15:49 مشاركة قام بنشر الأحد at 15:49 (معدل) السلام عليكم بعد اذنكما محاولة حسب فهمى لطلبك فى الملف المرفق باول مشاركة عن طربق الكود في حدث الورقة الكود Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("C2")) Is Nothing Then Me.Range("A5:B" & Me.Rows.Count).ClearContents Dim monthYear As Date Dim firstDay As Date Dim lastDay As Date Dim currentDay As Date Dim outputRow As Long monthYear = Me.Range("C2").Value firstDay = DateSerial(Year(monthYear), Month(monthYear), 1) lastDay = DateSerial(Year(monthYear), Month(monthYear) + 1, 0) Dim startDay As Date startDay = firstDay Do While Weekday(startDay, vbSunday) <> vbSunday startDay = startDay + 1 Loop outputRow = 5 For currentDay = startDay To lastDay If Weekday(currentDay, vbSunday) <= 5 Then Me.Cells(outputRow, 2).Value = currentDay Select Case Weekday(currentDay, vbSunday) Case 1 Me.Cells(outputRow, 1).Value = "الأحد" Case 2 Me.Cells(outputRow, 1).Value = "الإثنين" Case 3 Me.Cells(outputRow, 1).Value = "الثلاثاء" Case 4 Me.Cells(outputRow, 1).Value = "الأربعاء" Case 5 Me.Cells(outputRow, 1).Value = "الخميس" End Select outputRow = outputRow + 1 End If Next currentDay End If End Sub الملف أيام الشهر من يوم محدد.xlsb تم تعديل الأحد at 15:51 بواسطه عبدالله بشير عبدالله 1 رابط هذا التعليق شارك More sharing options...
أفضل إجابة محمد هشام. قام بنشر الأحد at 17:18 أفضل إجابة مشاركة قام بنشر الأحد at 17:18 (معدل) هدا بسبب عدم توافق نسخة الاوفيس لديك مع المعادلات المستخدمة على العموم لإثراء الموضوع أكثر اليك دالة تنفد المطلوب بادن الله عند التغيير في الخلية C2 Function xdates(StartDate As Variant) As Variant Dim Dates() As Variant Dim Days() As String Dim Result() As Variant Dim tmp As Date, r As Date Dim n As Long, i As Long, maxday As Long If IsEmpty(StartDate) Or Not IsDate(StartDate) Then xdates = Array("") Exit Function End If maxday = 30 ' الحد الأقصى لعدد الأيام r = DateSerial(Year(StartDate), Month(StartDate) + 1, 0) ' العثور على أول يوم أحد tmp = StartDate + (7 - Weekday(StartDate, vbSunday)) Mod 7 If Weekday(StartDate, vbSunday) = 1 Then tmp = StartDate End If ReDim Dates(1 To maxday) ReDim Days(1 To maxday) For tmp = tmp To r ' تجاهل يومي الجمعة (6) والسبت (7) If Weekday(tmp, vbSunday) <= 5 Then ' أيام الأحد إلى الخميس فقط n = n + 1 Days(n) = Choose(Weekday(tmp, _ vbSunday), "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس") Dates(n) = tmp If n >= maxday Then Exit For End If Next tmp ReDim Result(1 To n, 1 To 2) For i = 1 To n Result(i, 1) = Days(i) Result(i, 2) = Dates(i) Next i xdates = Result End Function في الخلية A6 =xdates(C2) في حالة الرغبة بإستخراج النتائج قيم يمكنك وضع الكود التالي في حدث ورقة Sheet1 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim f As Worksheet: Set f = ThisWorkbook.Sheets("Sheet1") Dim rCrit As Variant, startRow As Long, startCol As Long On Error GoTo CleanExit startRow = 5 'رقم الصف startCol = 1 '(A)' أول عمود لوضع النتائج If Not Intersect(Target, Me.Range("C2")) Is Nothing Then rCrit = xdates(Me.Range("C2").Value) With f.Range("k6:l" & f.Rows.Count) .ClearContents End With If Not IsEmpty(rCrit) Then Dim i As Long For i = LBound(rCrit) To UBound(rCrit) f.Cells(startRow + i, startCol).Value = rCrit(i, 1) f.Cells(startRow + i, startCol + 1).Value = rCrit(i, 2) Next i End If End If CleanExit: End Sub قم تطبيق الفكرتين على نفس الملف لتختار ما يناسبك أيام الشهر من يوم محدد vba.xlsb تم تعديل الأحد at 20:56 بواسطه محمد هشام. 2 رابط هذا التعليق شارك More sharing options...
سعيد بيرم قام بنشر الأحد at 18:51 الكاتب مشاركة قام بنشر الأحد at 18:51 السلام عليكم ورحمة الله وبركاته أخى محمد وعبدالله تمت الإفادة بفضل الله أولا ثم بفضلكم وافر التحية والتقدير 1 رابط هذا التعليق شارك More sharing options...
الردود الموصى بها
من فضلك سجل دخول لتتمكن من التعليق
ستتمكن من اضافه تعليقات بعد التسجيل
سجل دخولك الان