سلول اکسل در ماکرو نویسی

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

سلول های اکسل میتوانند در دسترس ترین گزینه برای برنامه نویسان به منظور درج پارامترهای ورودی توسط کاربران و یا نمایش خروجی برنامه به استفاده کنندگان باشد.

اکسل پرو
گستره استفاده از سلول اکسل در ماکروها

کدهای ویژوال بیسیک نوشته شده در فضای ماکرو نویسی اکسل میتوانند اطلاعات بسیاری را با سلول های اکسل تبادل نمایند، و پارامترهای بسیاری را در مورد سلول های اکسل تعیین نمایند، در ادامه به برخی موارد استفاده از سلول اکسل در ماکرو نویسی اشاره شده است:

  • برنامه نویسان ویژوال بیسیک میتوانند سلول های اکسل را برای وارد کردن پارامترها و متغیرهای استفاده شده در ماکرو های خود استفاده نمایند، مثلاً یکی از سلول های اکسل را مشخص کرده و از کاربر بخواهید که سن خود را در آن وارد نماید، عدد وارد شده میتواند یکی از متغیر های برنامه ی شما باشد.
  • از سلول های اکسل میتوان برای گزارش خروجی یک ماکرو و یا نمایش مقادیر متغیرهای بدست آمده برای کاربران استفاده نمود.
  • از فضای سلول های اکسل میتوان به عنوان محلی دائمی یا موقت برای ذخیره متغیرهای ماکرو نوشته شده استفاده کرد.
  • با کد نویسی ویژوال بیسیک در اکسل میتوان تمامی خواص سلول های اکسل و فرمت محتوای آنها را کنترل کرد، مثلاً شما میتوانید، رنگ، حاشیه، اندازه، فرمت و… هریک از سلول های اکسل را با کدهای ویژوال بیسیک تعیین نمایید
  • از طریق ویژوال بیسیک در اکسل میتوان همانند آنچه در محیط اکسل انجام میشود، برای سلول های اکسل فرمول نویسی کرد
  • میتوان یک سلول یا گروهی از سلول ها را به عنوان یک متغیر در برنامه به کاربرد، مثلاً شما متغیری به اسم Variable در ماکرو خود تعریف کنید و آن را برابر یک سلول اکسل خود قرار دهید، از این به بعد تمام کارهایی که سلول اکسل میتوانید انجام دهید را میاوتید با این متغیر هم انجام دهید، مانند نامگذاری برای سلول ها در اکسل.

تمام عملیات فوق را میتوان بر روی یک سلول و یا گروهی از سلول ها به صورت همزمان انجام داد.

اکسل پرو

سلول های اکسل

برای اشاره به سلول اکسل در ماکرو نویسی ویژوال بیسیک میتوان از شی Range Object) Range) و یا از پروپرتی Cells استفده نمود.

استفاده از شی Range در اشاره به سلول های اکسل

از شی Range میتوان برای اشاره به سلول اکسل در ماکرو نویسی استفاده نمود، در ادامه نحوه ای استفاده از Range به صورت در قالب مثال ارایه شده است:

Range در ویژوال بیسیک
دقت کنید که عبارت قرار گرفته در درون پرانتز شی Range متغیری از نوع رشته میباشد.

به صورت خلاصه تر هم میتوان از شی Range برای اشاره به سلول ها استفاده نمود، برای اینکار نیازی به نوشتن کلمه ی Range و گذاشتن علامت “Quotation Mark” قبل و بعد از نام محدوده نیست، کد زیر نمونه ای از این روش میباشد.

در این کد محتوای سلول های محدوده ی A1 تا B5 پاک شده است.

اکسل پرو

استفاده از پروپرتی Cells در اشاره به سلول های اکسل

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

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

Cells در وِِیژوال بیسیک

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

استفاده از پروپرتی های Row و Column در اشاره به سلول های اکسل

