أبو سجده قام بنشر أكتوبر 19 قام بنشر أكتوبر 19 السلام عليكم ورحمة الله وبركاته طبتم جميعا بكل خير أينما كنتم أرغب فى مساعدتكم فى هذا الموضوع فربما أجد حلاً على أيديكم الكريمة كيف يمكن عمل قائمة بأيام الشهر تبدأ من يوم الأحد وحتى يوم الخميس من كل أسبوع بإستثناء يومى الجمعة والسبت على إعتبار أنهما عطلة من كل أسبوع بمعنى أخر عند تغيير شهر الإدخال بالخلية C2 إلى شهر جديد وليكن نوفمبر 2024 أريد أن يبدأ هذا الشهر من يوم الأحد الى الخميس حتى نهايته وهكذا مع باقى شهور العام ***** فهل يمكن تحقيق ذلك أرجو أن يكون ذلك منطقيا ***** برجاء الإطلاع على المرفق وجزاكم الله خيرا أيام الشهر من يوم محدد.xlsx
أبومروان قام بنشر أكتوبر 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
أبو سجده قام بنشر أكتوبر 19 الكاتب قام بنشر أكتوبر 19 شكرا لك أخى الكريم لطيب المشاركة هل هناك طريقة أخرى غير ذلك نظرا لوجود صفوف فارغة مع الأخذ فى الإعتبار عدم تقسيم التاريخ الى ثلاث خلايا 1
محمد هشام. قام بنشر أكتوبر 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
أبو سجده قام بنشر أكتوبر 19 الكاتب قام بنشر أكتوبر 19 (معدل) أخى واستاذى الفاضل / محمد هشام السلام عليكم ورحمة الله وبركاته عند تغير اى شهر أتلقى رسالة مفادها " لا يمكنك تغيير جزء من المصفوفة " فهل من سبيل أخر بواسطة ال VBA **** ببساطة أريد أن يبدأ كل شهر من يوم الأجد مع تجاهل يومى الجمعة والسبت على إعتبار أنهما أجازة " عطله رسمية " ويمكنك تحديد تاريخ بداية ونهاية كقائمة وليكن من 1/9/2024 حتى 30/6/2025 فربما لديك حل أخر وافر التحية والتقدير وجزاكم الله خيرا تم تعديل أكتوبر 19 بواسطه سعيد بيرم
محمد هشام. قام بنشر أكتوبر 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
أبو سجده قام بنشر أكتوبر 19 الكاتب قام بنشر أكتوبر 19 جزاكم الله خيرا أخى محمد بمراجعة ما تفضلت به تبين أن هناك بعض الشهور لم تبدأ بيوم الأحد مثالا على ذلك 1/1/2025 يبدأ بيوم الأربعاء فهل من سبيل أخر
محمد هشام. قام بنشر أكتوبر 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 تم تعديل أكتوبر 20 بواسطه محمد هشام. 1
أبو سجده قام بنشر أكتوبر 20 الكاتب قام بنشر أكتوبر 20 (معدل) السلام عليكم ورحمة الله وبركاته أخى محمد هشام فى حقيقة الأمر لا أدرى ماذا يحدث نفس الرسالة السابقة " لا يمكنك تغيير جزء من المصفوفة " ربما حضرتك تستخدم إصدار أحدث علما بأننى أستخدم إصدار 2010 فهل ياترى قد يكون ذلك سببا تم تعديل أكتوبر 20 بواسطه سعيد بيرم
عبدالله بشير عبدالله قام بنشر أكتوبر 20 قام بنشر أكتوبر 20 (معدل) السلام عليكم بعد اذنكما محاولة حسب فهمى لطلبك فى الملف المرفق باول مشاركة عن طربق الكود في حدث الورقة الكود 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 تم تعديل أكتوبر 20 بواسطه عبدالله بشير عبدالله 1
أفضل إجابة محمد هشام. قام بنشر أكتوبر 20 أفضل إجابة قام بنشر أكتوبر 20 (معدل) هدا بسبب عدم توافق نسخة الاوفيس لديك مع المعادلات المستخدمة على العموم لإثراء الموضوع أكثر اليك دالة تنفد المطلوب بادن الله عند التغيير في الخلية 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 تم تعديل أكتوبر 20 بواسطه محمد هشام. 2
أبو سجده قام بنشر أكتوبر 20 الكاتب قام بنشر أكتوبر 20 السلام عليكم ورحمة الله وبركاته أخى محمد وعبدالله تمت الإفادة بفضل الله أولا ثم بفضلكم وافر التحية والتقدير 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.