X
تبلیغات
رایتل

تبدیل متفاوت تاریخ میلادی به شمسی در آفیس

12 مهر 1387

سلام

جهت حمایت از این وبلاگ، وبسایت شهید رسول را تبلیغ و اطلاع رسانی کنید:

shahidrasul.ir


نکته) در صورتی که در استفاده از دستورات دچار مشکل شدید، بخش نظرات و این دو پست را نیز مشاهد کند:

http://kmisagh.blogsky.com/1388/06/08/post-22/

http://kmisagh.blogsky.com/1388/09/06/post-25/


شاید شما هم به این مشکل زیاد برخورد کردید، که تاریخ میلادی رو بخواهید به تاریخ شمسی تبدیل کنید. احتمالا در وب جستجو کردید، و معمولاً یک سری ماژول پیدا کردید، که مجبور بودید هر بار برای استفاده اون رو فراخوانی کنید. در این روش بدون استفاده از ماژول ها و تنها با استفاده از قابلیت های ساده ی آفیس در اکسل و اکسس می توانید تاریخ شمسی خود را ملاحظه کنید.

( فایل اکسل 2007 رو از اینجا می تونید دانلود کنید، حجم: 10 کیلوبایت فرمت: zip در صورتی که اکانت جی میل ندارید از اینجا دانلود کنید. پسورد: kmisagh.blogsky.com. استفاده با درج منبع بلامانع است.)

برای این منظور دانستن این نکته مهم است که آفیس روز 1900/01/01 را به عنوان عدد یک در نظر می گیرد و با اضافه کردن هر واحد، یک روز به عدد بالا اضافه می کند. در این تابع، با استفاده از همین قاعده، روز معادل تاریخ بالا به شمسی را به عنوان مبداء در نظر گرفته و ادامه ی روزها را از روی آن ایجاد می کنیم.

اکسل:

کد یافتن سال به شمسی:

INT((TODAY()-7385)/365.25)+1299

کد یافتن ماه:

MOD(IF(INT(MOD((TODAY()-7385)*100;36525)/100)<186;INT(INT(MOD((TODAY()-7385)*100;36525)/100)/31);IF(MOD(INT((TODAY()-7385)/365.25);4)=0;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-186)/30)+6;IF(INT(MOD((TODAY()-7385)*100;36525)/100)<336;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-186)/30)+6;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-336)/29)+11)));12)+1

کد یافتن روز:

IF(INT(MOD((TODAY()-7385)*100;36525)/100)<186;MOD(INT(MOD((TODAY()-7385)*100;36525)/100);31)+1;IF(MOD(INT((TODAY()-7385)/365.25);4)=0;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-186;30)+1;IF(INT(MOD((TODAY()-7385)*100;36525)/100)<336;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-186;30)+1;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-336;29)+1)))

می توانید هر یک از این کدها را در یک سلول کپی کنید و سپس با دستور CONCATENATE این ها را به هم متصل کنید، تا تاریخ مورد نظر را به دست آورید. همچنین در صورتی که بخواهید تاریخ روزی را که در یک سلول ذخیره کرده اید به شمسی تبدیل کنید، می توانید به جای TODAY() نام سلول مورد نظر را جایگزین کنید.

در کل کپی کردن عبارت زیر در هر سلول از اکسل تاریخ سیستم شما را به شمسی برمی گرداند.

=CONCATENATE(INT((TODAY()-7385)/365.25)+1299;"/";MOD(IF(INT(MOD((TODAY()-7385)*100;36525)/100)<186;INT(INT(MOD((TODAY()-7385)*100;36525)/100)/31);IF(MOD(INT((TODAY()-7385)/365.25);4)=0;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-186)/30)+6;IF(INT(MOD((TODAY()-7385)*100;36525)/100)<336;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-186)/30)+6;INT((INT(MOD((TODAY()-7385)*100;36525)/100)-336)/29)+11)));12)+1;"/";IF(INT(MOD((TODAY()-7385)*100;36525)/100)<186;MOD(INT(MOD((TODAY()-7385)*100;36525)/100);31)+1;IF(MOD(INT((TODAY()-7385)/365.25);4)=0;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-186;30)+1;IF(INT(MOD((TODAY()-7385)*100;36525)/100)<336;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-186;30)+1;MOD(INT(MOD((TODAY()-7385)*100;36525)/100)-336;29)+1))))



در اکسس تنها با تغییر نوع باقیمانده گیری می توانید از همین کد استفاده کنید.

برای یافتن سال:

=Right(Str(Int((Date()-7385)/365.25)+1299);4)

برای یافتن ماه:

=IIf(((IIf(Int((((Date()-7385)*100) Mod (36525))/100)<186;Int(Int((((Date()-7385)*100) Mod (36525))/100)/31);IIf(((Int((Date()-7385)/365.25)) Mod (4))=0;Int((Int((((Date()-7385)*100) Mod (36525))/100)-186)/30)+6;IIf(Int((((Date()-7385)*100) Mod (36525))/10

برای یافتن روز:

=IIf(IIf(Int((((Date()-7385)*100) Mod (36525))/100)<186;((Int((((Date()-7385)*100) Mod (36525))/100)) Mod (31))+1;IIf(((Int((Date()-7385)/365.25)) Mod (4))=0;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;IIf(Int((((Date()-7385)*100) Mod (36525))/100)<336;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;((Int((((Date()-7385)*100) Mod (36525))/100)-336) Mod (29))+1)))<10;"0" & Right(Str(IIf(Int((((Date()-7385)*100) Mod (36525))/100)<186;((Int((((Date()-7385)*100) Mod (36525))/100)) Mod (31))+1;IIf(((Int((Date()-7385)/365.25)) Mod (4))=0;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;IIf(Int((((Date()-7385)*100) Mod (36525))/100)<336;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;((Int((((Date()-7385)*100) Mod (36525))/100)-336) Mod (29))+1))));1);Right(Str(IIf(Int((((Date()-7385)*100) Mod (36525))/100)<186;((Int((((Date()-7385)*100) Mod (36525))/100)) Mod (31))+1;IIf(((Int((Date()-7385)/365.25)) Mod (4))=0;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;IIf(Int((((Date()-7385)*100) Mod (36525))/100)<336;((Int((((Date()-7385)*100) Mod (36525))/100)-186) Mod (30))+1;((Int((((Date()-7385)*100) Mod (36525))/100)-336) Mod (29))+1))));2))


بهتر است که در کل برنامه از تاریخ میلادی استفاده کنید و در جایی که نیاز به خروجی برای کاربر وجود دارد از کدهای بالا استفاده نمایید.

ومن الله التوفیق