أخي الكريم سعد سعد يحيا سعد
استغرق الموضوع مني أكثر من ساعتين والله .. لأن الموضوع جديد بالنسبة لي .. ألا وهو ترتيب البيانات حسب التاريخ الهجري
وجدت أن التواريخ الهجرية لا يتم ترتيبها كما في التواريخ الميلادية ، فخطرت لي فكرة التحويل من الهجري إلى الميلادي ، فبحثت في مكتبتي فوجدت دالة تحول التاريخ الهجري إلى تاريخ ميلادي
ثم بدأت في كتابة الكود ، وفوجئت أن الترتيب لا يعمل بالشكل الصحيح ، فاكتشفت أن التواريخ المحولة عبارة عن نصوص وليست تواريخ ، فقمت بتجزئة النص إلى أجزاء : يوم وشهر وسنة ، ثم لم شمل هذه الأجزاء واستخدام دالة CDate لتحويل النص إلى تاريخ .. ونجحت العملية بفضل الله .. :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
لا تنسى أن تحدد الإجابة كأفضل إجابة عن طريق الضغط على كلمة "تحديد كأفضل إجابة" ؛ ليظهر الموضوع مجاب ومنتهي ، كما لا تنسى أن تضغط على كلمة "أعجبني هذا"
الموضوع استغرق مني أكثر من ساعتين ولن يستغرق الأمر منك أكثر من ثانيتين
تقبل تحياتي
Sort By Hijri Dates.rar