مجموعه آفیس مایکروسافت (MicroSoft Office) از پرکاربردترین و مهمترین مجموعه نرم افزار رایانه ای در جهان است که یکی از نرم افزار های پر کاربرد آن، نرم افزار اکسل (Excel) است. مدارس و دانشگاهها، ادارات دولتی و خصوصی، فروشگاهها، کاربران عادی و بسیاری دیگر از این نرم افزار استفاده می کنند. در اکسل به دو شیوه می توان داده ها را مدیریت و برنامه ریزی کرد یکی روش فرمول نویسی و دیگری برنامه نویسی، که در این مطلب قصد داریم درمورد برنامه نویسی در اکسل با VBA، صحبت کنیم. پس با ما همراه باشید.
VBA چیست؟
VBA مخفف Visual Basic for Applications یک زبان برنامه نویسی است که در مجموعه برنامه های آفیس استفاده می شود. همین جا باید متذکر شویم که VBA در نرم افزارهای تخصصی دیگر از جمله AutoCad، ARCGIS و غیره نیز قابل استفاده است.
این زبان در واقع زیر مجموعه ای از Visual Basic 6.0 است که شباهت هایی هم به زبان VB دارد اما این دو از یکدیگر جدا بوده و زبان های برنامه نویسی متفاوتی هستند. زبان VB بیشتر برای توسعه برنامه دسکتاپ مورد استفاده قرار می گیرد، در صورتی که از زبان VBA فقط می توانیم در محیط برنامه های دیگر نظیر اکسل، استفاده کنیم.

کاربرد VBA در اکسل
در اکسل کار های متنوعی می توان انجام داد از جمله ذخیره اطلاعات مشتری، ذخیره نمرات دانش آموزان و دانشجویان، تحلیل علمی داده ها، ایجاد نمودار از پایگاه داده، ایجاد فرم ها، بودجه بندی و پیش بینی های مالی و موارد بسیار دیگری که می توانیم نام ببریم.
در تمامی موارد ذکر شده می توان با استفاده از زبان VBA در اکسل کدی نوشت که قسمتی از اکسل، کاری را به صورت خودکار انجام دهد و لازم نباشد کاربر خود به صورت دستی همان کار را انجام دهد. به عنوان مثال می توان یک برنامه ثبت سفارش خرید و فروش کالا را با خروجی های مختلف ایجاد کرده و اطلاعات را ساماندهی و گزارش های ماهیانه و سالیانه تهیه کرد.
VBA در اکسل، به طور خودکار اکسل را نرم افزار میزبان فرض می کند و دیگر لازم نیست در ابتدای کدها حتما نوع نرم افزار (به عنوان مثال ورد، اکسل، پاورپونت و ...) را مشخص کنیم. به جز مواردی که بخواهیم از طریق برنامه نویسی در اکسل، نرم افزار های دیگری را کنترل کنیم.
مزایای استفاده از VBA چیست؟
تقریبا هر کاری را که در اکسل انجام می دهیم، می توانیم روال انجام آن را بصورت خودکار کنیم. برای این کار، باید دستورالعمل هایی را وارد کنیم که اکسل انجام دهد. خودکارسازی کار در اکسل با استفاده از زبان VBA مزایای مختلفی دارد از جمله می توان به موارد زیر اشاره کرد:
اکسل همیشه کار را به همان روشی که برنامه نویسی کردیم، انجام می دهد که این باعث ثبات در کارها می شود.
سرعت انجام کارها در اکسل بالاتر از انجام کار به شیوه دستی می شود.
اگر یک برنامه نویس خوب ماکرو باشیم، اکسل اغلب کارها را بدون خطا انجام می دهد.
اگر دستورات به درستی نوشته و تنظیم شده باشد، هر کاربر آشنا به اکسل می تواند کارها را در اکسل با اجرای ماکرو انجام دهد.
با برنامه نویسی VBA ما می توانیم کارهایی را در اکسل انجام دهیم که امکان انجام آن به صورت دستی غیرممکن است و این می تواند ما را تبدیل به یک فرد محبوب در محل کار کند.
برای انجام کارهای طولانی و وقت گیر، دیگر نیازی نیست دائم جلوی رایانه خود بنشینیم و خود را خسته کنیم، بلکه اکسل خود همه کارها را بصورت اتوماتیک در حالی که ما در حال استراحتیم، انجام می دهد.

معایب استفاده از VBA
هر کاری که مزایا دارد، معایبی هم به همراه خواهد داشت. چند مورد از معایبی که برنامه نویسی در اکسل دارد از این قرارند:
ما برای نوشتن برنامه خود در اکسل باید برنامه نویسی با VBA را بلد باشیم. البته یادگیری آن سخت نیست.
سایر افرادی که می خواهند از برنامه های ما استفاده کنند، لازم است که نرم افزار اکسل را روی سیستم خود داشته باشند و امکان ارائه برنامه ها به صورت مستقل وجود ندارد.
گاهی اوقات برنامه VBA طبق خواست ما کار نخواهد کرد و در انجام کارها و محاسبات اشتباهی رخ می دهد که در این مواقع باید به دنبال اشکال زدایی و رفع مشکلات احتمالی باشید.
همانطور که می دانید مایکروسافت دائما در حال ارتقا مجموعه نرم افزار های خود از جمله اکسل است. حتی اگر مایکروسافت تلاش زیادی برای سازگاری بین نسخه های مختلف اکسل انجام دهد، ممکن است در مواردی کد VBA ما، روی نسخه های قبلی یا بعدی اکسل به درستی کار نکند.
چگونه می توان با VBA در اکسل برنامه نویسی کرد؟
در ادامه سعی می کنیم با یک مثال ساده، شما را با نحوه برنامه نویسی در اکسل آشنا کنیم. در برنامه ی ما، فرمی نمایش داده می شود و نام کاربر را می پرسد، سپس کاربر با واردکردن نام خود، پیغامی دریافت می کند.
مبانی اولیه برنامه نویسی VBA
قبل از اینکه بتوانیم کدنویسی را آغاز کنیم، نیاز داریم کمی با اصول اولیه برنامه نویسی آشنا شویم. مبانی زیر برای شروع کار به ما کمک می کند:
متغیر (Variable): در مدرسه عبارت (x+2y) را به ما می دادند و می گفتند جواب را در صورتی x = 1 و y = 3 باشد را پیدا کنید، در این عبارت x و y متغیر هستند. همانطور که در مثال وجود دارد به متغیر ها هر عددی مثلا همین 1 و 3 را می توان اختصاص داد، یا آنها می توانند به ترتیب 2 و 4 تغییر کنند. متغیر ها به طور خلاصه محلی در حافظه هستند.
قوانین نامگذاری متغیر ها
از کلمات رزرو شده نمی توان به عنوان اسم متغیر، استفاده کرد: اگر فرضا ما دانشجو باشیم نمی توانیم از عناوین استاد یا مدرس استفاده کنیم، زیرا این عناوین مختص استادان و مسئولان دانشگاه است. در VBA نیز بعضی کلمات که معنی ویژه ای دارند به عنوان کلمات رزرو شده تعیین شده اند و ما نمی توانیم از آنها به عنوان نام متغیر استفاده کنیم.
در نام متغیر نمی توان از فاصله استفاده کرد: ما نمی توانیم دو کلمه جدا شده از هم را بعنوان نام متغیر استفاده کنیم. به عنوان مثال first number صحیح نیست و باید برای نامگذاری به این صورت firstNumber یا first_number استفاده کنیم.
از اسامی توصیفی برای نامگذاری استفاده کنید: بسیار وسوسه انگیز است که نام متغیر خود را variable بگذاریم اما باید از این کار اجتناب کنیم. بهتر است از نام های توصیفی مانند رنگ، قیمت، جنس و غیره استفاده کنیم که تاثیر فراوانی در خوانایی کد VBA ما دارد.
عملگر های حسابی: این عملگرها برای محاسبات استفاده می شوند و از اولویت عمگرها یا قوانین BODMAS که مخفف انگلیسی کلمات براکت ها، تقسیم، ضرب، جمع و تفریق است، تبعیت می کنند. بنابراین به یاد داشته باشید هنگام کار با عبارتی که حاوی چندین عملگر حسابی است، از این قوانین برای اولویت عملگر استفاده کنید.
+ برای اضافه کردن
– برای تفریق
* برای ضرب
/ برای تقسیم
عملگر های منطقی – بر روی عبارات منطقی اعمال می شود و نتیجه یا درست (True) یا نادرست (False) است. از این عملگرها برای شرط ها استفاده می شود.
If statements
OR
NOT
AND
TRUE
FALSE
دسترسی به گزینه های توسعه دهنده را فعال کنید
برای استفاده از VBA در اکسل باید گزینه توسعه دهنده را فعال کنیم تا زبانه Developer برای ما نمایش داده شود که برای این کار از طریق منوی File به بخش Options می رویم و سپس گزینه Ribbon Customize را کلیک می کنیم.
ضمنا می توانیم به صورت میانبر روی هر کدام از زبانه ها راست کلیک کنیم و گزینه Customize the Ribbon کلیک کنیم. در بخش Ribbon Customize از قسمت Main Tabs گزینه Developer را فعال می کنیم.

سلام VBA
اکنون نحوه کد نویسی در VBA را بررسی می کنیم. تمام برنامه VBA باید با “Sub” شروع و با “End Sub” پایان یابد. در کنار sub نامی که می خواهیم به برنامه اختصاص دهیم نوشته می شود. تکه کد زیر، پایه تمامی کدهایی هست که خواهیم نوشت.
Sub name()
.
.
End Sub
ساخت یک دکمه در اکسل
یک WorkBook جدید باز می کنیم و به زبانه Developer می رویم و از قسمت Controls روی جعبه کشویی Insert کلیک می کنیم و دکمه فرمان را مطابق تصویر انتخاب می کنیم.

می توانیم دکمه ایجاد شده را به هر کجا که خواستیم منتقل کنیم. بعد از تثبیت دکمه، پنجره محاوره ای زیر نمایان می شود.

نام ماکرو را به btnHelloWorld_click تغییر می دهیم و روی گزینه New کلیک می کنیم که پنجره کد نویسی نمایش داده می شود.
کد های دستورالعمل زیر را وارد می کنیم
Dim name As String
name = InputBox(“لطفا نام خود را وارد کنید”)
MsgBox “ سلام” + name
که در اینجا:
" Dim name As String" متغیری به نام name ایجاد می کند. متغیر متن، عدد و سایر کارکترها را می پذیرد، زیرا ما آن را به عنوان رشته تعریف می کنیم.
" name = InputBox(“لطفا نام خود را وارد کنید”)" تابع ساخته شده InputBox را فراخوانی می کندکه یک پنجره را با عنوان لطفا نام خود را وارد کنید، را نمایش می دهد. سپس نام وارد شده در متغیر name ذخیره می شود.
" MsgBox “ سلام” + name" تابع ساخته شده MsgBox را فراخوانی می کند تا سلام به همراه نام وارد شده را در کادر نمایش دهد.
پنجره کامل شده کد کامل باید به شکل زیر باشد

پنجره کد را می بندیم و بر روی Button 1 راست کلیک کرده و Edit text را انتخاب می کنیم و نام آن را به "گفتن سلام" تغییر می دهیم. اکنون روی دکمه گفتن سلام کلیک می کنیم و در کادر ورودی نام خود را وارد کرده و تایید می کنیم. با انجام این کار، کادر پیغام سلام نمایش داده می شود.

خب تبریک! ما موفق شدیم اولین برنامه خود را با VBA در اکسل بنویسیم. این فقط یک مثال ساده بود که جهت آشنایی شما با این زبان برنامه نویسی آورده شد. VBA به قدری قدرتمند است که می توان برنامه های بسیار پیچیده ای در آن کد نویسی کرد.
جمع بندی
با توجه به طیف گسترده ی کاربران اکسل و نیز کاربردی بودن آن، لزوم خودکارسازی کارها در اکسل به شدت احساس می شود. زبان برنامه نویسی VBA با قدرت و توانایی هایی که دارد، توانسته در محیط اکسل، امکاناتی برای کاربران مهیا کند که آنها را از انجام کارهای تکراری و پیچیده خلاص کند.
ما در این مقاله گفتیم که VBA چیست و چه مزایا و معایبی دارد. با یک مثال خیلی ساده، شما را با محیط کدنویسی VBA آشنا کردیم و این می تواند شروعی برای کارهای بزرگتر باشد. هر فردی که علاقمند به مباحث اکسل و برنامه نویسی در اکسل است، می تواند با مراجعه به منابع آموزشی فراوانی که برنامه نویسی VBA دارد، آغاز به برنامه نویسی در این حوزه کند.
شما تا به حال با VBA برنامه نویسی کرده اید؟ نظر شما درمورد این زبان برنامه نویسی چیست؟
دستت درد نکنه خیلی زیبا و روان و گویا توضیح دادی
ممنونم. عالی بود. می خوام ادامه بدم.
سلام
ممنونم خیلی خوب بود
فقط بمن میگفت کامپایل ارور؟!!!!
بعدم اینکه موقع نوشتن کد فارسی قبول نمیکرد!!!
چکنم؟
ممنون
با سلام و تشکر
سوالی داشتم
یک برنامه مالی روی اکسل نوشته شده. جمع برخی از ستون ها رو اعلام نمیکنه در صورتی که دستور آن کاملا شبیه ستون کناری آن است (با تفاوت شماره ستون و ردیف)
سلام.
احتمالا برنامه تون از حلقه برای جمع ستونها و ردیفها استفاده کردید و شماره ردیف و ستون تون در برخی جاها در حلقه پوشش داده نمیشه. برای مثال ممکنه گفته باشید از ردیف 1 تا 12 رو جمع بزن اما چیزی کد روش اجرا میشه، از 0 شروع میشه.
چون خیلی منشا خطا مشخص نیست، توصیه میکنم از روشهای دیباگ برنامه VBA استفاده کنید. ما مقاله ای رو در مورد این روشها در تقویم کاری داریم اما اگر نیاز فوری دارید، در اینترنت سرچ بزنید آموزش فارسی پیدا میکنید.
تشکر از شما بابت آموزش vba برای شروع کارهای بزرگ تر
خیلی عالی بود، ممنون.
سلام ممنون بابت اموزش vba بسیار کاربردی و عالی بود
فقط یه سوال ایا امکانش هست تو اکسل کلیدی نوشته بشه که چنتا از سلول ها رو باهم پاک کنه یا به جای محتویات همشون عدد خاصی بزاره؟
مثلا وقتی رو اون کلید کلیک میکنیم سلول های مدنظر خالی بشن
درود.
بله این کار با یک شرط به راحتی قابل انجام هست. برای مثال برای پاک کردن یک سلول میتونید این لینک رو مطالعه کنید.
خیلی خوب بود حتما ادامه میدم
ممنون که با ما همراه هستید :)
اموزش مفید و کاربردیی بود، سپاس فراوان، کاش منابع اموزشی کاملترشو معرفی میکردین، ممنون
درود
بنظرم سایت guru و همچنین tutorialspoint رو پیشنهاد میکنم.
سلام، چطور فونت فارسی به ویژوال بیسیک اضافه کنم،
سلام
اول فونت فرم رو یک فونت فارسی مثل Tahoma انتخاب کنید و چک کنید که در پنجره properties خاصیت فونت اسکریپنش عربی باشه. همچنین سیستمتون باید از زبانهای راست به چپ و یونیکدها ساپورت کنه. پس دقت کنید که ریجن سیستم تون و تنظیماتش منطبق با فارسی باشه و یدور سیستم رو ریست کنید.
بعد اگر همچنان جملات براتون درست نمایش نمیشه، از منوی بالایی Tools - گزينه Options - برگه Editor Format - قسمت Font: فونت رو به Courier new (Arabic) تغيير بدید و ok رو بزنید که سیو بشه. بعد برای اطمینان یدور ادیتور رو ببندید و باز کنید تا تغییرات اعمال بشه.
سلام
سپاس فراوان
یه سوالی داشتم
میشه در اکسل طوری برنامه نویسی کنیم که مثلا اگر فلان خانه و فلان خانه رنگش سبز بود فلان خانه رنگش سبز شود؟
درود
بله امکان پذیر هست. برای این کار کافیه مراحل زیر رو طی کنید:
1. با Cell.Interior.Color رنگ دو خانه مورد نظر رو بگیرید.
2. با یک شرط بررسی کنید که آیا این دو سبز هستند یا نه.
3. اگر شرط برقرار بود خانه هدف رو سبز کنید. برای مثال کد زیر خانه A1 رو آبی میکنه:
Range("A1").Interior.ColorIndex = 37
با سلام
من یک فایل اکسل با تاریخ های زیاد دارم
میخوام آخرین تاریخ ثبت شده در یک فایل اکسل دیگه به صورت اتومات ثبت و آپدیت بشه
آیا کار زیادی میبره؟ خیلی کلی ممنون میشم راهنماییم کنید
درود
متاسفانه متوجه منظورتون نشدم. یعنی قصد دارید یه سلول رو از یک اکسل به دیگری کپی کنید؟ چرا سورت نمیکنید و بعد دستی کپی کنید؟
این لینک رو هم ببینید.