PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشي: تبديل تاريخهاي شمسي و ميلادي با يک جدول ساده



Ali Parsaei
2015/07/10, 23:50
سلام،
چند وقت پيش تو اين لينک (http://forum.exceliran.com/showthread.php/3139-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D8%A7%D8%AA-%D8%B1%D9%88%D9%8A-%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D8%B4%D9%85%D8%B3%D9%8A-%D8%A8%D8%AF%D9%88%D9%86-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-add-in-%D9%8A%D8%A7-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%B4%D9%85%D8%B3%D9%8A) يک مطلب نوشته بودم تحت عنوان: "محاسبات روي تاريخ شمسي بدون استفاده از add-in يا توابع شمسي"
به فکرم رسيد همان جدول موجود در آن را جهت تبديل تاريخها استفاده کنم.
يک فايل ضميمه مي کنم، ديدنش خالي از لطف نيست
اين هم توضيحاتي در خصوص فايل پيوست:
فايل را که باز کرديد مراجعه کنيد به محدوده محاسبات
همانطور که مي دانيد پشت سر هر تاريخ ميلادي در اکسل يک شماره سريال عددي وجود دارد.
ستون وسط جدول موجود در محدوده محاسبات در اصل شماره سريال آخرين روز سالهاي ميلادي است، اگر فرمت آن را DATE کنيد خواهيد ديد که همگي روز 19 يا 20 مارس را نشان خواهند داد.
دو طرف آن سال هاي شمسي متناظر آنها را نوشته ام - به اين خاطر دو طرف نوشته ام که بتوانم دو جور از فرمول VLOOKUP استفاده کنم، يک بار ستون اول ميلادي باشد و يک بار شمسي.
حال در زير محدوده خانه هايي در نظر گرفته ام، در خانه هاي زرد رنگ تاريخها را طبق قاعده تعيين شده وارد مي کنيد.
تاريخ شمسي در شش رقم بدون مميز
تاريخ ميلادي به طور کامل و با مميز
سپس در خانه هاي سبز رنگ طبق فرمول نويسي انجام شده معادل تاريخها به دست مي آيد.
توجه کنيد که در فرمولها از محدوده هاي نام گذاري شده استفاده کرده ام، اين کار مخصوصا" براي آن بوده که در صورت اضافه يا حذف سطرها در شيت يک وقت احيانا" فرمولها به هم نريزد.
حال يک مرحله کد نويسي به فايل اضافه کرده ام.
خوب، حالا برگرديد به ابتداي صفحه
فرض کنيم ما در يک ستون تاريخهاي ميلادي (يا شمسي) وارد مي کنيم، و در ستون بغلي مي خواهيم معادل شمسي (يا ميلادي) آنها را به دست بياوريم.
يک راه اين است که آن فرمولهايي که در خانه هاي سبز محدوده محاسبات نوشته بودم را در همه ستون بغلي تکرار کنيم! که البته با توجه به حجم فرمول غير منطقي بوده و احتمالا" اکسل هنگ خواهد کرد!
راه ديگر اين است که کدي بنويسيم که تک تک تاريخها را در خانه هاي زرد محدوده محاسبات جايگزين کرده و سپس معادل محاسبه شده در خانه هاي سبز را به ستون بغل انتقال دهد.
توجه کنيد که ستونهايي که گفتم را نيز نامگذاري کرده ام تا مشکلي پيش نيايد.
ضمنا" يک کليد جداگانه هم گذاشته ام که در صورت انتخاب خانه اي با تاريخ ميلادي در يک مسج باکس معادل شمسي آن را به شما مي گويد. (اين يکي هم باز با جايگزين کردن در همان محدوده محاسبات معادل را به دست مي آورد و به هر حال اين هم ايده اي است! گفتم شايد جالب باشد).
من از اين روش در فايلهاي پروژه هاي کوچکم استفاده مي کنم و خيلي برايم جذاب است، چون به هيچ جايي ربطي ندارد! نه ADD-IN نه اضافه کردن ماژولهاي تاريخ شمسي به فايل و نه ....
ضمنا" يک کارايي بارز آن استفاده از کليه فيلترهاي تاريخ ميلادي است بدين طريق که مثلا" شما تمام تاريخهاي دلخواه خود را به شمسي وارد مي کنيد. سپس کليد تبديل را زده و معادل ميلادي را در ستون بغل به دست مي آوريد، حال کليه فيلترها (و علاوه بر آن جمع و تفريقها و ....) را روي ستونهاي ميلادي با قابليت خود اکسل انجام مي دهيد، ضمن اينکه در همه حال معادل شمسي آن را جهت مشاهده در ستون بغل داريد.
فقط کافي است در ابتداي تنظيم پروژه خود جدول مربوطه را يک کناري ايجاد و نام گذاري کنيد.
فکر کنم براي دوستاني که آشنايي ابتدايي با VBA داشته باشند جالب باشد.
ضمن اينکه مي توانيد کد ها را در WORKBOOK_OPEN هم بنويسيد که در هنگام باز شدن فايل نيز يک RE CHECK در تمام تاريخهاي ثبت شده انجام گردد
اين هم فايل تقديم شما دوستان: