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

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


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

تفضل 

 

today: Int((Date()-[تاريخ الميلاد])/365) & " سنة  - " & Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12) & " شهر  - " & Int((((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12-Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12))*30) & " يوم 

 

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

وهذه دالة أخرى :

Function fAgeYMD(StartDate As Date, EndDate As Date) As String
'Purpose:   Returns the difference between StartDate and EndDate in full years, months and days
'Coded by:  raskew
'To call:
' ? fAgeYMD(#7/6/54#, #10/3/84#)
'Returns:
' 30 years 2 months 28 days

Dim inthold As Integer
Dim dayHold As Integer

   inthold = Int(DateDiff("m", StartDate, EndDate)) + _
             (EndDate < DateSerial(year(EndDate), month(EndDate), Day(StartDate)))
             
   If Day(EndDate) < Day(StartDate) Then
      dayHold = DateDiff("d", StartDate, DateSerial(year(StartDate), month(StartDate) + 1, 0)) & Day(EndDate)
   Else
      dayHold = Day(EndDate) - Day(StartDate)
   End If
   
   fAgeYMD = Int(inthold / 12) & " year" & IIf(Int(inthold / 12) <> 1, "s ", " ") _
             & inthold Mod 12 & " month" & IIf(inthold Mod 12 <> 1, "s ", " ") _
             & LTrim(str(dayHold)) & " day" & IIf(dayHold <> 1, "s", "")

End Function

طريقة الاستدعاء :

fAgeYMD(StartDate, EndDate)

 

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

42 دقائق مضت, محمد احمد لطفى said:
today: Int((Date()-[تاريخ الميلاد])/365) & " سنة  - " & Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12) & " شهر  - " & Int((((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12-Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12))*30) & " يوم

هذه الدالة لاتحسب العمر بشكل مضبوط استاذ محمد

جرب المرفق وادخل تاريخ الميلاد وسترى الفرق

حساب العمر.rar

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


شكراً للتوضيح أستاذ @Eng.Qassim
الاتنين غلط مزودين فى تاريخ ميلادى أيام زيادة 

 

today: Int((Date()-[تاريخ الميلاد])/365) & " سنة  - " & Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12) & " شهر  - " & Int((((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12-Int(((Date()-[تاريخ الميلاد])/365-Int((Date()-[تاريخ الميلاد])/365))*12))*30) & " يوم

دى مزودة 17 يوم 

وملف حساب العمر مزود 8 يوم جارى تجربة كود أستاذى @Moosak

تم تعديل بواسطه محمد احمد لطفى
  • Like 1
رابط هذا التعليق
شارك

13 دقائق مضت, محمد احمد لطفى said:

الملف فيه حسبتين الى فوق غلط و الى تحت مظبوطة بالملى

هو انا بحكي ايه من الصبح

انا وضعت كودك لفوق ...وكود الفرنجة لتحت حتى تقارن بينهم

بالمناسبة استاذ محمد ..انا اعتمد عليه كثيرا في حساب مدد المشاريع (التي ليس فيها عطل او جمع )

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

11 ساعات مضت, Moosak said:

وهذه دالة أخرى :

Function fAgeYMD(StartDate As Date, EndDate As Date) As String
'Purpose:   Returns the difference between StartDate and EndDate in full years, months and days
'Coded by:  raskew
'To call:
' ? fAgeYMD(#7/6/54#, #10/3/84#)
'Returns:
' 30 years 2 months 28 days

Dim inthold As Integer
Dim dayHold As Integer

   inthold = Int(DateDiff("m", StartDate, EndDate)) + _
             (EndDate < DateSerial(year(EndDate), month(EndDate), Day(StartDate)))
             
   If Day(EndDate) < Day(StartDate) Then
      dayHold = DateDiff("d", StartDate, DateSerial(year(StartDate), month(StartDate) + 1, 0)) & Day(EndDate)
   Else
      dayHold = Day(EndDate) - Day(StartDate)
   End If
   
   fAgeYMD = Int(inthold / 12) & " year" & IIf(Int(inthold / 12) <> 1, "s ", " ") _
             & inthold Mod 12 & " month" & IIf(inthold Mod 12 <> 1, "s ", " ") _
             & LTrim(str(dayHold)) & " day" & IIf(dayHold <> 1, "s", "")

End Function

طريقة الاستدعاء :

fAgeYMD(StartDate, EndDate)

 

وهنا الدالة الأخيرة ( علشان ما أغار )  😂

image.png.64a309835ba9fca510eedc53a6202857.png

 

حساب العمر.rar

 

تم تعديل بواسطه Moosak
  • Like 5
رابط هذا التعليق
شارك

مشاركة معكم

دالة لحساب السنوات ويمكن تعديلها لتحقيق المطلوب

 Function Age(varBirthDate As Variant) As Integer
 Dim varAge As Variant
 If IsNull(varBirthDate) Then Age = 0: Exit Function
 varAge = DateDiff("yyyy", varBirthDate, Now)
 If Date < DateSerial(Year(Now), Month(varBirthDate), _
 Day(varBirthDate)) Then
 varAge = varAge - 1
 End If
 Age = CInt(varAge)
 End Function

هذه الدالة ☝️ من موقع مايكروسوفت

الموقع غني بالامثلة ولكن امثلة عامة يمكن التعديل عليها وتكييفها وفقا لحاجتنا

تحياتي

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

21 ساعات مضت, Eng.Qassim said:

هؤلاء الفرنجة لايخطأون ياطويل العمر😄

ههههههههههههههههه اضحك الله سنك مهندسنا العزيز

بارك الله فيكم اخوانى واساتذتى وجزاكم الله خيرا

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

شكرا لكل من شارك بالاجابة

ولكن اذا كان تاريخ الميلاد 14/6/2000  وتاريخ اليوم 13/6/2022

طبقا للمثال السابق (حساب العمر )  يكون العمر:

22 سنة + 0 شهر  + 3 يوم

والمفروض يكون 22 سنة + 0 شهر + 0 يوم

هل كلامي صحيح ؟

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

34 دقائق مضت, بسملة جمال said:

طبقا للمثال السابق (حساب العمر )  يكون العمر:

22 سنة + 0 شهر  + 3 يوم

يا ستي الكريمة ..الظاهر انك لم تقرأي التعليقات السابقة

الخانة الاولى في النموذج فعلا تظهر الناتج = 22سنة +0شهر+3 يوم لان الكود يحسب الشهر 30 فقط

اما الخانة الثانية فتظهر العمر بشكل مضبوط ...اذا جربتي الكود يوم غد سيظهر لك العمر = 22سنة +0 شهر +0 يوم

اما الخانة الثالثة والتي تعود لاستاذ موسى فلم اجربها بصراحة

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

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