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

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

قام بنشر

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

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

لكن للأسف الملف لا يعمل معى ربما لإختلاف الإصدارين الذى نعمل عليهما

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

لهذا أطلب مد يد العون مرة أخرى لتحقيق هذا الموضوع ربما بإستخدام كود vba أو ربما بإستخدام  UDF Function

لقد قمت بتحديث الملف الذى يحاكى الملف الأصلى ****** برجاء الإطلاع وجزاكم الله خيراً

أيام الشهر من يوم محدد - vba.xlsm

  • أفضل إجابة
قام بنشر (معدل)

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

الاستاذ محمد هشام  في المشاركة السابقة  اخبرك  (في حالة كنت تستخدم إصدار قديم  لن تشتغل معك الصيغ. أخبرني بذالك لمحاولة إنشاء دالة أو كود vba ينفذ نفس المهمة) 

حسب ملفك الحالى كود في حدث الورقة كلما تم التغيير في M2  يتم التغيير في الاعمدة

الملف

أيام الشهر من يوم محدد - vba (1).xlsm

تم تعديل بواسطه عبدالله بشير عبدالله
  • Thanks 1
قام بنشر (معدل)

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

5 ساعات مضت, سعيد بيرم said:

قمت بتحديث الملف الذى يحاكى الملف الأصلى

تفضل اخي تم تنفيد نفس الافكار السايقة على الملف المجدث 

ScreenRecorderProject24.gif.acfa216f8364095869c58ec288dc086e.gif

 

 

او 

الاستغناء عن وضع الصيغة واستبدالها بكود في حدث ورقة1 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim f As Worksheet: Set f = ThisWorkbook.Sheets("Sheet1")
    On Error GoTo CleanExit
    If Not Intersect(Target, Me.Range("m2")) Is Nothing Then
        Dim rCrit As Variant
        rCrit = xdates(Me.Range("m2").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(i + 5, 11).Value = rCrit(i, 1)
                f.Cells(i + 5, 12).Value = rCrit(i, 2)
            Next i
        End If
    End If

CleanExit:
End Sub

 

 

 

 

أيام الشهر من يوم محدد - vba1.xlsm

تم تعديل بواسطه محمد هشام.
قام بنشر (معدل)

أخى وحبيبى فى الله / محمد هشام

أخى وحبيبى فى الله / عبدالله بشير

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

فى حقيقة الأمر أنا الأن فى حيرة من أمرى لمن أعطى أفضل إجابة

فكلا الحلين أكثر من رائع

أننى أشعر بطعامة المغاربه

وشقاوة الليبين

وجمال المصريين فى هذا الموضوع

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

وسؤالى الأخير ونحن بصدد هذا الموضوع

ماذا لو أردنا عمل قائمة لإدراج أيام الشهر كاملا ودون إستثناءات للأيام 

إن كان الأمر كذلك فهنا وبذات الموضوع فضلا وليس أمرا

وإن لم يكن فسيتم طرح موضوع جديد

أما عن إختيار أفضل إجابة فهى 

لسعيد بيرم ههههههههههه 

بارك الله فيكم وجزاكم الله خير الجزاء 

تم تعديل بواسطه سعيد بيرم
قام بنشر
13 دقائق مضت, سعيد بيرم said:

ماذا لو أردنا عمل قائمة لإدراج أيام الشهر كاملا ودون إستثناءات للأيام

اخي المسالة سهلة لا كن نظرا لشكل اشتغالك على الملف المفروض توضح لنا اكثر

1) هل تريد اظافة القائمة الى نفس قائمة اختيار الشهر M2 

2) طريقة الانشاء هل تحديد مثلا اسم الشهر والسنة في خلية معينة او مادا هناك عدة احتمالات واردة المرجوا شرح طلبك بالتفصيل 

قام بنشر

أخى محمد / ببساطة  شديدة على نفس الملف وبذات القائمة فى ال M2

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

مثال على ذلك بداية أكتوبر الثلاثاء الموافق 2024/10/1 وينتهى فى الخميس الموافق 2024/10/31 وهكذا

شكرا لإهتمامك وجزاكم الله جميعا أنت وأخى عبدالله بشير خير الجزاء

قام بنشر
7 دقائق مضت, سعيد بيرم said:

مثال على ذلك بداية أكتوبر الثلاثاء الموافق 2024/10/1 وينتهى فى الخميس الموافق 2024/10/31

لاكن اخي انت بحاجة لتغيير اسم الشهر بطريقة دينامكية على ما اعتقد  على الخلية M2 لهدا ربما ستحتاج الى اظافة 2 خلايا اخرى واحدة مثلا لاختيار السنة والاخرى لاختيار الشهر وبمجرد تحديدك للشهر والسنة المطلوبة يتم ادراج قائمة بجميع ايام الشهر المختار الى الخلية M2 ادا كان هدا يناسبك يمكننا فعل دالك بالاكواد 

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

 

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

السلام عليكم

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

 

ربما التعديل التالى لاختيار التاريخ يناسبك بمكن تعديل السنوات من الكود 

أيام الشهر من يوم محدد - vba (1).xlsm

 

 

 

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

نشكرك اخي @عبدالله بشير عبدالله على الملاحظة 

فعلا لم انتبه الكود يقوم  بحساب أول يوم أحد بعد تاريخ البداية لذا إذا كان تاريخ البداية مثلا 1 ديسمبر وهو يوم الأحد بالفعل  الكود سيقوم بحساب الأحد الذي يليه أي 8 ديسمبر

تم تعديل الكود مع إظافة طلب أخونا @سعيد بيرم الأخير وهو  قائمة فى ال M2  ولاكن على كامل الشهر دون إستثناء يومى الجمعة والسبت

تعديل الدالة 

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

والكود التالي لانشاء قائمة لايام الشهور المختارة واظافتها تلقائيا لخلية اختيار الشهر M2  مما يمكنه من تحديد بداية التاريخ المرغوب عرض بياناته 

ScreenRecorderProject25.gif.a0da023755bd144097546fcf1bc91896.gif

 

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet: Set WS = ThisWorkbook.Sheets("Sheet1")
    Dim rCrit As Variant, startRow As Long, startCol As Long
    Dim MonthValue As Integer, YearValue As Integer
    Dim StartDate As Date, EndDate As Date, n As Date, r As Long

    On Error GoTo CleanExit

    startRow = 5   ' رقم الصف
    startCol = 11  ' العمود (K)

    If Not Intersect(Target, WS.Range("M2")) Is Nothing Then
        rCrit = xdates(WS.Range("M2").Value)
        WS.Range("K6:L30").ClearContents

        If Not IsEmpty(rCrit) Then
            Dim i As Long
            For i = LBound(rCrit) To UBound(rCrit)
                WS.Cells(startRow + i, startCol).Value = rCrit(i, 1)
                WS.Cells(startRow + i, startCol + 1).Value = rCrit(i, 2)
            Next i
        End If
    End If

    If Not Intersect(Target, WS.Range("N1,O1")) Is Nothing Then
        MonthValue = WS.Range("N1").Value
        YearValue = WS.Range("O1").Value
        
        If MonthValue < 1 Or MonthValue > 12 Or YearValue < 1900 Or YearValue > 2100 Then
            MsgBox "يرجى إدخال قيم صحيحة للشهر والسنة"
            Exit Sub
        End If

        StartDate = DateSerial(YearValue, MonthValue, 1)
        EndDate = DateSerial(YearValue, MonthValue + 1, 0)

        r = 5
        n = StartDate

        WS.Range("Q5:Q50").ClearContents
        Do While n <= EndDate
            WS.Cells(r, 17).Value = n
            n = n + 1
            r = r + 1
        Loop
        Dim Rng As Range
        Set Rng = WS.Range(WS.Range("Q5"), WS.Range("Q" & r - 1))
        With WS.Range("M2").Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:="=" & Rng.Address
            .IgnoreBlank = True: .InCellDropdown = True: .ShowInput = True: .ShowError = True
             
        End With
        WS.Range("M2").Value = StartDate
    End If

CleanExit:
End Sub

معادلة اظافية لتوليد ايام الشهور بشرط شهر الخلية N2 والسنة في الخلية O2 

=IF(ROW(A1) <= DAY(EOMONTH(DATE($O$1, $N$1, 1), 0)), DATE($O$1, $N$1, ROW(A1)), "")

مع سحبها للاسفل 

 

بالتوفيق..............

 

 

V3 أيام الشهر من يوم محدد - vba.xlsm

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

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

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

يتم إنشاء قائمة بكامل الشهر من بدايته حتى نهايته بأيام الجمع والسبت " ترتيب الأيام الطبيعى "

على سبيل المثال يناير 2024 بدايته 2024/1/1 الموافق يوم الإثنين وينتهى فى 2024/12/31 الموافق يوم الأربعاء

ثم يليه شهر فبراير بدايته 2024/2/1 الموافق يوم الخميس وينتهى فى 2024/2/29 الموافق يوم الخميس

وهكذا لباقى الشهور على أن يشمل كامل الأيام ( بأيام الجمعة والسبت ) برجاء الإطلاع وجزاكم الله خيرا

ادراج أيام الشهر كاملا.xlsm

تم تعديل بواسطه سعيد بيرم
قام بنشر (معدل)

 ادا كنت تقصد نفس الملف فهدا ما تم تنفيده مسبقا اختيار اسم الشهر من N1  والسنة من O1 يتم انشاء القائمة على M2

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

تم تعديل بواسطه محمد هشام.
قام بنشر (معدل)

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

لتحديد يوم الأحد كبداية لكل شهر

وتم الحل بفضل الله تعالى وبفضلكم أنت وأخى عبدالله

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

يظل يوم الأحد هو البداية مع تغيير أى شهر 

ما أريده ببساطة هو

عدم تحديد يوم الأحد كبداية

بقدر ما أريد أن يتم إدراج أيام الشهر بالترتيب العادى لأيام الشهر كاملا

من بدايته حتى نهايته بما فيهم أيام الجمعة والسيت

  كما فى التقويم الميلادى " للتوضيح فقط "

 أقدر وقتكم الثمين وجزاكم الله خيرا

 

تم تعديل بواسطه سعيد بيرم
قام بنشر (معدل)

 

منذ ساعه, سعيد بيرم said:

تم الحل بفضل الله تعالى وبفضلكم أنت وأخى عبدالله

 ما  فهمت لحد الساعة ان الموضوع الأول تم حله إذن أنت الآن لست بحاجة لأي  تعديل على الأكواد السابقة

ربما طلبك هو  كود جديد يقوم بإنشاء تسلسل لأيام الشهر من بدايتة لنهايتة  و بالترتيب الطبيعي صح  وأنت من تحدد إسم الشهر والسنة بطريقة ما !!!

إذا كان هدا ما تقصده افتح موضوع جديد ونحن في أتم الإستعداد لتنفبد طلبك  

 

 

تم تعديل بواسطه محمد هشام.
قام بنشر

صباح الخيرات ***** نعم هذا ما أعنيه تماما

وسيتم طرح موضوع بحول الله تعالى بشأن هذا

ولكن بعد عودتى من العمل إن قدر الله تعالى ذلك

وافر التحية والتقدير

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