از پروپرتی های Row و Column هم برای اشاره کردن به سلول های اکسل میتوان استفاده نمود، به این تفاوت که این پروپرتی ها سطر ها و ستون ها را میتوانند مورد اشاره قرار دهند و نه سلول ها را، در ادامه مثال هایی از کاربرد Row و Column برای اشاره به سلول های اکسل توسط کدهای ویژوال بیسیک آورده شده است.

Row و Column در ویژوال بیسیک

به عنوان مثال کد زیر برای Bold کردن فونت سلول های قرار گرفته در ردیف ۱ از Sheet1 نوشته شده است.

 اشاره به یک محدوده ی نامگذاری شده در محیط اکسل توسط کدهای ویژوال بیسیک

در مبحث نامگذاری محدوده ها در اکسل یاد گرفتیم که چگونه میتوانیم برای یک یا چند سلول اکسل خود یک نام اختصاص دهیم، دانستیم که نامگذاری محدوده ها در اکسل فرمول نویسی ها را برای ما راحت تر نموده و فایل های اکسل ما را گویا تر میکند.

در کدهای ویژوال بیسیک شما میتوانید از نام های اختصاص داده شده برای سلول ها در اکسل برای اشاره به آن ها استفاده نمایید. برای این کار محدوده ای از اکسل به نام ExcelRange که در فایل اکسل MyWorkBook و در Sheet1 قرار دارد را در نظر بگیرید، کدهای زیر نحوه ی اشاره به این محدوده را نمایش میدهند و همگی یک کار را انجام میدهند.

اکسل پرو

برای اشاره همزمان به نام چند محدوده میتوانیم از کدی مشابه کد زیر استفاده کنیم، این کد محتوای سلول های محدوده ی A_Range، B_Range و C_Range را پاک میکند.

برای اشاره به سلول های نامگذاری شده در حلقه ها میتوانید از کدی مشابه کد زیر استفاده نمایید، در این کد میخواهیم مقدار تمام سلول های قرار گرفته در محدوده ی ExcelRange برابر با ۲۱ قرار دهیم برای اینکار از حلقه ی For و معرفی یک متغیر کمکی از نوع Range به نام Counter استفاده میکنیم.

با فرمت ایجاد حلقه ها، مفهوم آنها و کاربردشان در آینده آشنا خواهیم شد. در اینجا تنها نحوه کاربرد Range در حلقه مورد اشاره قرار گرفته است

اکسل پرو

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

