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

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

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

 

ابتدا یک شیت جدید باز کنید. حالا مثل تصویر زیر روی 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 (یکشنبه)