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

قائمة بأيام الشهر فى يوم محدد


إذهب إلى أفضل إجابة Solved by محمد هشام.,

الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

طبتم جميعا بكل خير أينما كنتم

أرغب فى مساعدتكم فى هذا الموضوع فربما أجد حلاً على أيديكم الكريمة

كيف يمكن عمل قائمة بأيام الشهر تبدأ من يوم الأحد وحتى يوم الخميس من كل أسبوع

بإستثناء يومى الجمعة والسبت على إعتبار أنهما عطلة من كل أسبوع

بمعنى أخر عند تغيير شهر الإدخال بالخلية C2 إلى شهر جديد وليكن نوفمبر 2024

أريد أن يبدأ هذا الشهر من يوم الأحد الى الخميس حتى نهايته

وهكذا مع باقى شهور العام ***** فهل يمكن تحقيق ذلك

أرجو أن يكون ذلك منطقيا ***** برجاء الإطلاع على المرفق وجزاكم الله خيرا

أيام الشهر من يوم محدد.xlsx

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته

ممكن تتسخدم المعادله ادناه

لعله يكون المطلوب

=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))))

image.png.9409a00b340a6cfe5e500b29f520dc12.png

أيام الشهر من يوم محدد.xlsx

رابط هذا التعليق
شارك

وعليكم السلام ورحمة الله تعالى وبركاته 

بعد ادن الاستاد @أبومروان 

لتجنب الفراغات  يمكنك تجربة هدا 

6.JPG.f9e6ab15be818bfa9fa4f517dee7e627.JPG

الخلية 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

تم تعديل بواسطه محمد هشام.
  • Like 1
رابط هذا التعليق
شارك

أخى واستاذى الفاضل / محمد هشام

السلام عليكم ورحمة الله وبركاته

عند تغير اى شهر أتلقى رسالة مفادها " لا يمكنك تغيير جزء من المصفوفة "

فهل من سبيل أخر بواسطة ال VBA **** ببساطة أريد أن يبدأ كل شهر من يوم الأجد

مع تجاهل يومى الجمعة والسبت على إعتبار أنهما أجازة " عطله رسمية "

ويمكنك تحديد تاريخ بداية ونهاية كقائمة  وليكن من 1/9/2024 حتى 30/6/2025 فربما لديك حل أخر

وافر التحية والتقدير وجزاكم الله خيرا

 

تم تعديل بواسطه سعيد بيرم
رابط هذا التعليق
شارك

40 دقائق مضت, سعيد بيرم said:

عند تغير اى شهر أتلقى رسالة مفادها " لا يمكنك تغيير جزء من المصفوفة "

المعادلات تشتغل معي بشكل جيد وتنفد المطلوب على العموم ادا كنت تقصد انك ترغب بظهور أسماء الأيام باللغة العربية جرب حل اخر كما هو موضح أسفله 

ScreenRecorderProject19.gif.1cde341715079355b3a2c70176c059a5.gif

 

أسماء الأيام بالعربية

=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

رابط هذا التعليق
شارك

نعم اخي @سعيد بيرم  سنقوم بتعديل المعادلات لإستخراج الأيام والتواريخ بداية من يوم الأحد من كل شهر مع تجاهل يوم الجمعة والسبت 

ScreenRecorderProject21.gif.df0a4328233aaa331c4a57329d7da9b6.gif

 

 الخلية (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

تم تعديل بواسطه محمد هشام.
  • Like 1
رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته

أخى محمد هشام فى حقيقة الأمر لا أدرى ماذا يحدث نفس الرسالة السابقة " لا يمكنك تغيير جزء من المصفوفة "

ربما حضرتك تستخدم إصدار أحدث علما بأننى أستخدم إصدار 2010 فهل ياترى قد يكون ذلك سببا

 

Untitled.jpg

تم تعديل بواسطه سعيد بيرم
رابط هذا التعليق
شارك

السلام عليكم 

بعد اذنكما محاولة حسب فهمى لطلبك فى الملف المرفق باول مشاركة عن طربق الكود في حدث الورقة 

الكود

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

تم تعديل بواسطه عبدالله بشير عبدالله
  • Like 1
رابط هذا التعليق
شارك

  • أفضل إجابة

هدا بسبب عدم توافق نسخة الاوفيس لديك مع المعادلات المستخدمة على العموم 

لإثراء الموضوع أكثر اليك دالة  تنفد المطلوب بادن الله عند التغيير في الخلية 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

تم تعديل بواسطه محمد هشام.
  • Like 1
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information