کار با توابع تاریخ شمسی در اکسل

تاریخ شمسی در اکسل

سلام به همه دوستان

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

خب بریم سراغ اصل مطلب. ابتدا یک شیت جدید باز کنید. حالا مثل تصویر زیر روی Sheet1 راست کلیک کنید و از منوی باز شده گزینه View Code رو انتخاب کنید.

تاریخ شمسی در اکسل

با انتخاب این گزینه پنجره Visual Basic for Applications باز میشه که از اون میتونیم برای کدنویسی VBA در اکسل استفاده کنیم. در اینجا میتونیم کدهای مربوط به کار با تاریخ شمسی در اکسل رو به فایل اکسل خودمون اضافه کنیم.

برای اینکار ابتدا مثل تصویر زیر از منوی Insert گزینه Module رو انتخاب کنید.

تاریخ شمسی در اکسل

با اینکار یک Module به فایل اکسل اضافه میشه که ما کدهای مربوط به تاریخ شمسی رو در اون قرار میدیم. برای اینکه کدها رو داخل ماژولی که ایجاد کردیم قرار بدیم از بخش Project Explorer رو Module1 دوبار کلیک میکنیم.

تاریخ شمسی در اکسل

حالا فایل مربوط به تاریخ شمسی رو از اینجا دانلود کنید و فایل متنی داخل اون رو در notepad باز کنید و تمام کدهای داخلش رو در پنجره Module1 کپی کنید. با اینکار توابع مربوط به کار با تاریخ شمسی در اکسل به فایل ما اضافه شدند و میتونیم از اونها استفاده کنیم.الان پنجره Visual Basic for Applications شما باید مثل تصویر زیر باشه.

تاریخ شمسی در اکسل

اما قبل از استفاده از این توابع بهتره فایلمون رو به صورت صحیح ذخیره کنیم. همونطور که میدونید پسوندی که اکسل برای ذخیره فایل ها به صورت پیش فرض از اون استفاده میکنه در نسخه های قدیمی تر xls و در نسخه های جدیدتر xlsx هست. این پسوندها قابلیت ذخیره سازی کدهای VBA رو ندارند. به این معنی که اگر شما فایلتون رو با این پسوندها دخیره کنید کدهای VBA که به فایلتون اضافه کردید ذخیره نمیشن و دفعه بعد که فایلتون رو باز کنید تمام کدها از فایلتون حذف شده و عملاً فایل شما به درستی کار نمیکنه. برای اینکه این مشکل پیش نیاد باید فایلمون رو با یکی از پسوندهای xlsm یا xlsb ذخیره کنیم. در خصوص تفاوت این دو پسوند بعداً در یک مطلب جداگانه توضیح میدم. برای اینکه فایلمون را با پسوند xlsm ذخیره کنیم مثل تصویر زیر در پنجره Save As نوع پسوند رو در قسمت Save As Type برابر (Excel Macro-Enabled Workbook (*.xlsm قرار میدیم.

تاریخ شمسی در اکسل

اگر تمام مراحل رو به درستی انجام داده باشید باید به توابع کار با تاریخ شمسی دسترسی داشته باشید. برای آزمایش این مساله روی یکی از سلول ها شروع به فرمول‌نویسی کنید. اگر با نوشتن عبارت sh= در فرمول سلول تایع shamsi مثل تصویر زیر در گزینه ها نمایش داده شد، توابع شمسی به درستی در فایل اکسل شما فعال شدند و شما میتونید از اونها استفاده کنید.

تاریخ شمسی در اکسل

رفع مشکل ؟ شدن کاراکترهای فارسی در VBA: اگر کاراکترهای فارسی شما در پنجره Visual Basic Editor به صورت ؟؟؟ نمایش داده میشه کافیه فایل shamsi-date.txt رو به جای نوت پد با Wordpad باز کنید و پس از کپی کردن کدها از داخل Wordpad اونها رو داخل visual basic editor پیست کنید.

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

تابع Shamsi: این تابع تاریخ جاری سیستم رو تبدیل به تاریخ شمسی میکنه.

مثال: ()Shamsi=          نتیجه:  13940114

تابع Rooz: این تابع روز مربوط به یک تاریخ مشخص رو برمیگردونه

مثال: (13940114)Rooz=          نتیجه:  14

تابع Mah: این تابع ماه مربوط به یک تاریخ مشخص رو برمیگردونه

مثال: (13940114)Mah=          نتیجه:  1

تابع Sal: این تابع سال مربوط به یک تاریخ مشخص رو برمیگردونه

مثال: (13940114)Sal=          نتیجه:  1394

تابع Kabiseh: این تابع مشخص میکنه که آیا سال موردنظر کبیسه هست یانه. در صورتی که سال موردنظر کبیسه باشه عدد 1 و در غیر اینصورت عدد 0 به عنوان نتیجه تابع برگردونده میشه.

مثال: (1394)Kabiseh=          نتیجه:  0

تابع ValidDate: این تابع تاریخ شمسی که به اون داده بشه رو بررسی میکنه و در صورتی که تاریخ داده شده معتبر و درست باشه true و در غیر اینصورت false رو برمیگردونه.

مثال: (13940114)ValidDate=          نتیجه:  true        مثال: (13940134)validdate=          نتیجه:  false

تابع AddDay:  این تابع تعداد روز مشخصی رو به یک تاریخ اضافه میکنه.

مثال: (7;13940114)AddDay=          نتیجه:  13940121

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

مثال: (13940114)DayWeek=          نتیجه:  جمعه

تابع Dat: این تابع تاریخ شمسی رو به همراه روز هفته برمیگردونه

مثال: ()Dat=          نتیجه:  جمعه 1394/1/14

تابع Diff: این تابع اختلاف روزهای بین دو تاریخ شمسی رو نشون میده.

مثال: (13940114;13940107)Diff=          نتیجه:  7

تابع DayWeekNo: این تابع عدد مربوط به روز هفته یک تاریخ شمسی رو برمیگردونه. به عنوان مثال اگر تاریخ موردنظر روز شنبه باشه عدد 0، در صورتی که یکشنبه باشه عدد 1 و …

مثال: (13940110)DayWeekNo=          نتیجه:  2

تابع MahName: این تابع عدد مربوط به یک ماه رو دریافت میکنه و نام ماه مربوط به اون رو برمیگردونه.

مثال: (2)MahName=          نتیجه:  اردیبهشت

تابع SalMah: این تابع شش رقم اول یک تاریخ شمسی رو که نشون دهنده سال و ماه اون هست رو برمیگردونه.

مثال: (13941115)SalMah=          نتیجه:  139411

تابع MahDays: این تابع تعداد روزهای یک ماه رو برمیگردونه.

مثال: (1;1394)MahDays=          نتیجه:  31

تابع Make_Date: این تابع سال، ماه و روز تاریخ شمسی رو با علامت “/” از هم دیگه جدا میکنه.

مثال: (13940114)Make_Date=          نتیجه:  1394/01/14

تابع NextMah: این تابع مقدار سال و ماه رو به عنوان ورودی میگیره و ماه بعد رو به عنوان نتیجه برمیگردونه.

مثال: (139412)NextMah=          نتیجه:  139501

تابع PreviousMah: این تابع مقدار سال و ماه رو به عنوان ورودی میگیره و ماه قبل رو به عنوان نتیجه برمیگردونه.

مثال: (139407)NextMah=          نتیجه:  139406

تابع SubtractDay: این تابع تعداد روز مشخصی رو از یک تاریخ شمسی کم میکنه.

مثال: (6;13940718)SubtractDay=          نتیجه:  13940712

تابع Firstday: این تابع یک سال و ماه شمسی رو میگیره و شماره اولین روز اوم ماه رو برمیگردونه. (برای شنبه عدد 0، برای یکشنبه عدد 1 و …)

مثال: (6;1394)Firstday=          نتیجه:  1 (یکشنبه)

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

پی‌نوشت: کدهایی که در این آموزش ازشون استفاده کردم نوشته‌ی من نیست. اگر کسی میدونه که این کدها اجازه انتشار نداره لطفاً به من اطلاع بدید تا این مطلب رو حذف کنم.

337 Comments on “کار با توابع تاریخ شمسی در اکسل”

  1. سلام و وقت بخیر
    بابت توضیحات بی نهایت سپاسگزاریم از شما… خیلی کامل بود.
    یه سوال::: وقتی تبدیل انجام میشود بین تاریخ ها اسلش نمیاد چطوری میشه اینو اضافه کرد؟؟؟؟؟
    و یه خواهش از شما دارم که بگید برای هر بار استفاده از ماکرو برای موارد مختلف این فایل ها را چه گونه سرج کنیم … یعنی با چه نامی…
    به عبارت دیگر من همیشه در کار با ماکرو مشکل دارم چرا که فایل را ندارم
    نمیدونم متوجه سوالم شدید یا نه؟؟؟؟؟؟؟؟؟
    امکان داره مثال های دیگری را زده و فایل های دیگری را قرار دهید؟؟؟
    سپاس

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

    لطفا راهنماییم کنید.office2010

  3. سلام وقتتون بخیر
    من میخوام یه فرمولی بنویسم که یه تاریخی رو وارد میکنیم خودش 7 روز بعد و 28 روز بعد و خودش حساب کنه
    خواهش میکنم راهنماييم کنید

  4. سلام، وقت بخیر
    منم مثل خیلی از دوستان این مشکل رو دارم که وقتی از فایل اکسلم خارج میشم توابع کار نمیکنن.بعد که میرم تو قسمت ماژول 1 میبینم کدهایی که کپی کردم سرجاشون وجود دارند ولی وقتی مینویسم ()sh= تابع رونمیاره.به همون روش که فرمودید ذخیره کردم فایل اکسلمو.
    چیکار کنم.البته متن فارسی توابع هم در notepad و wordpad یه جور عجیب غریبه

  5. سلام وقت بخیر
    من به یک تابع نیازدارم که تاریخ شمسب رو بگیره و شماره هفته ماه مندرج در اون تاریخ رو بده، اگر امکان داره من رو راهنمایی کنید

  6. سلام.من مشکلی که دارم وقتی مثلا میزنم 28/12/1396
    و اونو اتو فیل میکنم میشه 29/12/96 بعد30/12/96 بعد31/12/96 بعد32/12/96 همینطور الی اخر تشخیص نمیده که وارد ماه و سال بعدی شدیم که بشه1/1/97 البته در تاریخ میلادی این مشکل نیست ممنون میشم کمک کنید.

  7. سلام
    من تاریخ رو به صورت 96/09/20 در سلول (h3) وارد اکسل 2010 میکنم بعد مثلا تاریخ 96/09/1 در سلول (i3) رو وارد میکنم بعد مثلا فرمول =h3-i3 رو میزنم ولی ارور میده و اختلاف دو تاریخ رو بهم نمیده باید تاریخ رو به شکل 960920 وارد کنم تا اختلاف رو بهم بده راه حلی هست که اختلاف رو با تاریخ اسلش (/)دار بهم بده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *