4.5/5 - (11 امتیاز)

اگر با ما در دوره ماکرونویسی در اکسل همراه بوده باشید، حتما اطلاع دارید که ما از مباحث بسیار مقدماتی و پایه ای در زمینه ماکرونویسی و برنامه نویسی VBA در اکسل شروع کردیم و حال میتوانیم با درک صحیح تری نسبت به مسائل مقدماتی در زمینه کدنویسی در اکسل، مباحث فنی را در این زمینه شروع کنیم.

در چند قسمت آینده ، ما بر روی نحوه استفاده از کدهای ضبط شده توسط ماکرو رکوردر و ایجاد تغییر بر روی این کدها تمرکز خواهیم کرد. به همین منظور در چند قسمت آینده مسائل زیر به صورت مفصل مورد بررسی قرار خواهد گرفت.

  • متغیرها
  • حلقه ها
  • استراتژی مناسب برای ضبط کدهای مناسب
  • پاکسازی و تصفیه کدهای ضبط شده
  • استفاده از یک macro book شخصی سازی شده

به منظور تشریح موضوعات بالا از مثال های واقعی و کاربردی استفاده خواهیم کرد تا درک عملی تری نسبت به ماکرونویسی بدست آورید. مستقیما به سراغ اولین مفهوم از موضوعات گفته شده در بالا یعنی متغیرها می رویم .

فیلم آموزشی تعریف متغیر در ماکرونویسی اکسل

اگر به دیدن فیلم های آموزشی علاقمند هستید، توصیه می کنیم حتما قبل از مطالعه ادامه مطلب فیلم آموزشی تعریف متغیر در ماکرونویسی و برنامه نویسی وی بی ای رو مشاهده کنید.

مفهوم متغیر(variable) در ماکرونویسی

متغیرها قطعه هایی از کد هستند که ما را ذخیره اطلاعات و اشیاء یاری میکنند. اساسی ترین مشخصه های متغیرها عبارت هستند از :

  • نام متغیر(Name): برای هر متغیر یک نام منحصر به فرد تعیین میشود که در زمان های مورد نیاز متغیر مورد نظر با استفاده از این کد فراخوانی میشود.
  • نوع متغیر(type): برای هر نوع اطلاعات نیاز به تعریف نوعی خاص از متغیر است. به عبارت دیگر متغیرها در ماکرونویسی انواع مختلفی دارند که هر کدام از آنها میتوانند نوع خاصی از اطلاعات را ذخیره سازی کنند.

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

تعریف متغیر در برنامه نویسی VBA

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

Dim [نام متغیر] As [نوع متغیر]

برای مثال اگر بخواهیم متغیری برای شمارش تعداد ردیف های ورک شیت تعریف کنیم، به شکل زیر این کار را انجام میدهیم:

Dim rowsInWorksheet As Long

Long نوعی از متغیر است که در زیر به صورت کامل انواع متغیرها در ماکرونویسی را توضیح خواهیم داد. در اینجا نام متغیر Rowsinworksheet قرار داده شده است.

انواع متغیرها در ماکرونویسی

متغیرهای عددی

Byte(اندازه حافظه: 1 بایت):  یک عدد صحیح بین 0 تا 255

Integer(اندازه حافظه:2 بایت): یک عدد صحیح بین -32768 تا 32767

Long(اندازه حافظه: 4 بایت): یک عدد صحیح بین -2,147,483,648 تا 2,147,483,648

Single(اندازه حافظه: 8 بایت):

  • یک عدد منفی بین -3.402823E+38 تا -1.401298E-45
  • یک عدد مثبت بین 1.401298E-45 تا 3.402823E+38

Double(اندازه حافظه:8 بایت):

  • یک عدد منفی بین -1.79769313486232e+308  تا -4.94065645841247E-324
  • یک عدد مثبت بین 4.94065645841247E-324 تا 1.79769313486232e+308

Currency(اندازه حافظه: 8 بایت): عددی بین 1.79769313486232e+308 تا 922,337,203,685,477.5807

Decimal(اندازه حافظه:8 بایت):

  • بدون اعشار +/- 79,228,162,514,264,337,593,543,950,335
  • با اعشار +/- 7.9228162514264337593543950335.

Boolian : این متغیر صرفا میتواند مقادیر 0 و 1 یا true/false را بگیرد.

Date(اندازه حافظه:8 بایت):  1 ژانویه 0001 تا 31 دسامبر 9999 که به صورت عدد ذخیره میشود.

انواع متغیرهای غیر عددی

متغیرهای غیرعددی عموما شامل مقادیر متنی میشوند و نمیتوان از آنها در محاسبات استفاده کرد.

String( اندازه حافظه بستگی به طول رشته متنی دارد)

  • این متغیر برای رشته های متنی با طول ثابت میتواند بین 1 تا 65400 کاراکتر داشته باشد و
  • برای رشته های متنی با طول متغیر میتواند بین 0 تا 2 میلیارد کاراکتر را بپذیرد.

برای تعریف یک رشته با طول ثابت از “String * n” استفاده میشود که منظور از n  طول رشته می باشد.

Object( اندازه حافظه: 4 بایت): این متغیر شامل آدرس یا محل اشیاء میشود.

دیگر انواع متغیرها

Variant: این متغیر می تواند تمام انواع داده ها را به جز رشته های با طول ثابت را بپذیرد. میتوان حدس زد که متغیر variant کاربردهای فوق العاده ای در ماکرونویسی دارد و در آینده بسیار بیشتر از این متغیر خواهید شنید.

قواعد نام گذاری متغیرها در برنامه نویسی وی بی ای

  • نام متغیر می بایست کمتر از 255 کاراکتر داشته باشد.
  • نام متغیر صرفا میتواند شامل حروف، اعداد و آندرلاین باشد( نمیتوان از فاصله، نقطه یا کاراکترهای دیگر استفاده کرد)
  • نام متغیر می بایست همیشه با حروف شروع شود.
  • نمیتوان از کلمات و حروف رزرو شده در زبان برنامه نویسی VBA استفاده کرد. توضیح اینکه بعضی از کلمات در زبان وی بی ای برای انجام کارهای خاص رزرو شده اند یا جز< اصطلاخات اختصاصی وی بی ای هستند و شما نمیتوانید از این کلمات در تعریف متغیر استفاده کنید.

مقدار دادن به یک متغیر

ما تاکنون متغیر را تعریف کردیم ولی این متغیر هنوزه خالی است و مقدار ندارد. برای مقدار دادن به متغیر می بایست ابتدا بدانیم متغیر از چه نوعی است

برای تمام متغیرها به جز object میتوانید به صورت زیر مقدار دهی کنید:

Dim myNumber As Integer

myNumber = 500

برای object که مکان متغیر را مشخص میکند می بایست به صورت زیر مقداردهی کنید:

Dim myWorkbook As Object

Set myWorkbook = ThisWorkbook

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

مشترک شدن
Notify of
guest

27 نظرات
نظردهی درون متنی
مشاهده همه نظرات
پدرام

پیدا کردم ممنون

پدرام

سلام
چطور می توان برای مقدار دادن به متغیری مثلا n از نوع intiger در vba مقداری از دادخل سلول اختصاص داد تا در حلقه تکرار for i=1 to n استفاده کرد

امیر دایی

سلام
با استفاده از کد زیر می تونید مقدار رو از داخل یک سلول بگیرید:

range("A1").value
حانیه

سلام چجور میتونم از یه سلول، یه عددیو بخونم به تعداد همون عدد تو یه شیت دیگ یه اسم چاپ کنم؟

امیر دایی

سلام
از حلقه های در برنامه نویسی vba استفاده کنید.
آموزش برنامه نویسی وی بی ای در اکسل

دانشجو

سلام برای نوشتن اینکه در کادر فقط حروف فارسی نوشته شود دستور چی میشه؟

امیر دایی

سلام این آموزش رو توی یوتیوب ببینید و ایده بگیرید:
https://www.youtube.com/watch?v=K8SjVGl4NlI

محمد

سلام می خواستم بدونم در اکسل فرمولی هست که دو تا متغییر رشته ای رو در دو ستون مختلف در یک ستون بیاره .مثلا ستون a نام و ستون b نام خانوادگی باشدستون c نام و نام خانوادگی با هم بیاد.

امیر دایی

سلام
توی اکسل با علامت & می تونید رشته ها رو به هم بچسبونید. کافی هست توی سلول C2 این فرمول رو بنویسید:

=A2&B2
هادی

باسلام/ من یک شیت بنام Sheet1 دارم که دیتاهای آن روزانه تولید میشوند و در سلولهای مربوطه قرار میگیرند. این شیت 500سطر و 45 ستون دارد که داده های هر سطر آن بایستی روزانه بطور خودکار به 500 شیت مربوطه که از Sheet2 تا Sheet501 نامگذاری شده اند، منتقل گردند و در سطر آخر هر شیت نوشته شوند. برای این کار، با کمک یک ماکرو و استفاده از یک جدول راهنما ، در ستون 46 هر سطر Sheet1 ، نام شیتی که بایستی دیتاهای آن سطر در آن نوشته شوند بطور خودکار درج میگردد. مشکلی که دارم این است که… مطالعه بیشتر »

امیر دایی

سلام
شما نیاز نیست برای اینکه یک مقدار رو در یک شیت کپی کنید حتما اون شیت رو فعال کنید به کمک دستور زیر و با تغییر قسمت نام شیت می تونید مقدار رو در سلول مثلا A1 قرار بدید:

=sheets("sheet1").range("A1") = 10
عاطفه صالحی

ممنون از توضیحاتتون ببینید من می خوام یه اکسل برای غذای پرسنل ایجاد کنم اسامی به صورت روزانه توسط کاربر انتخاب میشه اسامی داخل سیستم هست فقط تیک می خوره وانتخاب میشه
در شیت اخر اسامی را به صورت سالانه می خوایم اطلا عات به صورت روزانه وارد میشه ولی ثبت نمی شه من می خوام اطلاعات هر روز ذخیره بشه حالا دارم یک فرمولی مینویسم که تاریخ امروز بگیره با شیت آخر مقایسه کنه و هرجا پیداش کرد تا آخر همون ستون کپی وپیست کنه چون من می خوام تابع را به صورت رنج قرار بده به مشکل خوردم

امیر دایی

امیدوارم که منظورتون رو درست متوجه شده باشم. شما می تونید از Range استفاده کنید. در این تابع سلول اول و سلول آخر رو مشخص می کنید و برای شما اون بازه رو انتخاب میکنه. مثلا شما می خواید سلول A1:A80 رو انتخاب کنید. کافیه بنویسید range(“A1:A80”). حالا شما توی موضوعی که توضیح دادید میخواید 80 رو به صورت اتوماتیک بر اساس مقدار یک سلول در یک ستون پیدا کنه. در اینجا کافی هست از تابع match استفاده کنید. یک متغییر به نام findLocation تعریف می کنید و به این صورت تابع رو می نویسید: findLocation = Match(range("B3"),range("A:A"),0) توی این… مطالعه بیشتر »

عاطفه صالحی

سلام
می خواستم ببینم یک تابع مثل INDIRECTوTEXT می شه تو یک متغیر بریزیم؟ اگه میشه با کدوم یکی از متغیر های بالا. من می خوام از این توابع به صورت رنج باشه

امیر دایی

سلام
به جای اینکه راهکار خودتون رو توضیح بدید، بهتره مسئله و کاری که میخواید انجام بدید رو توضیح بدید. شاید راهکار ساده تری داشته باشه.
به صورت کلی هم لازم نیست در وبی بی ای تایپ متغییر رو تعریف کنید. می تونید مستقیم مقدار مورد نظر یا حاصل یک تابع رو به متغییر بدید.

سمیرا

سلام ممکنه به من بگید اگر بخوام توی اکسل فرمولی بنویسم بر اساس اینکه : به ازای هر 1عددی که به 105 اضافه بشه اون عدد در 30 ضرب بشه رو چطوری بنویسم؟

امیر دایی

سوالاتون واضح نیست. دقیق تر و با مثال توضیح بدید.

سارا

سلام من میخوام از کاربر به صورت msgbox کدملی را بگیرد و سپس روی آن جمع و ضرب هایی را اعمال کند که طبیعتا وقتی دارم از کاربر میگیرم باید استرینگ باشه اما چجوری اینو به یه ارایه نسبت بدم که بتونم از خونه های اون ارایه استفاده کنم؟

امیر دایی

سلام
شما با استفاده از input باید مقدار رو از کاربر بگیرید یا اینکه یه فرم بسازید و مقدار از کاربر دریافت کنید. اگر کاربر همه کاراکترها رو عددی وارد کرده باشه، شما می تونید مقدار به یک متغییر عددی نسبت بدید و محاسبات رو انجام بدید. ولی ممکنه کاربر همه کاراکترها رو عدد وارد نکنه و اون موقع وقتی میخواید به متغییر عددی نسبت بدید خطا دریافت می کنید.
منطورتون از اینکه به یه ارایه نسبت بدید که بتونید از خونه های ارایه استفاده کنید رو متوجه نشدم. میشه بیشتر توضیح بدید چه هدفی دارید.

سارا

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

امیر دایی

با استفاده از تابع mid می تونید رشته رو به زیر رشته ها تفکیک کنید. چون شما اینجا می خواید 1 کاراکتر رو بگیرید، کافی هست تعداد کاراکترهایی که جدا میشن رو 1 در نظر بگیرید. مثلا اگر بخواید کاراکتر 5م رو جدا کنید:

mid(string,5,1)

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