انواع متغیر در ویژوال بیسیک

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

در مقاله ی دوم، به معرفی مفهوم حوزه ی اعتبار متغیر در ویژوال بیسیک پرداختیم و یادگرفتیم با توجه به حوزه ی اعتبار مورد نیاز چطور متغیرها را متناظر با نیاز خود تعریف نماییم. در این مقاله میخواهیم با انوع متغیر در ویژوال بیسیک آشنا شویم، لازم به ذکر است، با توجه به ارتباط تنگاتنگ این مقالات با یکدیگر، توصیه میگردد قبل از خواندن این مقاله به مطالعه ی مقالات “متغیرها در ویژوال بیسیک” و “تعریف متغیرها در ویژوال بیسیک و حوزه ی اعتبار آنها” بپردازید تا بتوانید درک درستی از محتوا بدست آرید.

متغیر در ویژوال بیسیک

تعریف متغیر در ویژوال بیسیک

در مقالات قبلی با عبارات مناسب برای تعریف متغیرها با توجه به Scope و Life-Time مورد نظر برای آنها آشنا شدیم، در زیر نمونه هایی از Syntax مورد قبول ویژوال بیسیک برای تعریف یک یا چند متغیر در یک Scope مشخص توسط Dim Statement ارایه شده است.

تعریف کردن یک یا چند متغیر در ویژوال بیسیک بدون مشخص کردن نوع آن، در این حالت به صورت پیشفرض ویژوال بیسیک متغیرها از نوع Variant ذخیره میشوند:

تعریف کردن یک یا چند متغیر در ویژوال بیسیک از یک نوع:

در صورت استفاده از کد زیر، متغیرهای اول و دوم از نوع Variant و متغیر سوم String تعرف میشود:

بجای عبارت As String میتوان از حرف مشخص کننده ی نوع متغیر در ویژوال بیسیک

( Type-Declaration Character ) استفاده کرد که در مقاله ای دیگر با آن آشنا خواهیم شد.

متغیر در ویژوال بیسیک

متغیر در ویژوال بیسیک

انواع متغیر در ویژوال بیسیک در نمودار شاخه ای زیر نمایش داده شده است، در ادامه به معرفی هر یک از آنها خواهیم پرداخت.

متغیر در ویژوال بیسیک

متغیر نوع Byte

اعداد صحیح بدون اعشار از ۰ تا ۲۵۵ را شامل میشود. در صورتی که اعداد دارای اعشار به متغیرهای نوع Byte اختصاص داده شود، به صورت پیشفرض آن عدد به سمت بالا یا پایین گرد میشود و عدد صحیح بدون اعشار در حافظه ذخیره میگردد.

متغیر نوع Boolean

متغیری که فقط دو مقدار True و False میتواند داشته باشد، اگر متغیری که قرار است عدد در آن قرار گیرد به صورت متغیر نوع Boolean توصیف شده باشد، در این صورت اگر آن متغیر مقدار صفر دریافت کند برابر با ۰ یا False خواهد بود و در صورت دریافت هر عدد دیگر غیر از صفر، مقدار آن برابر با ۱ یا True خواهد بود.

در محیط اکسل هم همواره مقادیر False و ۰  از طرفی، و مقادیر ۱ و True از طرف دیگر، برابر با هم  هستند.

متغیر نوع عدد صحیح یا Integer

اعداد صحیح در بازه ی -۳۲,۷۶۸ تا ۳۲,۷۶۷ را شامل میشود. این اعداد بدون اعشار میباشند، در صورتی که اعداد دارای اعشار به متغیرهای نوع Integer اختصاص داده شود، به صورت پیشفرض آن عدد به سمت بالا یا پایین گرد میشود و عدد صحیح بدون اعشار در حافظه ذخیره میگردد.

از متغیر نوع Integer در ویژوال بیسیک معمولاً برای شمارنده ها و اختصاص کدهای عددی به پارامترهای مساله استفاده میشود.

متغیر نوع Long

دقیقاً مانند Integer میباشد ولی بازه ی بیشتری از اعداد را در بر میگیرد، شامل اعداد صحیح بدون اعشار در بازه ی                -۲,۱۴۷,۴۸۳,۶۴۸ تا ۲,۱۴۷,۴۸۳,۶۴۷  میشود.

متغیر در ویژوال بیسیک

متغیر نوع Single

اعداد صحیح با یک رقم اعشار را میپذیرد، بنابراین، اگر به متغیر نوع Single عددی با چندین رقم اعشار اختصاص داده شود، آن عدد تا یک رقم اعشار گرد خواهد شد. متغیر نوع Single بازه های زیر را در بر میگیرد.

  • از عدد -۳٫۴۰۲۸۲۳E38 تا -۱٫۴۰۱۲۹۸E-45 برای اعداد منفی
  • از عدد ۱٫۴۰۱۲۹۸E-45 تا ۳٫۴۰۲۸۲۳E38 برای اعداد مثبت

متغیر نوع Double

اعداد صحیح با هر تعداد رقم اعشار را میپذیرد، متغیر نوع Double بازه های زیر را در بر میگیرد.

  • از عدد -۱٫۷۹۷۶۹۳۱۳۴۸۶۲۳۱E308 تا -۴٫۹۴۰۶۵۶۴۵۸۴۱۲۴۷E-324 برای اعداد منفی
  • از عدد ۴٫۹۴۰۶۵۶۴۵۸۴۱۲۴۷E-324 تا ۱٫۷۹۷۶۹۳۱۳۴۸۶۲۳۲E308 برای اعداد مثبت

متغیر نوع Currency

اعداد صحیح تا ۴ رقم بعد از اعشار و ۱۵ رقم قبل از اعشار را در بر میگیرد.

کوچکترین عدد  -۹۲۲,۳۳۷,۲۰۳,۶۸۵,۴۷۷٫۵۸۰۸ و بزرگترین عدد ۹۲۲,۳۳۷,۲۰۳,۶۸۵,۴۷۷٫۵۸۰۷ میباشد.

متغیر در ویژوال بیسیک

متغیر نوع Decimal

اعداد صحیح هستند که به صورت ضرب یک عدد اعشاری در توانی از عدد ده نمایش داده میشوند، توان عدد ۱۰ از ۰ تا ۲۸ میباشد، بزرگترین مقدار آن +/-۷٫۹۲۲۸۱۶۲۵۱۴۲۶۴۳۳۷۵۹۳۵۴۳۹۵۰۳۳۵ و کوچکترین مقدار غیر صفر آن             +/-۰٫۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ میباشد.

متغیر نوع Decimal فقط میتواند در یک Variant مورد استفاده قرار گیرد، یعنی شما نمیتوانید نوع یک متغیر را به صورت زیر تعریف کنید:

با استفاده از تابع CDec در ویژوال بیسیک میتوانید یک Variant بوجود بیاورید که Subtype آن Decimal باشد.

متغیر نوع تاریخ یا Date

تاریخ هایی در بازه ی ۱ January 100 تا ۳۱ December 9999 و زمان هایی از ۰:۰۰:۰۰ تا ۲۳:۵۹:۵۹ را میتواند شامل شود، برای مقدار دادن به متغیرهایی از جنس Date در ویژوال بیسیک باید از علامت Number Sign () در دو طرف تارخ استفاده نماییم، مانند کد زیر:

متغیر نوع Object

برای ارجاع دادن به Object ها استفاده میشود، مثلاً در جایی که احتیاج داریم از سلول های اکسل که Object میباشند به عنوان متغیر استفاده کنیم، این نوع متغیر را میتوانیم به کار بریم. تفاوت مقدار دان به این نوع متغیر با متغیرهای دیگر این است که در اینجا باید از عبارت Set برای اختصاص یک Object به این نوع متغیر استفاده نمایید.

متغیر در ویژوال بیسیک

متغیر نوع رشته ای یا String

