اذهب الي المحتوي
أوفيسنا

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

قام بنشر

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

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

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

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

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

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

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

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

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

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

قام بنشر

شكرا لك أخى الكريم لطيب المشاركة

هل هناك طريقة أخرى غير ذلك نظرا لوجود صفوف فارغة 

مع الأخذ فى الإعتبار عدم تقسيم التاريخ الى ثلاث خلايا

  • Thanks 1
قام بنشر (معدل)

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

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

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

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

قام بنشر

جزاكم الله خيرا أخى محمد 

بمراجعة ما تفضلت به تبين أن هناك بعض الشهور لم تبدأ بيوم الأحد

مثالا على ذلك 1/1/2025 يبدأ بيوم الأربعاء فهل من سبيل أخر 

 

قام بنشر (معدل)

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

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 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information