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

استخراج السنة من التاريخ


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

  • ابوخليل changed the title to استخراج السنة من التاريخ

وعليكم السلام

 

في احد مشاريعي ، جابوا لي قائمة اكسل فيها تواريخ مكتوبة بكل ما لذ وطاب من الطرق ، مثل:

30/11/2009  ،  2012-06-25  ،  21/6/2015م  ،  " 9/1/2014"  ،  30\11\2009  ، 5/1999/26  ،  25/1999/6  ،  5/1994/ 26  ،  وحتى بعضها بالارقام الهندية ،

فعملت الدالة التالية ، والتي ترسل لها التاريخ المطلوب تعديله ، والدالة تصلح التاريخ وترجعه.

 

ومنها تقدر تحصل على السنة 🙂

 

هذه هي الدالة:


Function Date_Rectified(D As String) As Date
On Error Resume Next

    Dim x() As String
    Dim P1 As String, P2 As String, P3 As String
    
    
    D = Trim(D)
    D = Replace(D, "(", "")
    D = Replace(D, ")", "")
    D = Replace(D, "    ", "")
    D = Replace(D, "   ", "")
    D = Replace(D, "  ", "")
    D = Replace(D, " ", "")
    D = Replace(D, "*", "")
    D = Replace(D, "م", "")
    
    D = Replace(D, ChrW(1632), "0") 'الرقم الهندي صفر
    D = Replace(D, ChrW(1633), "1")
    D = Replace(D, ChrW(1634), "2")
    D = Replace(D, ChrW(1635), "3")
    D = Replace(D, ChrW(1636), "4")
    D = Replace(D, ChrW(1637), "5")
    D = Replace(D, ChrW(1638), "6")
    D = Replace(D, ChrW(1639), "7")
    D = Replace(D, ChrW(1640), "8")
    D = Replace(D, ChrW(1641), "9")
    
    D = Replace(D, "!", "-")
    D = Replace(D, "/", "-")
    D = Replace(D, "//", "-")
    D = Replace(D, "\", "-")
    D = Replace(D, ".", "-")
    D = Replace(D, "_", "-")
    D = Replace(D, "|", "-")
    D = Replace(D, ",", "-")
    D = Replace(D, Chr(34), "")
 
    
    If Len(D) = 4 Then
        'starts with year, but its 4 digits only:1999
        'convert to 1-1-1999 OR EMPTY
        
        Date_Rectified = DateSerial(D, 1, 1)
        Exit Function
    End If
    
If D = "5/1994/ 26" Then
Debug.Print D
End If
    
    
    x = Split(D, "-")
    P1 = x(0): P2 = x(1): P3 = x(2)
    
    
    If Len(P1) = 4 And Len(P2) <> 0 Then
        'starts with year, and month exist: 1999-1-2
        
        Date_Rectified = DateSerial(P1, P2, P3)
        
    ElseIf Len(P3) = 4 And Len(P2) <> 0 Then
        'ends with year, and month exist: 2-1-1999
        
        Date_Rectified = DateSerial(P3, P2, P1)
                
                
    ElseIf Len(P2) = 4 And Len(P1) <= 12 Then
        'year in the middle, day and month exist: 5/1999/26
        
        Date_Rectified = DateSerial(P2, P1, P3)
        
    ElseIf Len(P2) = 4 And Len(P1) > 12 Then
        'year in the middle, day and month exist: 25/1999/6

        Date_Rectified = DateSerial(P2, P3, P1)
                
                
    Else
        'otherwise
        Date_Rectified = Null
        
    End If
    
End Function

 

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

1 ساعه مضت, jjafferr said:

ومنها تقدر تحصل على السنة 🙂

هذه هي الدالة:

 

يا سلام عليك  الله يحفظك  .. نحن بحاجة الى مواضيع متخصصة تضاف الى المكتبة يتم فيها تجميع  مثل هذه الروائع بعناوين حسب كل فن

 

 

 

 

 

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

4 دقائق مضت, ابوخليل said:

يا سلام عليك  الله يحفظك  .. نحن بحاجة الى مواضيع متخصصة تضاف الى المكتبة يتم فيها تجميع  مثل هذه الروائع بعناوين حسب كل فن

شكرا جزيلا اخوي ابو خليل

عملت موضوع لهذه الجزئية:

 

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

ومشاركة مع معلمي الأفاضل ، دعني أضيف قطرة من بحر علمهم 😇 .

يمكننا باستخدام دالة Mid والتي تستخدم لاستخراج جزء معين من النص ، وعلى افتراض أن اسم الحقل النصي هو MyDate ، يمكنك استخدام الاستعلام التالي لاستخراج السنة :

 

SELECT MyDate, Mid(MyDate, InStrRev(MyDate, "/") + 1, 4) AS YearNum
FROM YourTable;

* طبعاً مع تغيير اسم الجدول أيضاً في YourTable ؛ و أيضاً لم أقم بمشاهدة ملف الأستاذ محمد لطفي أيضاً 🤗 إن كان قد استخدم اسلوب الاستعلام .

 

واذا أردنا توسيق الفكرة كما أشار المعلم الفاضل الأستاذ جعفر ، قد نجعل الاستعلام بهذا الشكل ايضاً بحيث مع اختلاف اتجاه كتابة التاريخ ( من اليمين لليسار أو العكس ) أو ايضاً بدلاً من الفاصل "/" يمكن ان يكون "-" على سبيل المثال ,

 

SELECT MyDate,
    IIf(InStr(MyDate, "-") > 0,
        Left(MyDate, 4),
        IIf(Len(MyDate) = 10,
            IIf(Left(MyDate, 4) Like "####", 
                Left(MyDate, 4), 
                Right(MyDate, 4)),
            Null)
    ) AS YearNum
FROM YourTable;

 

تم تعديل بواسطه Foksh
إضافة استعلام آخر وتوسيع نطاق الفكرة
رابط هذا التعليق
شارك

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

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



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

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

Important Information