متغیرهای رشته ای یا String در بر گیرنده ی داده های متنی میباشند، برای اختصاص مقدار به این نوع متغیرها باید متن را بین دو علامت ” قرار داد. دو نوع متغیر رشته ای داریم، متغیر رشته ای با طول متغیر (Variable-Length) و متغیر رشته ای با طول ثابت (Fixed-Length).

متغیر رشته ای با طول متغیر میتواند تا تعداد ۲ میلیارد (۲ به توان ۳۱) کاراکتر را در بر بگیرد
متغیر رشته ای با طول ثابت میتواند تا تعداد ۵۳۶،۶۵ (۲ به توان ۱۶) کاراکتر را در بر بگیرد

در Class Module ها متغیرهای رشته ای با طول ثابت با حوزه اعتبار Public نمیتوانند مورد استفاده قرار گیرند.

اگر متغیر رشته ای با طول ثابت تعریف شود، (مثلاً در کد زیر یک متغیر رشته ای با طول پنج تعریف شده است) در صورتی که داده ای با طول بیش از پنج کاراکتر به آن اختصاص یابد تنها پنج کاراکتر اول ذخیره میشود و مابقی داده از بین خواهد رفت، برای داده های با طول کمتر و برابر با پنج کاراکتر تمام کاراکترها در متغیر ذخیره میشود.

در کدهای زیر یک متغیر رشته ای از نوع Fixed-Length با طول پنج  و یک متغیر رشته ای از نوع Variable-Length (پیشفرض ویژوال بیسیک) تعریف شده است:

Dim Variable1 As String*5

Dim Variable2 As String

کاراکترهای مجاز برای متغیرهای رشته ای

هر کاراکتر در برنامه نویسی دارای یک کد معادل منحصر به فرد است، کد کاراکترهایی که میتوانند در یک متغیر رشته ای قرار گیرند از ۰ تا ۲۲۵ میباشد، از کد ۰ تا ۱۲۷، مختص کاراکترهای زبان انگلیسی و علائم و نشانه های استاندار کیبورد U.S (Standard U.S Keyboard) مطابق با آنچه که در ASCII آمده میباشد و کدهای ۱۲۸ تا ۲۵۵ به کاراکترها و حروف در زبان های دیگر و علائم و نمادهای دیگر فرهنگ ها اختصاص دارد.

متغیر نوع Variant

این نوع متغیر در مقاله ای جداگانه مورد بررسی قرار خواهد گرفت.

متغیر User-Defined

در ویژوال بیسیک به کاربران این امکان داده میشود که متغیر نوع دلخواه خود (User Defined Data Type) را تعریف کنند. به علت طولانی بودن مطلب این نوع متغیر نیز در مقاله ای جداگانه معرفی خواهد شد.

متغیر نوع  Array

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

حرف مشخص کننده ی نوع متغیر در ویژوال بیسیک

حرف مشخص کننده ی نوع متغیر در ویژوال بیسیک یا (Type-Declaration Character) را میتوان به جای اسم نوع متغیر بعد از عبارت As به منظور توصیف متغیرها استفاده نمود. هر دو عبارت زیر در زبان ویژوال بیسیک به یک معنی میباشند:

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

انواع متغیر در ویژوال بیسیک

اشتراک گذاری در شبکه های اجتماعی: share on facebook share on google plus share on linkedin

