کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

اضافه کردن به تاریخ میلادی در اکسس

روش : 

1-جداکردن  ماه ، روز و سال و ذخیره در  Alias ها ی M,D,Y که برای تاریخ میلادی بسیار آسان است 

(Y=Year(Dt

(M=Month(Dt

(D=Day(Dt

و اگر تاریخ ورودی اعتبار نداشته باشد فرضا ماهی که ۲۹ روزه است را سی روزه وارد کنید یا ماه را بیشتراز ۱۲ تایپ کنید یا  فرمت اشتباه باشد خودش ارور را اعلام میکند احتمالا بعنوان Type Mismatch ... از توابع بالا برای ماه شمسی نمی توانید استفاده کنید چونکه روزهای ماه شمسی با میلادی فرق میکند.

۲-لوپ زدن از یک تا تعداد روزی که باید به تاریخ اضافه شود یعنی n  منهای یک 

۳-D=D+1

4-اگر D بزرگتر از تعداد روزهای میلادی شد D برابر یک خواهد شد  ( (البته باید طبق سال کبیسه باشد )  و  M=M+1 

5-اگر Y بزرگتر از ۱۲ شد Y=Y+1 و  M=1  

البته این کانتراست و بسیاردقیق ، اگر فواصل تاریخی زیاد باشد این روش مناسب نیست چون حدود ۳ ثانیه طول میکشد تا جواب را برگرداند .


اضافه کردن  474003  روز به ۲۲ مارس ۶۲۲ که برابر روز جمعه اول فروردین سال یک است .

بدست آوردن شمسی : (البته با DateDiff میتوان اختلاف بین ۲۲ مارس ۶۲۲ تا ۳۱ دسامبر ۱۹۱۹ را بدست آورد که همین عدد است)

۱-تعداد روزهای سپری شده از اول ماه شمسی که اینجا یک فروردین سال یک است معادل ۲۲ مارس ۶۲۲ موردنظر که اینجا ۱ است 

۲-تعداد کبیسه های میلادی که ۳۱۴ است 

474,003(1,298×365)314+
1

 در معادله ی بالا عدد منفی شده که با ۳۶۵ اگر جمع کنیم عدد ۲۸۵ حاصل میگردد که هدف ماست بعد از کم کردن تعداد ماه های شمسی از عدد تا زمانیکه منفی نشده روز بدست می آید که همان ۹ است و تعداد ماه های کم شده باضافه ی یک هم ماه مذبور 

میشود یعنی ۱۰ ... پس تاریخ ۹ دیماه ۱۲۹۸ خواهد شد


 : بدست آوردن میلادی

اگر عدد کوچکتر مساوی صفر شد با ۳۶۵ جمع میزنیم

474,003(1,298×365)314

+81+365=365

اضافه کردن ۴۳۰۸ روز به ۳/۲۱/۲۰۰۶ یا معادل شمسی ۸۵/۱/۱

تعداد کبیسه ی ۲۰۰۶ تا ۲۰۱۷ سه است و برای شمسی تعدا د روز را یک فروردین میگیریم در ۸۵/۱/۱

4,308(11×365)3+1=291

میلادی ۲۰۰۶

تعدادکبیسه ی ۲۰۰۶ تا ۲۰۱۷ سه است و روزهای سپری شده ی سال ۲۰۰۶ هم عدد ۸۰ است 

4,308(11×365)3+80=370

که یکی به سال اضافه میشود و ماه یک میشود ، روز میلادی هم ۵ خواهدشد



تبدیل میلادی به شمسی


عدد ثابت : ۲۲۶۸۹۶ 


مثال   اول  : 12/31/1919  معادل  1298/10/9


(1,918×365+334+31+464

226,896314+1)÷365=1297


(1,918×365+334+31+464
226,896314+1)(1,297
×365)=285


     285-6×31-3×30=9


تبدیل  1/1/1920 معادل    1298/10/10 

        


 

(1,919×365+1+464
226,896314+1)÷365=1297


(1,919×365+1+464
226,896314+1)(1,297
×365)=286


286-6×31-3×30=10


مثال سوم  ۱۰/۲۲/۱۹۲۱


(1,920×365+273+22+465
226,896-314+1)÷365=1300


(1,920×365+273+22+465
226,896314+1)(1,299
×365)=216


216-6×31=30 


سال ۱۲۹۹ باضافه ی یک ماه ۷ و روز ۳۰ 


تبدیل 9/11/1978  معادل 1357/6/20

1,977×365+243+11+479
226,896329+1)(1,356
×365)5×31=19 

در مثال بالا اختلاف یکروز مشاهده میشود .


✔ تبدیل  4/22/1922  معادل 1301/2/1 شمسی  : 


1,921×365+90+22+465
226,896315+1)÷365=1300


1,921×365+90+22+465

226,896315+1)(1,299
×365)=397


397-365=32


در این مورد یک عدد به سال ۱۳۰۰  اضافه شده 


تبدیل شمسی به میلادی

فرمول :  در نظر داشتن عدد ثابت ۲۲۶۸۹۶ 

۱-بدست آوردن  تعداد روزهای سپری شده از ۱/۱/۱ تا  تاریخ شمسی موردنظر   فرضا به نام  ShamsiDiff  : 

سال شمسی منهای یک در ۳۶۵ باضافه ی  تعداد روزهای سپری شده از اول هر تاریخ  باضافه ی تعداد سال های کبیسه از سال یک تا آن تاریخ شمسی ... سپس دو عدد حاصله را از هم کم کرده و منهای یک می کنیم 

۲- اضافه کردن اختلاف دو تاریخ شمسی  به عدد ثابت منهای عدد ۱۵۰ (تعداد سال های کبیسه تا سال ۶۲۲ میلادی ) 

۳-تقسیم عدد شماره ی ۳ بر ۳۶۵   فرضا    Y=Ret\365

۴-کم کردن  عدد ( سال شمسی منهای یک در ۳۶۵  منهای تعداد کبیسه ی میلادی بدست آمده از شماره ی ۳  منهای ۱۵۰) از  عدد شماره ی ۲ 

۵-عدد بدست آمده را از تعداد روزهای میلادی آنقدر کم می کنیم تا ان عدد کوچکتر مساوی جمع روزهای میلادی گردد .

۶-اگر ما بزرگتر از ۱۲ شد ماه یک میشود و سال میلادی یکی به آن اضافه می گردد

مثال ها : 

("GetMiladi1("1379/1/1

معادل     ۲۰۰۰/۳/۲۰

("GetMiladi1("۱۳۷۸/۱۰/۱۰

معادل     ۱۹۹۹/۱۲/۳۱

("GetMiladi1("۱۳۷۸/۱۰/۱۱

معادل    ۲۰۰۰/۱/۱

("GetMiladi1("۱۳۷۸/۶/۲۰

معادل      ۱۹۷۸/۹/۱۱

("GetMiladi1("۱۲۹۸/۱۰/۹

معادل     ۱۹۱۹/۱۲/۳۱


فرضا تبدیل ۱۲۹۸/۱۰/۹  :  نهم دیماه ۱۲۹۸

اختلاف ۱/۱/۱ تا ۱۲۹۸/۱۰/۹ میشود ۴۷۴۰۰۳ که می توانید صحت آنرا با DateDiff تابع خود اکسس امتحان کنید 

("DateDiff("n","۳/۲۲/۶۲۲","۱۲/۳۱/۱۹۱۹

قابل توجه : ۳/۲۲/۶۲۲ معادل جمعه اول فروردین یک است 

فرمول : 

                                                معادله ی اول 

۳۶۵=(۴۶۴+۱۵۰)-(۳۶۵×۱۹۱۸)-(۴۷۴۰۰۳+۲۲۶۸۹۶-۱۵۰)


۱-عدد ۴۷۴۰۰۳  تعداد روزهای سپری شده از۱/۱/۱ تا تاریخ ۱۲۹۸/۱۰/۹ است یا اختلاف دو تاریخ ۱/۱/۱ و تاریخ شمسی که میخواهیم به میلادی تبدیل کنیم.

۲-عدد ۲۲۶۸۹۶ تعداد روزهای سپری شده تا ۳/۲۲/۶۲۲ است و ثابت 

۴-عدد ۱۵۰ تعداد کبیسه های تا سال ۶۲۲ است و ثابت 

۵-عدد ۱۹۱۸ از تقسیم معادله ی اول بر ۳۶۵ حاصل شده که عدد صحیح آن باید گرفته شود و منهای یک شود .

۶-عدد ۴۶۴ تعداد کبیسه های تا سال ۱۹۱۷ است و متغیر

۷-عدد ۴۶۴-۱۵۰ همان تعداد کبیسه های  تا سال  ۱۲۹۷ است 

✔عدد حاصله  از معادله ی بالا ۳۶۵ است

✔ سال بدست آمده از تقسیم معادله ی اول بر ۳۶۵ هم ۱۹۱۹ خواهد بود.

باید  عدد ۳۶۵ را در لوپ ماه اول تا ماه آخر میلادی قراردهیم تا جائی که عددهای کسرشده کوچکتر مساوی عدد ماه لوپی شود در اینجا وقتی لوپ زده میشود و عدد روزهای ماه میلادی به ترتیب از یک تا ۱۲ از ۳۶۵ کسر میشود عددی لوپ میدهد تعداد روزهای ماه دسامبر است یعنی ۳۱ و ماه هم میشود ۱۲ 

✔بنابراین  سال ۱۹۱۹  ماه ۱۲ و روز ۳۱ خواهد بود 

ℹℹℹاگر عدد ۳۶۶ شود در ماژول باید بنویسیم یک عدد به سال اضافه شود و ماه هم یک شو د  مهم است  ) 


معادله : 


حتما چک کنید تعداد کبیسه ها تا قبل از سال موردنظر درست باشد وگرنه اختلاف یک یا دو روز حتمی است .