حلقه ها در ماکرو نویسی در اکسل

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

حلقه ها در ماکرو نویسی در اکسل

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

تعریف حلقه ها در ماکرو نویسی در اکسل

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

در این مقاله در مورد حلقه ی Do صحبت خواهیم کرد. به دلیل طولانی شدن مطلب، حلقه ی For در مقاله ای دیگر بررسی خواهد شد.

حلقه ها در ماکرو نویسی در اکسل

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

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

شکل زیر خلاصه ای از مبحث حلقه ها در ماکرو نویسی در اکسل را نشان میدهد:

ساختار حلقه ها در ماکرو نویسی در اکسل

حلقه Do در ماکرو نویسی در اکسل

دو ساختار (Syntax) متفاوت برای حلقه ی Do در ویژوال بیسیک وجود دارد، این دو ساختار به لحاظ کاربرد توفیری با یکدیگر ندارند و هریک را میتوان به جای دیگری به کار برد:

  • شرط اجرای حلقه (Condition) یک عبارت عددی (Numeric Expression) و یا یک عبارت رشته ای (String Expression) است که حاصل آن True یا False میباشد، در صورت درست بودن حاصل شرط، حلقه اجرا میشود و در صورت False بودن اجرای حلقه تمام میشود.

اگر حاصل شرط Null باشد، همانند False با آن برخورد میشود و اجرای حلقه تمام میشود.

  • عبارت Exit Do برای اتمام حلقه در مرحله ای از اجرای حلقه و پیش از پایان تعداد Loop ها میباشد. مثلاً شما حلقه را برای هزار بار تکرار یک عملیات نوشته اید ممکن است در دور صدم اجرای حلقه، شما به مقصد خروجی مورد نظر برسید، برای جلوگیری از ادامه ی اجرای حلقه میتوانید از عبارت Exit Do استفاده نمایید، این عبارت همواره به همراه یک عبارت شرطی مورد استفاده قرار میگیرد.

دو Syntax فوق از این نظر تفاوت دارند که در ساختار اول، ابتدا شرط اجرای حلقه چک میشود و در صورت درست بودن (True) دور اول حلقه اجرا میگردد، در ساختار دوم این روند متفاوت است و ابتدا دور اول حلقه اجرا میشود و سپس شرط اجرای حلقه برای اجرای دور دوم چک میشود، در هر دو ساختار برای هر دور از اجرای حلقه شرط چک میشود.

حلقه ها در ماکرو نویسی در اکسل

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

در ادامه چندین مثال برای درک بهتر مبحث حلقه ها در ماکرو نویسی در اکسل آورده شده است.

در دو پروسیژر بالا از While برای ایجاد شرط استفاده شده است، در procedure اول ابتدا شرط چک میشود و سپس حلقه اجرا میشود و در پروسیژر دوم پس از یک بار اجرای حلقه شرط چک میشود. با اجرای کد های بالا، تفاوت این دو حلقه را متوجه می شوید.

در پروسیژرهای زیر از Until برای ایجاد شرط حلقه استفاده شده است:

اجرای پروسیژرهای بالا به درک روش استفاده از حلقه ها کمک میکند. همانطور که قبلاً اشاره شد، برای خارج شدن از حلقه هایی بدون پایان (Endless Loops) یا برای خارج شدن از حلقه ها در صورت تحقق یک شرط میتوان از عبارت Exit Do استفاده کرد، مثال زیر یک نمونه استفاده از این عبارت برای خروج از حلقه میباشد:

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

دقت داشته باشد اگر در Procedure بالا به هر دلیلی در نوشتن دستور If اشتباهی وجود داشته باشد (یا شرط نوشته شده هیچگاه محقق نگردد) حلقه تا بینهایت ادامه دارد و شما مجبور به قطع اجرای پروسیژر میباشید برای اینکار بر روی دکمه ی Esc کیبورد خود کلیک نمایید.

حلقه ها در ماکرو نویسی در اکسل

پروسیژر زیر مثال دیگری از حلقه های Do تو در تو (Nested Loops) به همراه Exit Do میباشد:

حلقه ها در ماکرو نویسی در اکسل