۲۰ نظر

  1. mostafa

    بسیار عالیه مطالبتون.
    ازجمله نکاتی که در سایتتون کاملا رعایت میشه اینه که تمام موارد زبان برنامه نویسی VB را به طور ساده و قابل درک و موارد کاربرد دستورات کد نویسی، حتی دستوراتی که به نظر ساده میرسن بیان کردید. اگه امکان داره مفصل در مورد فرمول نویسی در formatcondition بررسی و مقاله ای ارائه بشه ….
    ممنون از تلاش و وقتی که برای ارائه مطالب میزارید.

    1. حامد قدیمی

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

  2. میثم

    با سلام و خسته نباشید
    چند مشکا دارم در ویژوال
    یک دستور پرینت رو چطور ب رنگ دگ ای انجام بدم
    دوم اینکه امکان هماهنگ کردن دو variant وجود داره ؟

    1. حامد قدیمی

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

  3. رضا

    باسلام خدمت آقا حامد عزیر
    واقعا مطلب عالی بود و کمک کرد
    فقط یک سوال دارم اونم اینکه چرا در ویژوال بیسیک ۲۰۱۲ تابع sqr تعریف نشده ؟
    حالا برای تعریف جذر چجوری باید عمل کنیم ؟
    باتشکر

    1. حامد قدیمی

      سلام، خواهش میکنم، تابع Sqr در ویژوال بیسیک تعریف شده و در نسخه های ۲۰۰۷، ۲۰۱۰ و ۲۰۱۳ وجود دارد، ساختار این تابع Sqr(Number As Double) As Double میباشد، در ضمن علاوه بر تمام توابع موجود در محیط VBE شما میتوانید تمام توابع اکسل را نیز در کدهای خود استفاده کنید، در اکسل تابع SQRT معادل تابع sqr در VB میباشد که به صورت زیر در کد ها قابل استفاده است: Application.WorksheetFunction.sqrt

  4. asalghand

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

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

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

    1. حامد قدیمی

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

  5. asalghand

    ممنون از راهنمایی فوق العادتون سپااااااااااس

    لطف میکنید کدی رو که بتونم تو ویرایش تنظیم کنم و بگید همون select برای موس؟

    1. حامد قدیمی

      منظور شما رو از این سوال متوجه نشدم! در کد نویسی ویژوال بیسیک در اکسل، سلولی که کاربر انتخاب کرده به اسم ActiveCell قابل دسترسی است، اگر کاربر تعدای سلول را انتخاب کند سلول های انتخاب شده را میتوان در Selection پیدا کرد. ActiveCell و Selection هر دو پروپرتی Application هستند، که ActiveCell یک Range و Selection یک Object است که البته میتواند Range باشد.

  6. asalghand

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

    بابت زمت هایی که میدم عذر میخوام بازم ممنون

    1. حامد قدیمی

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

  7. asalghand

    و یا اینکه مقاله یا عنوانی رو معرفی بفرمایید تا مطالعه کنیم
    معذرت میخوام با این زحمتهایی که میدیم ممنون

  8. سامان

    با سلام و تشکر از زحمات شما.
    من ی سوال مهم در مورد بیسیک دارم. چطور میشه از محتوای متغییر ها استفاده کرد؟
    چون من میخوام با AVR کار کنم. مثالی عرض میکنم خدمتتون. مثلا من مقدار یک متغییر رو خودم یک عدد می دم. بعد میخوام از این عد در جاهای مختلف استفاده کنم. مثل تاخیر ها و… چطور این کارو انجام بدم؟
    مثال:
    Dim A as byte
    A= 100
    waitms A !!
    من در خط سوم میخوام از محتوای متغییر A استفاده کنم. اما تو بیسیک این کار شدنی نیست. چه راهی وجود داره؟

    1. حامد قدیمی

      سلام، خواهش میکنم، شما در هر جایی از برنامه میتوانید از متغیر استفاده کنید و مشکلی و جود ندارد! منظرو شما را از این سوال متوجه نمیشوم، لطفاً بیشتر توضیح دهید.

  9. سید مصطفی

    با سلام
    من می خوام در زبان بسکام تا سه رقم اعشار بگیرم
    و نمی تونم از double استفاده کنم باید چی کار کنم ؟؟؟

  10. سیا

    سوالی که در مورد تعریف متغیر داشتم در مورد متغیر سراسری بود و منظور حقیر از سراسری حوضه دید (یا اسکوپ) بین فرمها(ی چایلد با فرمهای عادی در تکنیک MDI-Form که مقادیر داخل اون متغیر قابل دریافت و استفاده باشند) بود که به جای ِDim از کلمه Public در قسمت جنرال دکلریشن فرم تعریف میکنم باز از فرم دیگه حی با آدرسدهی نقطه ای مثل If Form1.ans.caption = “” Then ممکن نمیشه!؟

دیدگاهتان را بنویسید؟