فلسفه سیزده به در
فلسفه سیزده به در به طور کلی در میان جشن های به جا مانده از دوره ی باستان جشن سیزده به در کمی مبهم است، زیرا مبنا و اساس دیگر جشن ها را ندارد.
در کتابهای تاریخی اشارهی مستقیمی به وجود چنین مراسمی نشدهاست اما در منابع کهن اشاره هایی به روز سیزدهم فروردین داریم.
گفته می شود ایرانیان باستان در آغاز سال نو پس از دوازده روز جشن گرفتن و شادی کردن که به یاد دوازده ماه سال است، روز سیزدهم نوروز را که روز
فرخنده ایست به باغ و صحرا می رفتند و شادی می کردند و در حقیقت با این ترتیب رسمی بودن دورهً نوروز را به پایان میرسانیدند.
می توان گفت معقول ترین موردی که درباره ی سیزده به در گفته می شود همین است .
اما اگر در کتاب های تاریخی و ادبی گذشته اشاره ای به سیزده به در و هفت سین نمی یابیم آیا این رسم ها را باید پدیده ای جدید دانست و یا این که، رسمی کهن
است، و به علت عام و عامیانه بودن در خور توجه نبوده و با معیارهای مورخان زمان ارزش و اعتبار ثبت و ضبط نداشته است؟
سیزده به در رسم و آیینی که بدین گونه در همه شهرها و روستاهای ایران همگانی است و در بین همهً قشرهای اجتماعی عمومیت دارد، نمی تواند عمری در حد دو نسل و سه نسل داشته باشد.
علاوه بر این می دانیم کتابهای تاریخی و شعرهای شاعران، رویدادها و جشن های رسمی را که در حضور شاهان و خاصان دستگاه حکومتی بود، بیان و توصیف
می کرد. ولی سیزده به در، رسمی خانوادگی و عام و به بیانی دیگر پیش پا افتاده و همه پسند (و نه شاه پسند) بود. از طرف دیگر، نوشتن رویدادهای
روزی که رفتارها و گفتارهای خنده دار و غیر جدی، برای خود جایی باز کرده، توجه مورخ و شاعر را به خود جلب نمی کرد و شاید «نحس» بودن هم عاملی
برای بیان نکردن بود و ...
تیر روز در گاهشماری ایرانی، هر روز ماه، نام ویژه ای دارد. به عنوان مثال، روز نخست هر ماه، اورمزد روز و روز سیزدهم هر ماه تیر
روز نامیده می شود و متعلق به ایزد تیر است. تیر در زبان اوستایی تیشتَریَه خوانده می شود، و هم نام تیشتر، ایزد باران می باشد .
با توجه به اطلاق گرفتن نام ایزد باران، می توان گفت که تیر در نزد ایرانیان باستان نمادی از رحمت الهی بوده است تیر در کیش مزدیسنی مقام بلند و داستان شیرین و دلکشی دارد و جشن بزرگ تیر روز از تیر ماه نیز که جشن تیرگان است به نام او می باشد
نظریههایی پیرامون نحوست سیزده [ویرایش]تا کنون هیچ دانشمندی ذکر نکرده که سیزده نوروز نحس است بلکه قریب به اتفاق روز سیزده نوروز را بسیار سعد و فرخنده دانسته اند.
برای مثال در آثار الباقیه ابوریحان بیرونی، جدولی برای سعد و نحس بودن روز ها قرار دارد که در آن برای سیزدهم نوروز که تیر روز نام دارد، کلمه? سعد به معنی نیک و فرخنده آمدهاست .
بعد از اسلام چون سیزدهم تمام ماهها را نحس میدانند، به اشتباه سیزدهم عید نوروز نحس
شمرده شد.
ارتباط با مسیحیت برخی از محققان عقیده دارند که عقیده به نحوست عدد سیزده اثری است که از ارتباط و مجاورت با عالم مسیحیت به زرتشتیان و بعد از آنان مسلمانان انتقال یافتهاست. اصل این عقیده به این صورت است که یهودای اسخر یوطی یکی از دوازده حواری مسیح نقشه کشید تا وی را تسلیم
مخالفانش کند و قرار گذاشت تا وقتی وارد محفل مسیح شود، او را ببوسد تا دشمنان او بتوانند تشخیص دهند که کدامیک از افراد حاضر در محفل مسیح است.
بدین ترتیب مسیح دستگیر شد و چون یهودای اسخر یوطی سیزدهمین فردی بود که به جرگه مسیح و یازده شاگرد دیگرش در آمد و شماره? آنان به سیزده رسید مسیح
گرفتار و محاکمه و به دار آویخته شد. عیسویان بدین علت عدد سیزده را شوم میدانند.
واژه «سیزده به در» [ویرایش]مشهور است که واژه ی سیزده به در به معنای « در کردن نحسی سیزده» است .
اما وقتی به معانی واژه ها نگاه کنیم برداشت دیگری از این واژه می توان داشت. «در» به جای «دره و دشت» می تواند جایگزین شود .به عنوان مثال علامه دهخدا، واژه «در و دشت» را مخفف «دره و دشت» می داند.
چو هر دو سپاه اند آمد ز جای تو گفتی که دارد در و دشت پای یکی از معانی واژه «به» ، « طرف و سوی » می باشد . مانند اینکه می گوییم «به فروشگاه» .
پس با نگاهی کلی می توان گفت واژه «سیزده به در» به معنای « سیزدهم به سوی در و دشت شدن» می باشد که همان معنی بیرون رفتن و در دامان طبیعت سر کردن را می دهد.
پیشینه در کتابهای تاریخی پیش از قاجار اشارهی مستقیم و دقیقی به وجود چنین مراسمی نشدهاست اما مهرداد بهار در کتاب «از اسطوره تا تاریخ»
خود اشارهای کوتاه به جشن و پایکوبی مردم در اماکن عمومی و حتی بیروپوش و روبنده در خیابان آمدن زنان در دوران صفوی میکند که این موضوع نزدیک به آیین های سیزده به در می باشد.
دوره? قاجار عبدالله مستوفی در کتاب شرح زندگانی من چگونگی انجام این مراسم در دوره? قاجار را با جزئیات شرح دادهاست.
ادوارد یاکوب پولاک هم درباره مراسم سیزدهبهدر چنین مینویسد:
سرانجام روز سیزدهم، یعنی آخرین روز عید فرا میرسد. مطابق با یک رسم کهن گویا تمام خانهها در چنین روزی معروض خطر ویرانی هستند. به همین دلیل
همه از دروازه? شهر خارج میشوند و به باغها روی میآورند.
آیینهای سیزدهبه در این رویداد دارای آیینهای ویژهای است که در درازای تاریخ پدید آمده و اندک اندک چهره سنت به خود گرفته است. از آن جمله
میتوان آیینهای زیر را برشمرد.
گره زدن سبزه
سبزه به رود سپردن
خوردن کاهو و سکنجبین
پختن غذاهای متنوع به ویژه آش رشته
سبزه گره زدن یکی از آیین های این روز سبزه گره زدن است که معمولا جوانان در این روز این کار را انجام می دهند .
فلسفه سبزه گره زدن افسانه ی آفرینش در ایران و مسأله ی نخستین بشر و نخستین شاه و دانستن روایاتی درباره ی کیومرث حائز اهمیت زیادی است
. در اوستا چندین بار از کیومرث سخن به میان آمده و او را اولین پادشاه و نیز نخستین بشر نامیده است . گفته های حمزه اصفهانی در کتاب سنی ملوک
الارض و الانبیا صفحات 29 -23 و گفته های آثار الباقیه بر پایه ی همان آگاهی است که در منابع پهلوی وجود دارد .
مشیه و مشیانه که دختر و پسر دوقلوی کیومرث بودند، روز سیزدهم فروردین برای اولین بار در جهان با هم ازدواج نمودند .
در آن زمان چون عقد و نکاهی شناخته شده نبود آن دو به وسیله ی گره زدن دو شاخه ی مورد، پایه ی ازدواج خود را بنا نهادند و چون ایرانیان باستان از این راز بخوبی آگاهی داشتند، آن مراسم را - بویژه دختران و پسران دم بخت
- انجام می دادند و امروز هم دختران و پسران برای بستن پیمان زناشویی نیت می کنند و علف گره می زنند .
ماکرو نویسی در اکسل
بخش اول ماکرو نویسی در اکسل VBA:
برای انجام عملیات تکراری و جستجو ی داده های مورد نظر می توان از ابزار قدرتمند ماکروها در اکسل استفاده کرد. ورود به ساختار برنامه نویسی ویژال
بیسیک در اکسل که با عنوان VBA یا VISUAL BASIC FOR APPLICATION در اکسل و یا آفیس از آن یاد
می گردد ، از مسیر زیر انجام می گیرد :
TOOLS | MACRO | VISAUL BASIC EDITOR
در حقیقت ماکرو ها، همان کدهایی هستد که توسط کاربر یا ماشین تولید می شوند. اگر شما یک ماکرو را با استفاده از ابزار ماکرو سازی طراحی و اجرا کنید
آنرا توسط ماشین ساخته اید ولی اگر بخواهید انعطاف بیشتری به آن بدهید باید آنرا بنویسید( کد نویسی ). زبان وب بی ای در حقیقت معماری درونی اکسل و
ابزاری قدرتمند برای نوشتن برنامه های پیشرفته و حلقوی است . این زبان که یک زبان شئ گراست ، اجزای درونی خود را به شکل اشیائی در نظر می گیرد که
نرم افزار اکسل را تشکیل می دهند، مثل فایل ( کارپوشه WORKBOOK ) ، کاربرگ یا WORKSHEET و یا سلول RANGE .
در حقیقت کارپوشه ها از اشیاء کاربرگ تشکیل شده اند و کاربرگ ها با اشیاء سلول کامل می شوند . هر شیء دارای یک سری خاصیت است . مثلا شما یک
سنگ را در نظر بگیرید ، رنگ ، وزن ، شکل و… خواص سنگ محسوب می شوند .در وی بی ای VBA نیز همینطور است ، مثلا یک سلول دارای
خواصی مثل محتویات ، اندازه فونت ، نام فونت ، رنگ ، فرمول ، کادر و …. می باشد. کاربران در برنامه نویسی در حقیقت این خواص را تغییر می دهند
.
بیایید یک تمرین را باهم انجام دهیم :
ابتدا نوار ابزار ویژال بیسیک را فعال کنید ، سپس ماکرویی را طراحی کنید که در سلول A1 از کاربرگ 2 وارد شود .
مراحل ساخت ماکرو :
ابتدا کلید RECORD MACRO را می فشاریم و سپس به کاربرگ 2 و سلول A1 وارد می شویم و در آخر کلید STOP را می فشاریم
.
حال برای دیدن کد ماکرو مسیر زیر را دنبال کنید :
کلید RUN را فشرده تا اسامی ماکرو ها ظاهر شود سپس ماکروی مورد نظر را انتخاب کرده کلید EDIT را می فشاریم تا متن ماکرو ( کد )
نمایش داده شود .
همانطور که مشاهده می کنید ماکرو با SUB و نام ماکرو ،شروع و با END SUB تمام می شود و در بین آنها عبارات برنامه نویسی
نوشته شده است . سه رنگ در بدنه ی ماکرو بکار رفته 1- سبز: که معرف توضیحات برنامه است و هیچ تاثیری بر عملکرد ماکرو ندارد 2- آبی :
کلمات کلیدی 3- سیاه : دستورات
Sub Macro1()
‘ Macro1 Macro
‘ Macro recorded 2007/04/23 by tozih
Sheets(“Sheet2″).Select
Range(“A1″).Select
End Sub
همانطور که از کد ها مشخص است ماکرویی بنام MACRO1 به کاربرگ 2 رفته و سلول A1 را در آن انتخاب می کند . در ساختار برنامه
نویسی VBA تغییر خواص به صورت توارثی انجام می پذیرد ، یعنی هر خاصیت باید به شئ مورد نظر، با یک نقطه متصل باشد .
Range(“A1″).Select
در حقیقت برای تغییر خاصیت اشیاء باید ابتدا نام شئ را ذکر کرده سپس نقطه را قرار داده و آنگاه خاصیت مورد نظر را ذکر کنیم و مقادیر آنرا تغییر دهیم .
مثلا :
RANGE(“A2:A10″).FONT.SIZE = 16
اندازه فونت محتویات سلول های A1 تا A10 را به 16 تغییر می دهد .
مثال دیگر ، محتویات سلول D2 از کاربرگ 3 را عبارت ALI TOZIH قرار دهید .
SHEETS(“SHEET3″).RANGE(“D5″).VALUE = “ALI TOZIH”
در ضمن خاصیت VALUE پیش فرض است و می توان آنرا حذف کرد :
SHEETS(“SHEET3″).RANGE(“D5″) = “ALI TOZIH”
بخش دوم: آموزش ماکرو نویسی در اکسل
معمولا اکثر ما برای برآورده کردن نیازهای کاریمان در Excel، از وجود ماکروهای پیشفرض در اکسل استفاده میکنیم که البته در غالب موارد نیز به کمک
ما میآیند و مشکلات را برطرف میکنند. ولی مسلم است که آنها نمیتوانند پاسخگوی تمام نیازها باشند. مثلاً این ماکروها نمیتوانند قبل از آنکه روی سلول
کاری انجام دهند، محتویات آن را چک کنند. همچنین نمیتوانند از وجود پنجرههایpop-up برای ارتباط با کاربر استفاده کنند. بنابراین باید برای رسیدن
به تمام مقصودهای خود، از راه دیگری استفاده کنید. یعنی ماکروهای موردنیاز خود را بنویسید که این مستلزم آشنایی شما با زبان اسکریپت اکسل و (VBA)
میباشد. در این مقاله سعی بر آن است با نوشتن یک ماکروی ساده شما را با قسمتی از اسکریپتنویسی آشنا کنیم.
در این بخش طرز نوشتن ماکرویی را ارائه می شود که چند گزینه را به کاربر پیشنهاد میکند و سپس براساس انتخاب کاربر از گزینههای پیشنهادی، عمل مربوط به
هر گزینه را انجام میدهند. با این کار سعی میکنیم تا حدی با ماکرونویسی و اسکریپتنویسی آشناتر شویم.
در ساخت این ماکرو به شما میآموزیم که برای اجرا کردن یک دستور، چگونه از کلیدهایی مثل OK یا Cancel استفاده کنید. همچنین خواهید
آموخت چگونه یک فرم بسازید یا آن را کنترل کنید و محتویات آن را تحلیل نمایید. شما خواهید آموخت که چگونه محتویات سلولهایی را که انتخاب کردهایم، به
وضعیت دلخواه تغییر دهیم.
در خلال ساخت این ماکرو، با ارائه توضیحات کافی در هر مرحله، با خیلی از مسائل آشنا خواهیم شد. ماکرویی که در این بخش قرار است نوشته شود، دادههای
هر سلول را، که از نوع String باشد، به حروف بزرگ یا کوچک یا ترکیبی از هر دو تبدیل خواهد کرد.(در اکسل توابعی نظیر UPPER یا
LOWER و PROPER وجود دارند که میتوانند حالت متن را تغییر دهند، اما برخلاف Word، هنگامی که متن را در سلولها وارد میکنیم، بهطور
مستقیم نمیتوانیم از آنها استفاده کنیم.)
بنابراین، موضوع خوبی وجود دارد که ما برای حل آن ماکرویی بنویسیم. پس ماکروی ما باید سه گزینه lower (حروف کوچک)Upper (
حروف بزرگ) یا Proper را به کاربر پیشنهاد کند و براساس انتخاب کاربر، حروف را تبدیل کند. تابع اصلیای که به ما کمک میکند حالت متون را
عوض کنیم، Strconv نام دارد که الگوی آن به این صورت است: (Strconv (string, type of
conversion
باید فرمی را درست کنیم که سه پیشنهاد مذکور را به کاربر ارائه دهد. اما باید به جای استفاده از کادرهای کنترلی (check boxes)، از کلیدهای
رادیویی استفاده کنیم. زیرا قرار است در هر لحظه تنها یکی از سه گزینه انتخاب شوند و نمیتوانیم بیش از یک گزینه را انتخاب نماییم.
ساخت فرم :
برای ساخت فرم باید در یک workbook جدید باشید و به منویTools/Macro/Visual Basic Editor مراجعه
کنید. در برنامه VBA Project Explorer باید یک work sheet جدید داشته باشید و بعد به منوی
Insert/userform بروید. برای آنکه این منو را بزرگ کنید، میتوانید از گوشه پایین سمت راست آن را بکشید. در ضمن اگر جعبه ابزار
را هم روی صفحه ندارید، روی آیکون Toolbox کلیک کنید تا جعبه ابزار نمایان شود.
با استفاده از کنترلهای Toolbox، یک کنترل Frame را روی دو سوم بالایی User form بکشید. سپس سه Option
Button را به فریم خود اضافه کنید. بعد دو Command Button را نیز به پایین آن اضافه کنید. فراموش نکنید شما برای ویرایش هر
یک از آیتمهایی که تاکنون به فریم خود اضافه کردهاید، اختیارات زیادی دارید و میتوانید، اندازه، مکان، نوع، و شکل آنها را به دلخواه خود تغییر دهید.
حالا روی هر آیتم کلیک کنید. User Form ،Frame و هر کلیدی که اضافه کردهاید و سایر تنظیمات را در Properties
Window اعمال کنید. (تنظیمات دیگر برای مراحل بعد باقی خواهند ماند).
فرم کامل شده شما در نهایت بسیار شبیه سایر منوها و فریمهای آفیس خواهد بود. ضمناً برای هر آیتمی که به فرم اضافه کردهاید، نامی در نظر بگیرید. زیرا
نامگذاری کنترلرها باعث میشود که در هنگام اسکریپتنویسی آنها را راحتتر با کدها تطبیق دهیم.
محتویات جعبه Toolbox,چیزهای هستند که با آنها می توانید فرم خود را تهیه کنید و Properties اجازه میدهد آنها را چنان که باید به
نظر برسند، تنظیم کنید.
محتویات caption همان متنی است که هنگامی که اشارهگر ماوس روی هر آیتمی که قرار میگیرد ظاهر میشود. پس میتوانید برای هر قسمت، متن
مربوط به آن را بنویسید.
در قسمت Accelerator نیز میتوانید کاراکترهای موردنظر خود را با کلید Alt مرتبط کنید تا در فرمتان به عنوان کلیدهای میانبر مورد
استفاده قرار گیرد.
از دو کلید دستوری که به انتهای فرم اضافه کردیم، یکی کلید OK و دیگری کلید Cancel است. استفاده از کلیدCancel از دو جهت اهمیت
دارد: اول آن که باید برای آن ارزشی معادل True در نظر بگیریم تا باعث شود هنگامی که کاربر کلید Esc را فشرد، این کد اجرا شود و برنامه
بسته شود. همچنین باید Default را هم بهواسطه تعیین ارزش True برای کلید Cancel تعریف کنیم تا هنگامی که ماکرو اجرا
میشود، به طور پیشفرض کلید Cancel انتخاب شده باشد.
اینکه ماکروی شما مخرب نباشد، مسئله پراهمیتی است. بنابراین شما باید به گونهای ماکرو بنویسید که اگر در حین کار اشتباها کلیدی را زدید یا چیزی را وارد
کردید، اتفاق خاصی نیفتد. برای همین ما پیشفرض ماکرو را کلیدCancel در نظر گرفتیم تا اگر به اشتباه کلیدی زده شد، اتفاقی در محتویات
worksheet شما نیفتد. البته الزام دیگری نیز برای اینکار وجود دارد و آن فعال نبودن عمل undo است. در واقع اگر در حین اجرای یک
ماکرو، به منوی Edit/undo سری بزنید، خواهید دید که غیرفعال است.
از مبحث پیشفرض بودن یا پیشفرض شدن دو کلید ماکرو که بگذریم، باید به سه آیتم بالای آن یعنی low ،upper و proper هم سری بزنیم و
یکی از آنها را نیز بهعنوان پیشفرض ماکرو در نظر بگیریم. برای اینکه به اکسل بگوییم کدام یک از سه آیتم منظور ماست، باید برای یکی از آنها ارزش
بیشتری قائل شویم! به عبارت دیگر، باید ارزش یکی از آنها را معادل True در نظر بگیریم که با این کار بهطور خودکار ارزش سایر آیتمها برابر
false در نظر گرفته میشود. در حین تعیین کردن ارزش برای آیتمها، مطمئن باشید که در هر لحظه تنها یک آیتم را انتخاب کردهاید.
نوشتن کدها
پیش از اضافه کردن کدها به ماکرو، باید بدانیم کدام آیتم قرار است کاری انجام دهد. اگر در این ماکروها کاربر از سه آیتم دارای کلید رادیویی، یکی را انتخاب
کرد، قرار نیست اتفاقی بیفتد. در این ماکرو تنها آیتمهایی که اجازه دارند کاری انجام دهند، دو کلید OK و Cancel هستند.
کلید Cancel باید فرم ماکرو را از صفحه نمایش حذف کند (یعنی از برنامه خارج شویم) و کلید OK باید حالت متنهای سلولهای انتخابی را
براساس آنچه کاربر در بالای فرم انتخاب کرده است، تغییر دهد.
ابتدا از اضافه کردن کدها به کلید Cancel شروع میکنیم. برای باز شدن پنجره کدنویسی مربوط به کلید Cancel، دوبار روی آن کلیک کنید.
اشارهگر بین دو خط زیر خواهد بود:
Private sub cmdcancel – click()
End sub
و شما باید همانجا دو خط زیر را وارد کنید:
Unload Me
End
اکنون میتوانید این قست را با کلیک کردن روی فرم و انتخاب Run Sub/user Form تست کنید. حالت مطلوب در این بخش آن است که
اگر روی هر آیتمی کلیک کردید، تنها همان آیتم انتخاب شود و سایر آیتمها از حالت انتخاب خارج شوند. کلید OK نباید کاری انجامدهد و شما بتوانید با کلیک
کردن روی کلید Cancel یا فشار دادن کلید Esc، از برنامه خارج شوید.
حال روی کلید OK دوبار کلیک کنید. سپس دستورات لازم را میان دو عبارت Sub و End sub وارد کنید. (کد 1)هنگامی که روی
کلید OK کلیک میکنید، تابع if بررسی میکند که کدامیک از Option buttonها انتخاب شدهاند. اگر اولی انتخاب شده باشد، متغیر
convertChoice به ثابت ویژوال بیسیک یعنی vbUpperCase تبدیل میشود. اگر دومی انتخاب شده باشد، متغیر به
vbLowerCase تبدیل خواهد شد و اگر هیچ کدام (اولی یا دومی) انتخاب نشود، یعنی سومی را انتخاب کردهایم که بنابراین، متغیر به
vbProperCase تبدیل خواهد شد.
در این خط از اسکریپت (بعد از Else) علامت آپاستروف قرار داده شده است که نشان میدهد به طور پیشفرض این گزینه (گزینه سوم) انتخاب شده
باشد.
Else ‘opt Proper is selected
عبارت for به برنامه میگوید که تغییراتی را که در خطوط بالاتر اعمال کرده است، تنها برای سلولهایی در نظر بگیرد که یکبار انتخاب شدهاند و نوع
محتویات آنها هم String باشد.
بنابراین هر سلولی که محتوی دادههایی در قالب String باشد، به واسطه توابع Lower یا Upper یا Proper تبدیل خواهد شد و
خود این تبدیل، به واسطه آنچه که در متغیر convertchoice ذخیره شده است، اعمال خواهد شد. یعنی:
If var Type (cell.value) = vbstring then
Cell. Value = Strconv(Cell.Value, Convertchoice)
End If
کد 1
وجود این چندخط خیلی ضروری است. در واقع If بررسی میکند که سلولهای انتخابی کاربر که جهت انجام تغییراتی به ماکرو معرفی شدهاند، حاوی
String هستند یا نه. به عبارت دیگر، اعمال تغییرات را فقط برای سلولهایی که محتوی String باشد، میسر میکند. اگر چه هر تلاشی
برای تبدیل اعداد با این تابع (strconv) عملی نخواهد بود زیرا تبدیل سایر دادهها یا فرمولها میتواند باعث آسیبدیدن محتویات هر سلول شود.
در انتهای نوشتن ماکرو خود چند خط دیگر نیز برای طریقه نشان دادن فرم روی صفحه و پیغامهای خطا و یا پرسشها باید به کدهای اصلی اضافه کنیم. تاکنون
ماکروی ما به عنوان ضمیمه User Form در حال کار بود. در صورتی که ماکرو باید بهطور مستقل اجرا شود. برای این منظور، به منوی
Insert/Module مراجعه کنید و خطوط زیر را در پنجره مربوط تایپ کنید.
این ماکرویی است که فرم را اجرا میکند. در ابتدا، ماکرو بررسی میکند که اصلاً سلول یا سلولهایی برای انجام تغییرات لازم انتخاب شدهاند یا خیر. اگر
حتی یک سلول هم انتخاب شده باشد، ماکرو اجرا، و فرم مذکور باز خواهد شد.
البته در حالتهای ترکیبی، ممکن است استفاده از “Range” مشکلاتی را به همراه داشته باشد، یا حتی ماکروی مربوطه به درستی کار نکند. انتخاب یک
تصویر از Clip-Art یا یک نمودار و مشابه آنها، جزء Range انتخابی شما نخواهد بود. بنابراین اگر در آیتمهای انتخابی شما چنین مواردی
باشد، متنی ظاهر خواهد شد و به شما پیشنهاد میکند که دوباره Range خود را انتخاب کنید. به این شکل:
“Please select a range and run the maro again”
پنجره حاوی این متن یک آیکون را متن پیام و یک کلید Ok برای تایید را نشان میدهد. برای امتحان ماکرویی که نوشتیم، در چند سلول، اطلاعات مختلفی، مانند
متن، اعداد و فرمول را در workbook خود وارد و آن را ذخیره کنید. سپس برخی از آن سلولها را انتخاب و ماکرو را اجرا
کنید(Tools/Macro/Macros). متون سلولها باید مطابق آنچه شما از سه گزینه ارائه شده انتخاب کردهاید تغییر کنند.
آن را برای همهجا آماده کنید
برای اینکه ماکرو برای تمام worksheet آماده کار شود، باید آنها را به فایل personal.als خودتان انتقال دهید. اگر یک فایل
Personal.als در Projcet Explorer نمایش داده نشود، به اکسل بازگردید و یک ماکروی کوچک
درTools/Macro/Record Macro ثبت کنید و در Personal Macro Workbook ذخیره نمایید. در واقع
ثبت یک ماکرو، تنها در این workbook تمام آن کاری است که برای ساخت یک Personal.als نیاز دارید.
حال برای آن که ماکرو را به Personal.als انتقال دهیم، باید Form ها و Modulel در یکProject
Explorer را بکشیم و روی فایل Personal.als بیندازیم.
اکنون ماکروی شما آماده است تا شما را در تمام worksheetها یاری دهد، و شما با رفتن به منوی Tools/Macro/Macros و
انتخاب نام و اعمال سایر تنظیمات در Option، میتوانید یک کلید میانبر برای اجرای آن تعریف کنید و حتی آن را به خط ابزار هم اضافه نمایید.
بخش سوم آموزش اکسل
معمولا اکثر ما برای برآورده کردن نیازهای کاریمان در Excel، از وجود ماکروهای پیشفرض در اکسل استفاده میکنیم که البته در غالب موارد نیز به کمک
ما میآیند و مشکلات را برطرف میکنند. ولی مسلم است که آنها نمیتوانند پاسخگوی تمام نیازها باشند. مثلاً این ماکروها نمیتوانند قبل از آنکه روی سلول
کاری انجام دهند، محتویات آن را چک کنند. همچنین نمیتوانند از وجود پنجرههایpop-up برای ارتباط با کاربر استفاده کنند. بنابراین باید برای رسیدن
به تمام مقصودهای خود، از راه دیگری استفاده کنید. یعنی ماکروهای موردنیاز خود را بنویسید که این مستلزم آشنایی شما با زبان اسکریپت اکسل و (VBA)
میباشد. در این مقاله سعی بر آن است با نوشتن یک ماکروی ساده شما را با قسمتی از اسکریپتنویسی آشنا کنیم.
منبع: پیسی مگزین
در این بخش طرز نوشتن ماکرویی را آموزش میدهیم که چند گزینه را به کاربر پیشنهاد میکند و سپس براساس انتخاب کاربر از گزینههای پیشنهادی، عمل مربوط
به هر گزینه را انجام میدهند. با این کار سعی میکنیم تا حدی با ماکرونویسی و اسکریپتنویسی آشناتر شویم.
در ساخت این ماکرو به شما میآموزیم که برای اجرا کردن یک دستور، چگونه از کلیدهایی مثل OK یا Cancel استفاده کنید. همچنین خواهید
آموخت چگونه یک فرم بسازید یا آن را کنترل کنید و محتویات آن را تحلیل نمایید. شما خواهید آموخت که چگونه محتویات سلولهایی را که انتخاب کردهایم، به
وضعیت دلخواه تغییر دهیم.
در خلال ساخت این ماکرو، با ارائه توضیحات کافی در هر مرحله، با خیلی از مسائل آشنا خواهیم شد. ماکرویی که در این مقاله قرار است نوشته شود، دادههای
هر سلول را، که از نوع String باشد، به حروف بزرگ یا کوچک یا ترکیبی از هر دو تبدیل خواهد کرد. (در اکسل توابعی نظیر UPPER یا
LOWER و PROPER وجود دارند که میتوانند حالت متن را تغییر دهند، اما برخلاف Word، هنگامی که متن را در سلولها وارد میکنیم، بهطور
مستقیم نمیتوانیم از آنها استفاده کنیم.)
بنابراین، موضوع خوبی وجود دارد که ما برای حل آن ماکرویی بنویسیم. پس ماکروی ما باید سه گزینه lower
(حروف کوچک) Upper (حروف بزرگ) یا Proper را به کاربر پیشنهاد کند و براساس انتخاب کاربر، حروف را تبدیل کند. تابع
اصلیای که به ما کمک میکند حالت متون را عوض کنیم، Strconv نام دارد که الگوی آن به این صورت است: (Strconv
(string, type of conversion
باید فرمی را درست کنیم که سه پیشنهاد مذکور را به کاربر ارائه دهد. اما باید به جای استفاده از کادرهای کنترلی
(check boxs)، از کلیدهای رادیویی استفاده کنیم. زیرا قرار است در هر لحظه تنها یکی از سه گزینه انتخاب شوند و نمیتوانیم بیش از یک گزینه
را انتخاب نماییم.
ساخت فرم
برای ساخت فرم باید در یک workbook جدید باشید و به منویTools/Macro/Visual Basic Editor مراجعه
کنید. در برنامه VBA Project Explorer باید یک work sheet جدید داشته باشید و بعد به منوی
Insert/userform بروید. برای آنکه این منو را بزرگ کنید، میتوانید از گوشه پایین سمت راست آن را بکشید. در ضمن اگر جعبه ابزار
را هم روی صفحه ندارید، روی آیکون Toolbox کلیک کنید تا جعبه ابزار نمایان شود.
با استفاده از کنترلهای Toolbox، یک کنترل Frame را روی دو سوم بالایی User form بکشید. سپس سه Option
Button را به فریم خود اضافه کنید. بعد دو Command Button را نیز به پایین آن اضافه کنید. فراموش نکنید شما برای ویرایش هر
یک از آیتمهایی که تاکنون به فریم خود اضافه کردهاید، اختیارات زیادی دارید و میتوانید، اندازه، مکان، نوع، و شکل آنها را به دلخواه خود تغییر دهید.
حالا روی هر آیتم کلیک کنید. User Form ،Frame و هر کلیدی که اضافه کردهاید و سایر تنظیمات را در Properties
Window اعمال کنید. (تنظیمات دیگر برای مراحل بعد باقی خواهند ماند).
فرم کامل شده شما در نهایت بسیار شبیه سایر منوها و فریمهای آفیس خواهد بود. ضمناً برای هر آیتمی که به فرم اضافه کردهاید، نامی در نظر بگیرید. زیرا
نامگذاری کنترلرها باعث میشود که در هنگام اسکریپتنویسی آنها را راحتتر با کدها تطبیق دهیم.
محتویات caption همان متنی است که هنگامی که اشارهگر ماوس روی هر آیتمی که قرار میگیرد ظاهر میشود. پس میتوان ید برای هر قسمت، متن
مربوط به آن را بنویسید.
محتویات جعبه Toolbox,چیزهای هستند که با آنها می توانید فرم خود را تهیه کنید و Properties اجازه میدهد آنها را چنان که باید به
نظر برسند، تنظیم کنید.
در قسمت Accelerator نیز میتوانید کاراکترهای موردنظر خود را با کلید Alt مرتبط کنید تا در فرمتان به عنوان کلیدهای میانبر مورد
استفاده قرار گیرد.
از دو کلید دستوری که به انتهای فرم اضافه کردیم، یکی کلید OK و دیگری کلید Cancel است. استفاده از کلیدCancel از دو جهت اهمیت
دارد: اول آن که باید برای آن ارزشی معادل True در نظر بگیریم تا باعث شود هنگامی که کاربر کلید Esc را فشرد، این کد اجرا شود و برنامه
بسته شود. همچنین باید Default را هم بهواسطه تعیین ارزش True برای کلید Cancel تعریف کنیم تا هنگامی که ماکرو اجرا
میشود، به طور پیشفرض کلید Cancel انتخاب شده باشد.
اینکه ماکروی شما مخرب نباشد، مسئله پراهمیتی است. بنابراین شما باید به گونهای ماکرو بنویسید که اگر در حین کار اشتباها کلیدی را زدید یا چیزی را وارد
کردید، اتفاق خاصی نیفتد. برای همین ما پیشفرض ماکرو را کلیدCancel در نظر گرفتیم تا اگر به اشتباه کلیدی زده شد، اتفاقی در محتویات
worksheet شما نیفتد. البته الزام دیگری نیز برای اینکار وجود دارد و آن فعال نبودن عمل undo است. در واقع اگر در حین اجرای یک
ماکرو، به منوی Edit/undo سری بزنید، خواهید دید که غیرفعال است.
از مبحث پیشفرض بودن یا پیشفرض شدن دو کلید ماکرو که بگذریم، باید به سه آیتم بالای آن یعنی low ،upper و proper هم سری بزنیم و
یکی از آنها را نیز بهعنوان پیشفرض ماکرو در نظر بگیریم. برای اینکه به اکسل بگوییم کدام یک از سه آیتم منظور ماست، باید برای یکی از آنها ارزش
بیشتری قائل شویم! به عبارت دیگر، باید ارزش یکی از آنها را معادل True در نظر بگیریم که با این کار بهطور خودکار ارزش سایر آیتمها برابر
false در نظر گرفته میشود. در حین تعیین کردن ارزش برای آیتمها، مطمئن باشید که در هر لحظه تنها یک آیتم را انتخاب کردهاید.
نوشتن کدها
پیش از اضافه کردن کدها به ماکرو، باید بدانیم کدام آیتم قرار است کاری انجام دهد. اگر در این ماکروها کاربر از سه آیتم دارای کلید رادیویی، یکی را انتخاب
کرد، قرار نیست اتفاقی بیفتد. در این ماکرو تنها آیتمهایی که اجازه دارند کاری انجام دهند، دو کلید OK و Cancel هستند.
کلید Cancel باید فرم ماکرو را از صفحه نمایش حذف کند (یعنی از برنامه خارج شویم) و کلید OK باید حالت متنهای سلولهای انتخابی را
براساس آنچه کاربر در بالای فرم انتخاب کرده است، تغییر دهد.
ابتدا از اضافه کردن کدها به کلید Cancel شروع میکنیم. برای باز شدن پنجره کدنویسی مربوط به کلید Cancel، دوبار روی آن کلیک کنید.
اشارهگر بین دو خط زیر خواهد بود:
Private sub cmdcancel – click()
End sub
و شما باید همانجا دو خط زیر را وارد کنید:
Unload Me
End
اکنون میتوانید این قست را با کلیک کردن روی فرم و انتخاب Run Sub/user Form تست کنید. حالت مطلوب در این بخش آن است که
اگر روی هر آیتمی کلیک کردید، تنها همان آیتم انتخاب شود و سایر آیتمها از حالت انتخاب خارج شوند. کلید OK نباید کاری انجامدهد و شما بتوانید با کلیک
کردن روی کلید Cancel یا فشار دادن کلید Esc، از برنامه خارج شوید.
حال روی کلید OK دوبار کلیک کنید. سپس دستورات لازم را میان دو عبارت Sub و End sub وارد کنید. (کد 1)
هنگامی که روی کلید OK کلیک میکنید، تابع if بررسی میکند که کدامیک از Option buttonها انتخاب شدهاند. اگر اولی انتخاب شده
باشد، متغیر convertChoice به ثابت ویژوال بیسیک یعنی vbUpperCase تبدیل میشود. اگر دومی انتخاب شده باشد، متغیر به
vbLowerCase تبدیل خواهد شد و اگر هیچ کدام (اولی یا دومی) انتخاب نشود، یعنی سومی را انتخاب کردهایم که بنابراین، متغیر به
vbProperCase تبدیل خواهد شد.
در این خط از اسکریپت (بعد از Else) علامت آپاستروف قرار داده شده است که نشان میدهد به طور پیشفرض این گزینه (گزینه سوم) انتخاب
شده باشد.
Else ‘opt Proper is selected
عبارت for به برنامه میگوید که تغییراتی را که در خطوط بالاتر اعمال کرده است، تنها برای سلولهایی در نظر بگیرد که یکبار انتخاب شدهاند و نوع
محتویات آنها هم String باشد.
بنابراین هر سلولی که محتوی دادههایی در قالب String باشد، به واسطه توابع Lower یا Upper یا Proper تبدیل خواهد شد و
خود این تبدیل، به واسطه آنچه که در متغیر convertchoice ذخیره شده است، اعمال خواهد شد. یعنی:
If var Type (cell.value) = vbstring then
Cell. Value = Strconv(Cell.Value, Convertchoice)
End If
وجود این چندخط خیلی ضروری است. در واقع If بررسی میکند که سلولهای انتخابی کاربر که جهت انجام تغییراتی به ماکرو معرفی شدهاند، حاوی
String هستند یا نه. به عبارت دیگر، اعمال تغییرات را فقط برای سلولهایی که محتوی String باشد، میسر میکند. اگر چه هر تلاشی
برای تبدیل اعداد با این تابع (strconv) عملی نخواهد بود زیرا تبدیل سایر دادهها یا فرمولها میتواند باعث آسیبدیدن محتویات هر سلول شود.
در انتهای نوشتن ماکرو خود چند خط دیگر نیز برای طریقه نشان دادن فرم روی صفحه و پیغامهای خطا و یا پرسشها باید به کدهای اصلی اضافه کنیم. تاکنون
ماکروی ما به عنوان ضمیمه User Form در حال کار بود. در صورتی که ماکرو باید بهطور مستقل اجرا شود. برای این منظور، به منوی
Insert/Module مراجعه کنید و خطوط زیر را در پنجره مربوط تایپ کنید.
این ماکرویی است که فرم را اجرا میکند. در ابتدا، ماکرو بررسی میکند که اصلاً سلول یا سلولهایی برای انجام تغییرات لازم انتخاب شدهاند یا خیر. اگر
حتی یک سلول هم انتخاب شده باشد، ماکرو اجرا، و فرم مذکور باز خواهد شد.
البته در حالتهای ترکیبی، ممکن است استفاده از “Range” مشکلاتی را به همراه داشته باشد، یا حتی ماکروی مربوطه به درستی کار نکند. انتخاب یک
تصویر از Clip-Art یا یک نمودار و مشابه آنها، جزء Range انتخابی شما نخواهد بود. بنابراین اگر در آیتمهای انتخابی شما چنین مواردی
باشد، متنی ظاهر خواهد شد و به شما پیشنهاد میکند که دوباره Range خود را انتخاب کنید. به این شکل:
”Please select a range and run the maro again”
پنجره حاوی این متن یک آیکون را متن پیام و یک کلید Ok برای تایید را نشان میدهد. برای امتحان ماکرویی که نوشتیم، در چند سلول، اطلاعات مختلفی، مانند
متن، اعداد و فرمول را در workbook خود وارد و آن را ذخیره کنید. سپس برخی از آن سلولها را انتخاب و ماکرو را اجرا
کنید(Tools/Macro/Macros). متون سلولها باید مطابق آنچه شما از سه گزینه ارائه شده انتخاب کردهاید تغییر کنند.
آن را برای همهجا آماده کنید
برای اینکه ماکرو برای تمام worksheet آماده کار شود، باید آنها را به فایل personal.als خودتان انتقال دهید. اگر یک فایل
Personal.als در Projcet Explorer نمایش داده نشود، به اکسل بازگردید و یک ماکروی کوچک
درTools/Macro/Record Macro ثبت کنید و در Personal Macro Workbook ذخیره نمایید. در واقع
ثبت یک ماکرو، تنها در این workbook تمام آن کاری است که برای ساخت یک Personal.als نیاز دارید.
حال برای آن که ماکرو را به Personal.als انتقال دهیم، باید Form ها و Modulel در یکProject
Explorer را بکشیم و روی فایل Personal.als بیندازیم.
اکنون ماکروی شما آماده است تا شما را در تمام worksheetها یاری دهد، و شما با رفتن به منوی Tools/Macro/Macros و
انتخاب نام و اعمال سایر تنظیمات در Option، میتوانید یک کلید میانبر برای اجرای آن تعریف کنید و حتی آن را به خط ابزار هم اضافه نمایید.
دوباره معجزه آب و آفتاب و زمین
شکوه جادوی رنگین کمان فروردین
شکوفه و چمن و نور و رنگ و عطر و سرود
سپاس و بوسه و لبخند و شادباش و درود
دوباره چهره نوروز و شادمانی عید
دوباره عشق و امید
دوباره چشم و دل ما و چهره های بهار
هفت سین
جهت انجام کارهای تکراری از حلقه ها استفاده می شود. در ابتدا با حلقه های Forشروع می کنیم .
ساختار کلی این حلقه به شکل زیر ا ست:
For counter= start To end [Step step]
دستورات
Next [conter]
مثال : برنامه ای می نویسیم که سلولهای ناحیه A1 تا A10 را به صورت یکی درمیان پر نماید:
جهت نیل به این هدف از فرمول زیر استفاده می شود:
For i=1 to 10 step 2
Cells(1,i)=i
Next i
به همین ترتیب و با استفاده از تکنیک step در حلقه ها می توان از اعداد زوج با step 2 و اعدادفرد با step یک یا سه بهره جست.
حلقه های تو در تو
با استفاده از چندین حلقه for می توان امور تکراری پیچیده تر و بیشتری را انجام داد.
در مثال زیر تلاش ما بر این است که یک جدول ضرب 10*10 در محیط اکسل ایجاد نماییم.
برای رسیدن به این منظور به راحتی و با استفاده از 2 حلقه می توان این برنامه را به شکل زیر نوشت:
Sub ZARB()
For i = 1 To 10
For J = 1 To 10
Cells(i, J) = i * J
Next J
Next i
End Sub
استفاده از ساختارهای شرطی در حلقه ها
حال می خواهیم که در همین جدول مضارب 5 را با تغییر فونت مشخص نماید:
برای این منظور باید بعد از سطر چهارم برنامه خط زیر را نوشت:
If i = 5 Or j = 5 Or i=10 or j = 10 Then
Cells(i, j).Font.Size = 25
End If
می توان در برنامه موجود کار پیغامی مبنی بر اینکه آیا مایل به ذخیره نمودن برنامه هستید یا خیر، پس از if برنامه ایجاد نمود.
برخی کاربردهای حلقه For
شمارنده(COUNTER)
در جلسات گذشته دیدیم که برای جمع نمودن تعداد داده های موجود در یک سطر یا یک ستون از فرمول =COUNT( ) در یک سل از سلهای اکسل استفاده می شود. در این مرحله میخواهیم با استفاده از متغیری تحت عنوان شمارنده (یا (COUNTER، عمل شمارش را انجام دهیم.
بدین منظور ابتدا باید مقدار شمارنده را برابر صفر گذاشته و در مرحله بعدی پس از گذاردن شرط برنامه، به شمارنده یک واحد یا هر مقداری که لازم باشد اضافه یا کم می کنیم.
مثال : نمرات دانش آموزان یک کلاس در ستون اول یک شیت وجود دارد. می خواهیم برنامه ای بنویسیم که تعداد افرادی که قبول شده اند و تعداد افرادی که قبول نشدهاند را در یک سطر اکسل نوشته و خود نمرات را نیز برحسب قبولی و یا رد شدن افراد تغییر رنگ دهد.
برای نیل به این هدف ازیک متغیر به نام c به عنوان شمارنده استفاده می کنیم. سپس از یک حلقه FORو یک شرط IF استفاده نمایم. لذا برنامه به شکل زیر نوشته می شود:
Sub example1()
c = 0
For i = 1 To 20
If Cells(i, 1).Value >= 10 Then
sum = sum + 1
Cells(i, 1).Font.ColorIndex = 5
Else
Cells(i, 1).Font.ColorIndex = 3
End If
Next i
Cells(21, 1).Value = c
Cells(22, 1).Value = 20 - c
End Sub
همانطور که ملاحظه شد، برنامه در ابتدا برای مقدار متغیر c عدد صفر را در نظر دارد. همانطور که هر سطر جدول با شرط خط چهارم بررسی می شود و چنانچه واجد این شرط بود(اعداد بزرگتر از 10) یک شماره به شمارنده اضافه می گردد و همانطور تا اتمام برنامه این عملیات بروزرسانی شمارنده ادامه پیدا می کند.
انباره (accumulator)
در این مرحله می خواهیم پروسه جمع نمودن اعداد یک سطر یا یک ستون و یا اعدادی که مورد توجه برنامه می باشند را مد نظر قرار دهیم. به عنوان مثال می خواهیم برنامه ای بنویسیم که اعداد فرد 1 تا 100 را جمع نموده و نتیجه را در سلول B1 تایپ نماید.
برای این منظور می بایست متغیری مانند Sumرا در نظر گرفت و حاصلجمع را مرتبا در آن انبار کنیم برای نیل به این منظور می بایست برنامه ای به شرح زیر نوشت:
Sub aaa()
Sum = 0
For i = 1 To 100 Step 2
Cells(i, 1) = i
Sum = Sum + i
Next
Cells(1, 2) = Sum
End Sub
نکته: به عبارت sum=sum+i توجه کنید. در نوشتن یک شمارنده ما به مقدار قبلی شمارنده یک (1 ) اضافه می کردیم.
ولی در این برنامه با توجه به شرایط بوجود آمده مقدار دیگری مانند i همواره به sum اضافه می شود.
نویسنده: علی فاتحی
فرض کنید در محیط نرمافزار Microsoft Excel با استفاده از سلولهای موجود یک ستون تشکیل دادهاید. حال اگر قصد بخواهید این ستون را مستقیماً تبدیل به یک سطر کنید چه میکنید؟ یا فرض کنید قصد دارید محتویات یک سطر را به یک ستون تبدیل کنید. در این ترفند قصد داریم نحوه انجام این کار را که بسیار ساده انجام میشود را برای شما بازگو نماییم. این ترفند بر روی کلیه نسخههای Excel امکانپذیر است.
برای این کار:
ابتدا Microsoft Excel را اجرا نمایید.
سپس سلولهای مربوط به ستون یا سطر را با استفاده از ماوس به حالت انتخاب دربیاورید.
بر روی یکی از سلولهای انتخاب شده راست کلیک کنید و Copy را انتخاب نمایید (میتوانید از کلیدهای ترکیبی Ctrl+C نیز استفاده کنید).
اکنون بر روی یک سلول خالی راست کلیک کنید و گزینه Paste Special را انتخاب نمایید.
در پنجره باز شده، تیک گزینه Transpose را بزنید و بر روی دکمه OK کلیک کنید.
خواهید دید که در محلی که سلول خالی را انتخاب کرده بودید سلولها از سطر به ستون (یا بلعکس) تغییر حالت دادهاند.
در صورت لزوم میتوانید ستون یا سطر قبلی را پاک کنید، یا در مرحله اول به جای Copy گزینه Cut را انتخاب نمایید.
به نقل از ترفندستان