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

ترتيب البيانات حسب التاريخ الهجري وحسب الرقم الوظيفي


إذهب إلى أفضل إجابة Solved by احمد عبد الناصر,

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

السلام عليكم

حاولت بالطريقة التقليدية في فرز الاسماء حسب الاقدم بالتاريخ ولكن لم تجدي نفعا. 

 

سؤالي ارغب في فرز الاسماء في الجدول حسب شرطين وهما :                

  - الاقدم في التاريخ.                                             

  - الاصغر بالرقم الوضيفي.                                             

 

بمعنى الموظف الاقدم في تاريخ التقديم ورقمه الوظيفي صغير يكون الاول وهكذا.     

 

                       

  افضل ان يكون الحل بالاكواد . شاكرين حسن تعاونكم

تصفية حسب الاقدم بالتاريخ.rar

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

أخي الكريم سعد

اطلع على الملف التالي قمت بالترتيب كما ذكرت بدون أكواد ..هل النتائج بهذا الشكل صحيحة أم لا؟

لو لم تكن صحيحة ارفق بعض النتائج للإطلاع عليها

تصفية حسب الاقدم بالتاريخ.rar

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

أخي ياسر للاسف لم تكن صحيحة ولم اجد المعادلة التي وضعتها.

 

المطلوب هو فرز الجدول حسب شرطين

المعيار الاول حسب التاريخ الاقدم والمعيار الثاني حسب الاصغر في الرقم الوظيفي.

 

يوجد بعض النتائج في ورقة العمل الثانية في الملف المرفق 

 

 

شاكرين جهودك اخي ياسر

تصفية حسب الاقدم بالتاريخ.rar

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

أخي الكريم سعد سعد يحيا سعد

استغرق الموضوع مني أكثر من ساعتين والله  :yes:  .. لأن الموضوع جديد بالنسبة لي .. ألا وهو ترتيب البيانات حسب التاريخ الهجري

وجدت أن التواريخ الهجرية لا يتم ترتيبها كما في التواريخ الميلادية ، فخطرت لي فكرة :eek2: التحويل من الهجري إلى الميلادي ، فبحثت في مكتبتي :frown3:  فوجدت دالة تحول التاريخ الهجري إلى تاريخ ميلادي :dance1:

ثم بدأت في كتابة الكود ، وفوجئت أن الترتيب لا يعمل بالشكل الصحيح :eek2: ، فاكتشفت أن التواريخ المحولة عبارة عن نصوص وليست تواريخ ، فقمت بتجزئة النص إلى أجزاء : يوم وشهر وسنة ، ثم لم شمل هذه الأجزاء واستخدام دالة CDate لتحويل النص إلى تاريخ .. ونجحت العملية بفضل الله .. :power: :power:

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

الكود بهذا الشكل

Sub SortByHijriDates()
    Dim LR As Long, I As Long, strDate As String
    LR = Range("A" & Rows.Count).End(xlUp).Row
    
    Application.ScreenUpdating = False
        Range("H1").Value = "Helper"
        For I = 1 To LR
            If IsDate(Cells(I, "E")) Then
                strDate = Mid(ConvertDateString(Cells(I, "E")), 1, 2) & "/" & Mid(ConvertDateString(Cells(I, "E")), 4, 2) & "/" & Mid(ConvertDateString(Cells(I, "E")), 7, 4)
                Cells(I, "H") = CDate(strDate)
            End If
        Next I
        Range("A1:H" & LR).Sort Key1:=Range("H1:H" & LR), Order1:=xlAscending, Key2:=Range("C1:C" & LR), Order2:=xlAscending, Header:=xlYes
        Columns("H:H").ClearContents
    Application.ScreenUpdating = True
End Sub

Function ConvertDateString(ByRef StringIn As String) As String
    Dim SavedCal As Integer
    Dim myDate As Date
    Dim str As String
    
    SavedCal = Calendar
    Calendar = 1
    myDate = CDate(StringIn)
    Calendar = 0
    str = CStr(myDate)
    ConvertDateString = Format(str, "dd.mm.yyyy")
    Calendar = SavedCal
End Function


لا تنسى أن تحدد الإجابة كأفضل إجابة عن طريق الضغط على كلمة "تحديد كأفضل إجابة" ؛ ليظهر الموضوع مجاب ومنتهي ، كما لا تنسى أن تضغط على كلمة "أعجبني هذا"