حلقه یFor در ماکرو نویسی ویژوال بیسیک

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

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

۱۰ نظر

  1. soleimani

    با سلام و تشکر از جناب آقای مهندس قدیمی بابت این سایت آموزشی زیبا.
    سوالی دارم و اینکه فرق حلقه ها در کجاست؟ ما چه زمانی از حلقه For Each ..In …Range استفاده می کنیم و چه زمانی از سایر حلقه ها ؟ الزامات استفاده از حلقه ها چی هست؟
    با تشکر- سلیمانی

    1. حامد قدیمی

      سلام، خواهش میکنم، در متن مقاله به تفاوت کاربرد حلقه ها اشاره شده، لطفاً هر دو مقاله ی مربوط به حلقه، هم حلقه ی Do و هم حلقه ی For را بررسی کنید، تفاوت اصلی حلقه ی Do و For در داشتن و نداشتن شرط تکرار حلقه میباشد، حلقه ی ForEach برای نوشتن حلقه هایی درون Collection ها استفاده میشود، مثلاً یک محدوده از اکسل شامل چند سلول میتواند یک Collection باشد، یا مجموع شیت های باز بر روی سیستم میتواند یک Collection باشد (Worksheets Collection)، اگر بخواهید مثلاً فونت تمام سلول های یک Collection محدوده (Range) را Bold کنید، میتوانید از حلقه ی ForEach استفاده کنید که هریک از اعضای Collection را انتخاب میکند و فونت آنها را Bold کند، برای اینکار محدوده ی مورد نظر به عنوان یک متغیر به برنامه معرفی میشود.(لطفاً به آخرین مثال مقاله ی حلقه ی For مراجعه نمایید)

  2. آرامش

    با سلامی‌ گرم و ممنون از سایت خوب ،

    من چند پرسش داشتم.

    مشکل من در درک کردنِ حلقه، درک کردنِ قسمت Counter =Counter +1 و یا i=1+1 هستش.
    - چه تفاوتی‌ بین Counter قبل از مساوی و Counter پس از مساوی هست.
    -این اصولا با چه چیزی جمع میشود?

    فرض بفرمائید من می‌خواهم که عدد ۳ را تقسیم بر ۲ کنم و حاصل آن را باز تقسیم بر ۲ و همین‌جور ادامه داشته باشد تا زمانی‌ که نزدیک به صفر برسد.

    -نقش Counter در این وسعت چه خواهد بود و باید با چه چیزی جمع شود.??

    1. حامد قدیمی

      سلام، خواهش میکنم، کلاً در برنامه نویسی علامت مساوی به معنی برابر بودن نیست، علامت مساوی یک عملگر محسوب میشود، یعنی همانطور که علامت بعلاوه یا منها یک عملیات بخصوص انجام میدهند، علامت مساوی هم یک عملیات انجام میدهد، علامت مساوی در واقع مقدار سمت راست علامت را محاسبه میکند و متغیر سمت چپ را برابر با آن قرار میدهد، در سوال شما، مثلاٌ فرض کنید مقدار Counter دو میباشد، Counter=Counter+1 ابتدا دو را با یک جمع میکند و مقدار Counter را سه قرار میدهد. Counter زمانی مفید خواهد بود که تعداد تکرار یک حلقه برای شما مهم میباشد، در غیر اینصورت نیازی به استفاده از Counter ندارید، اما حتماً باید در حلقه ی Do متغیری مانند i وجود داشته باشد که تکرار حلقه را کنترل کند، با توجه به این توضیحات و نگاه دوباره به مقاله تلاش کنید حلقه ی مورد نظر خود را بنویسید. موفق باشید.

    1. حامد قدیمی

      در مورد Counter در همین مقاله و دیگر مقالات مربوط به حلقه ها توضیحاتی داده شده که فکر میکنم کامل باشد، در مورد تایمر هم در آینده مقاله خواهم نوشت ولی اگر سوالی یا بحثی دارید میتوانید ایمیل بفرستید و یا در بخ پرسش و پاسخ مطرح کنید.

  3. shahriyar

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

    1. حامد قدیمی

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

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