۲۰ نظر

  1. پریا

    سلام وقت بخیر
    ببخشید من یه سوال داشتم . من اومدم دوتا سلولو مرج کردم حالا میخوام اطلاعات این سلول مرج شده هر بار اطلاعاتش تغییر کرد یا وارد شد این اطلاعاتت جدید خودکار در سلولی از شیت دیگر وارد شد. برای اینکار از چه دستوری باید استفاده کنم؟ اطلاعات ورودی هم ممکن است رشته متنی و هم عددی باشد. خودم این دستور را نوشته ام . ارور نمی دهد اما اجرا هم نمی شود.ممنون میشم راهنماییم کنید.
    Range(“L2″) = (“=range(d20:e20)”)

    1. حامد قدیمی

      سلام، کدی که نوشته اید ایراد ساختاری و معنایی دارد، اولاً برای اختصاص و فراخوانی داده یک سلول میبایست حتماً از Properties شی Range به نام Value استفاده نمایید و ثانیاً بهتر است ابندا مقدار مورد نظر را در یک متغیر ذخیره نموده و سپس در سلولی دیگر کپی نمایید. موفق باشید.

  2. محمدرضا

    با سلام و خسته نباشید
    سال نو مبارک
    من یک فایل دارم که از چند sheet ساخته شد و کارکرد پرسنلم در هر شیت به صورت ماهانه وارد میشه
    و در شیت آخر تمام مرخصی های پرسنل با هم جمع میشه
    میخواستم بدونم چه جوری میشه هنگام وارد کردن اطلاعات مرخصی پرسنل در صورتی که مرخصی شون منفی میشه با msgbox بهم اطلاع بده
    خودم یه دستوری نوشتم اما انجام نمیشه
    خیلی بهش احتیاج داشتم لطفا کمکم کنید.
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Worksheets(“sheet1″).Range(“at:at”) < 0 Then
    x = MsgBox("darai morakhasi manfi.", vbOKOnly, "stop")
    End If
    End Sub
    ممنون

    1. حامد قدیمی

      سلام، سلامت باشید، سال نو شما هم مبارک، کدی که شما ایجاد کردید مناسب این کار نیست، در واقع باید یک Event Handler Code به همین صورت که نوشتید بنویسید و یک حلقه بنویسید که رکور ورودی جدید را بررسی نماید و در صورت منفی شدن مرخصی پیام دهد. موفق باشید.

  3. sh

    سلام
    در یک سلول اکسل به آدرس مثلا H9 نوشتم ۲۰ و در یک سلول دیگر به آدرس M23 نوشتم ۵ …. در یک سلول دیگر فرمول دادم H9+M23= حالا به جای اینکه در سلول موقع نمایش فرمول بنویسه H9+M23= می خوام اینو نمایش بده بهم ۵+۲۳=
    لطفا راهنمایی کنید

  4. reza karimi

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

  5. فاطمه

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

    1. حامد قدیمی

      سلام، این کار باید تماماً دستی انجام شود البته ابزار Filter کار فیلتر را انجام میده وی بقیه موارد باید دستی باشد مگر اینکه برای ان کد نویسی نمایید. موفق باشید.

  6. hassan

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

    1. حامد قدیمی

      سلام، انجام این کار ممکن نیست، شما باید ستون جدید ایجاد کنید و در نهایت داده های کپی کنید. در اکسل به صورت عادی نمیتوانید فرمولی در سلولی بنویسید که از محتوای همان سلول در آن فرمول استفاده گردد. در این صورت Circular Reference اتفاق میفتد و خروجی فرمول صفر نشان داده میشود.

      1. آرمین

        سلام دوست من
        با استفاده از کد VBA میشه اینکارو انجام داد
        در یک حلقه تمام سلولهای یک ستون را خوانده و در ۵درصد ضرب میکنیم و دوباره روی خود سلول مینویسیم
        مثلا اگر متغیر حلقه را i در نظر بگیریم و ستون ما C باشد دستور زیر صادق است
        Cells(i, 3) = Cells(i, 3) + (Cells(i, 3) * 5 / 100)

        1. حامد قدیمی

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

  7. علیرضا

    یک کد نوشته ام بصورت زیر که در هر شیت به یک سلول خاص خواهد رفت
    “Application.Goto Reference:=”R280c15
    برای اینکه فرمول فوق را تغییر به موقعیت سلول جاری که الان در شیت فعال است تغییر بدهم چه تغییری در فرمول فوق باید داد. بجای عبارت “R280c15 میخواهم متغیری تعریف شود که موقعیت سلول فعال در آن ثبت شود و در فرمول فوق به آن موقعیت ارجاع دهم
    با تشکر

    1. حامد قدیمی

      سلام، برای انجام این کار میتوانید برای سلول دلخواه خود یک نام انتخاب کنید، در بحث نامگزاری محدوده ها میتوانید در این مورد بخوانید، سپس بجای آدرس سلول مورد نظر اسم آن سلول را بنویسید و یا اینکه اسم سلول را خیلی ساده تایپ کنید “A1″
      موفق باشید.

  8. امیر عباس

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

    1. حامد قدیمی

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

  9. روشن

    سلام و متشکر از راهنمایی های ارزنده تون
    سوالی داشتم از خدمتتون خیلی ممنون میشم اگه راهنمایی بفرمایید
    من یک دیتا بیس دارم شامل ۴ پارامتر ، میخوام بر اساس مشخص کردن سه پرامتر اول (به نوعی فیلتر کردن) ، مینیمم و ماکزیمم پارامتر چهارم رو بدست بیارم. این کار امکان پذیر هست؟
    متشکرم

    1. حامد قدیمی

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

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