الموضوع استغرق مني أكثر من ساعتين ولن يستغرق الأمر منك أكثر من ثانيتين :wink2:

تقبل تحياتي :fff: :fff: 

Sort By Hijri Dates.rar

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

ماشاء الله اخي ياسر احسنت صنعا .

 

هناك بعض الملاحظات :

الملاحظة الاولى : وهي عند الفرز يتم فرز السنة فقط ولا ينم الفرز حسب الشهر واليوم .

الملاحظة الثانيه :  وهي عند تشابة التواريخ لعدد من الموظفين فهنا يتم تطبيق المعيار الثاني الذي طلبتة في سؤالي الاول وهو فرز الرقم الوظيفي حسب الاصغر. فالكود لا يقوم بذللك 

 

شاكرين حسن تعاونكم .

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

  • أفضل إجابة

السلام عليكم

 

اسعد الله اوقاتكم

 

اعتقد الاكسيل متعرف عليه كتاريخ هجري و لكن عند الفرز يعامله معاملة النص , ليس لي تعامل مع التواريخ الهجرية في الاكسيل صراحة .

 

جرب المرفق 

 

-تاريخ معدل1 لان بعض التواريخ فيها مسافة كهذه " 11/10/1432"  .

-تاريخ معدل2 ليغير اتجاه التاريخ (او النص حسب رؤية اكسيل) , و هذا الذي سوف ترتب علي حسبه وهو العمود   i .

-هذه الطريقة تنفع ما دامت التواريخ بنفس عدد الخانات كما بملفك المرفق  مثلا "11/09/1431"  و ليس  "11/9/1431"

 

تحياتي

تصفية حسب الاقدم بالتاريخ+.rar

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

ماشاء الله اخي ياسر احسنت صنعا .

 

هناك بعض الملاحظات :

الملاحظة الاولى : وهي عند الفرز يتم فرز السنة فقط ولا ينم الفرز حسب الشهر واليوم .

الملاحظة الثانيه :  وهي عند تشابة التواريخ لعدد من الموظفين فهنا يتم تطبيق المعيار الثاني الذي طلبتة في سؤالي الاول وهو فرز الرقم الوظيفي حسب الاصغر. فالكود لا يقوم بذللك 

 

شاكرين حسن تعاونكم .

أخي الحبيب

قمت بمراجعة الملف مرة أخرى ووجدت أن النتائج صحيحة ؟؟

لو تكرم أحد الأخوة بمراجعة النتائج وموافاتي بالنتيجة ؟؟؟

هل أدى الملف الغرض أم لم يؤدي ؟

تقبلوا تحياتي

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

السلام عليكم أخي أبو البراء الغالي:

رحم الله امرأ أهدى إلي عيوبي ....يقول المثل العربي: لكل حصان كبوة

لايهمك فإن الخير الذي قدمته سابق وفضلك كبير ....أما ففي هذا البحث أقول لك:

لم أجد سوى خطأ  في الفرز عند الاسم محمد 43  ... لا عليك

وفقك الله لما يحب ويرضى والسلام عليكم

 

Sort By Hijri Dates.rar

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

أخي الحبيب أبو يوسف

أشكرك على الاهتمام بالأمر .. وقدر الله وما شاء فعل ..

دققت كثيراً إلا أنني لم أصل للخطأ في أول الأمر .. وحاولت أن أعرف مكمن الخطأ إلا أنني لم أوفق ولم أعرف ما السبب في هذا الخطأ الشاذ؟

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

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

السلام عليكم

 

استاذ ياسر 

 

معذرة فلم اجرب الحل في ملفك مسبقا , و كما هو متوقع يعمل بكفاءة .

 

كما تفضل استاذنا محمد حسن فالتاريخ 30/2/1431 لم يأخذ وضعه الصحيح في الترتيب 

 

و السبب و الله اعلم انه لم يعبر من خلال هذا الشرط

If IsDate(Cells(I, "E")) Then

(دالة IsDate لم تتعرف عليه كتاريخ)

 

صراحة موضوع التواريخ الهجرية مبهم نوعا ما في الاكسيل

 

تحياتي

  • 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