مفهوم حلقه یا Loop در برنامه نویسی VBA

مطلبی که امروز می خواهیم در مورد آن صحبت کنیم مفهوم حلقه یا Loop در برنامه نویسی VBA است .

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

بالاترین دلیل اهمیت این موضوع همین است که شما مشغول مطالعه این مطلب هستید .

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

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

اما شاید ذهنیتی در مورد حلقه ها یا در اصطلاح برنامه نویسی Loop  نداشته باشید .

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

امروز می خواهیم بطور اصولی از ابتدا همه چیز را شروع کنیم .

از اینکه اصلا معنی و مفهوم حلقه ها چیست ؟

چند نوع حلقه داریم ؟

کجاها باید از حلقه ها استفاده کنیم ؟

چه جوری حلقه ها را باید ایجاد کنیم ؟

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

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

پس تا پایان این مطلب همراه من باشید .

حلقه یا Loop در برنامه نویسی VBA.

مفهوم حلقه یا Loop در برنامه نویسی VBA

من برای یادگیری کار با حلقه ها به خیلی از سایت ها – چه ایرانی و چه خارجی –  سر زدم .

همه هم به یک سبک و سیاق فقط مستقیم به سراغ اصل مطلب می روند .

بدون اینکه این نکته را در نظر بگیرند که شاید خواننده اصلا هیچ ذهنیتی از حلقه ها نداشته باشد .

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

پس قبل از اینکه بخواهم به سراغ معرفی انواع حلقه ها و فرمول های مربوط به آنها برویم اصلا ببینیم که منظور از حلقه چیست ؟

حلقه یک اصطلاحی است در همه زبان ها برنامه نویسی و اشاره به کار یا کارهایی دارد که حالت تکراری پیدا می کنند .

اما اصلا چرا باید یک کار تکراری داشته باشیم و منظور از تکرار در برنامه نویسی چیست ؟

اجازه دهید به این سوالات بعدا پاسخ بدهم .

اما بیایید به همین مفهوم کار تکراری بپردازیم

مفهوم کار تکراری در دنیای اطراف ما .

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

بیایید گشتی در دنیای پیرامون خود بزنیم ببینم که چه کارهایی هست که ما بصورت تکراری انجام می دهیم .

مثلا به تصویر زیر نگاه کنید .

حلقه یا Loop در برنامه نویسی VBA

این می تواند مثال خوبی از یک کار تکراری باشد . 

ما در اینجا چه کاری را می خواهیم انجام دهیم .

درست است . بریدن یک تخته چوبی .

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

 فرض کنید  که تیغه اره ما ۵۰ سانتی متر طول دارد .

ما برای بار اول ۵۰ سانتی متر اره را به جلو می رانیم تا به انتهای آن برسیم .

برای بار دوم دوباره اره را به اندازه ۵۰ سانتی متر به عقب می کشیم تا دوباره به ابتدای اره برسیم .

این کار عقب و جلو کردن اره را باید بطور مداوم تکرار کنیم تا در نهایت این تخته چوبی برش بخورد .

پس این یک کار تکراری است .

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

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

کوبیدن یک میخ با استفاده از یک چکش هم شامل چند ین حرکت تکراری است .

و یا خیلی از مثال ها و کارهای دیگر .

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

که وقتی می گوییم کار تکراری یعنی چه ؟

حالا برویم به سراغ مفهوم کار تکراری در اکسل و برنامه نویسی VBA 

مفهوم کار تکراری در اکسل و برنامه نویسی VBA

چرا ما باید در اکسل یک را بصورت تکراری انجام دهیم ؟

آیا اینکه یک کار را بخواهیم تکرار کنیم بد است یا خوب ؟

اول برویم به سراغ سوال اول و پاسخ آن را بررسی کنیم .

چرا باید یک کار را بصورت تکراری انجام دهیم ؟

اجازه دهید همه چیز را با یک مثال ساده شروع کنیم .

به تصویر زیر نگاهی بکنید .

حلقه یا Loop در برنامه نویسی VBA

اینها لیستی است از دانش آموزان یک کلاس که برای هر کدام از آنها یک ستون برای نمره آنها درج شده است .

حالا فرض کنیم که آقای معلم می خواهد به نمره هر دانش آموز ۲ نمره اضافه کند !!!.

خوب معلم شروع می کند از اولین نفر و ۲ نمره به نمره قبلی آن اضافه می کند .

حالا می رود به سراغ نفر دوم و دو نمره به نمره قبلی اش اضافه می کند .

حالا می رود به سراغ نفر سوم و دو نمره به نمره قبلی اش اضافه می کند .

بعد می رود به سراغ نفر چهارم و پنجم و ششم و همینطور تا نفر آخری که می تواند نفر بیستم یا سی ام باشد .

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

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

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

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

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

فکر می کنم در اینجا به سوال دوم هم پاسخ دادیم .

یک کار تکراری به خودی خود چیز بدی نمی تواند باشد .

پس چه چیز می تواند بد باشد ؟

چیزی که بد است روش انجام این کار تکراری است .

اینکه خودمان بخواهیم این کار تکراری را انجام دهیم بد است .

پس چکار باید بکنیم . ؟

باید انجام این کار تکراری را به خود اکسل واگذار کنیم .

چه جوری ؟  با استفاده از همان چیزی که به اسم حلقه ها یا Loop  می شناسیم .

پس با این مقدمه تازه می رسیم به سر اصل موضوع .

آشنایی و معرفی انواع حلقه ها در برنامه نویسی VBA

  ما بطور کلی دو نوع  حلقه یا Loop در برنامه نویسی VBA داریم .

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

اما مبنای این دسته بندی ها و تقسیم ها چیست ؟

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

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

مثلا به تصویر زیر نگاه کنید .

حلقه یا Loop در برنامه نویسی VBAاین تصویر یک قفل درب حیاط است .

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

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

مگر نه اینکه کاری که ما در اینجا می کنیم یعنی گرداندن کلید در داخل این قفل یک کار تکراری است ؟

اما چند بار باید این کار را تکرار کنیم ؟

جواب این سوال را هم از قبل می دانیم . ۲ بار

فرقی هم نمی کند که یک بچه کلید را بچرخاند یا یک آدم بزرگسال .

در هر حالت کلید بیشتر از دو بار در داخل این قفل نخواهد چرخید .

این مثال را در ذهن خود داشته باشید .

حالا به تصویر زیر نگاه کنید .

حلقه یا Loop در برنامه نویسی VBA

حتما از خود می پرسید که این دیگر چیست ؟

این هم یک نوع قفل است .

اما از آن قفل های قدیمی که به معنای واقعی کلمه قفل بودند نه مثل قفل های امروزی  .

حالا چه جوری کار می کرد .

آن حلقه دایره ای  انتهایی در سمت راست قفل را می بینید .

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

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

اما چند بار باید بچرخانید ؟

معلوم نیست . 

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

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

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

اینها دو مثال از دنیای واقعی خودمان بود .

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

اما در مثال دوم دقیقا تعداد این دفعات برای ما مشخص نبود .

در دنیای برنامه نویسی هم قضیه دقیقا به همین شکل است .

بعضی وقت ها ما به خوبی می دانیم که برنامه  یک کار را چند بار باید تکرار کند .

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

اما بعضی از مواقع دیگر هست که ما خودمان هم نمی دانیم که برنامه چند بار باید یک کار را انجام دهد چه برسد به خود برنامه .

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

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

در اینجا به بررسی همه این حلقه ها و زیرمجموعه های آنها می پردازیم .

۱- حلقه    For ——-Next 

اولین حلقه ای که می خواهیم در بحث  حلقه یا Loop در برنامه نویسی VBA به بررسی آن بپردازیم حلقه For  است

معنی For  را که می دانید. یعنی  برای ….

چه موقع از این حلقه استفاده می کنیم .

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

اول بیایید نگاهی به این تابع و ساختار آن بیندازیم .

 در کد بالا counter  یک متغیر است که قرار است تعداد دفعات تکرار را برای حلقه نگه می دارد .

start  یک عدد است که نقطه شروع را مشخص می کند .

End  یک عدد است که نقطه پایان حلقه را مشخص می کند .

statement  همان کاری است که می خواهیم برنامه برای ما انجام دهد .

Exit For  نقطه خروج را از تابع مشخص می کند .

Next  هم کلمه ای است که حلقه را به گردش  در می آورد .

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

برگردیم به همان مثال معلم و دانش آموزان و اضافه کردن دو نمره به هر دانش آموز .

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

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

در اولین خط از این کد ما یک متغیر از نوع Integer  تعریف کردیم .

این متغیر کار شمارش تعداد دفعات انجام  کار را برای ما ذخیره می کند . 

در خط بعدی حلقه خود را ایجاد کردیم .

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

اما این عدد ۲ از کجا آمد و عدد ۱۳ از کجا ؟

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

پس عدد شمارنده خود را بر روی ۲ می گذاریم . در واقع اینجا می خواهیم که حلقه از ردیف شماره ۲ شروع شود .

در خط بعدی محدوده مورد نظر را مشخص کرده ایم .

 در این محدوده قرار است ما یک کار خاص را چند بار تکرار کنیم .

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

حلقه ما برای بار اول از عدد ۲ شروع می شود .

یعنی در حلقه ما شمارنده i  برابر ۲ می شود .

پس در داخل حلقه برای بار اول هر جا که حرف i  داشته باشیم به جای ان عدد ۲ قرار می گیرد .

حالا ما کجا i  داریم .

درست است در  عبارت     (   & ” Range(” E  پس در اینجا محدوده ما می شود E2 .

 در خط بعدی ما مشخص می کنیم که هر مقداری که در سلول E2  وجود دارد را با عدد ۲ جمع کرده و نتیجه جدید را در داخل سلول درج کند .

در خط آخر هم با استفاده از دستور Next  می خواهیم که به سراغ مقدار بعدی برای i برود و این بار عدد ۳ را به جای i بگذارد . 

و این قضیه ادامه پیدا می کند تا زمانی که مقدار i  به عدد ۱۳   برسد .

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

فقط کافی است که این روال را اجرا کنیم تا نتیجه نهایی را مشاهده کنیم .

در زیر می توانید نتیجه اجرای این کدها را مشاهده کنید .

 

حلقه یا Loop در برنامه نویسی VBA

اما به نمره دو دانش آموز آخر نگاه کنید .

دانش آموز  ماقبل آخر قبلا نمره اش ۱۹ بوده و حالا ما دو نمره به او اضافه کرده ایم و نمره جدیدش شده ۲۱ !!!!

دانش آموز  آخری هم  قبلا نمره اش ۲۰ بوده و حالا ما دو نمره به او اضافه کرده ایم و نمره جدیدش شده ۲۲ !!!!.

عجب سوتی شده .

حالا باید چکار کنیم .

خیلی راحت باید به برنامه بگوییم که فقط به دانش آموزانی دو نمره اضافه کن که نمره آنها کمتر از ۱۹ است .

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

پس کدهای خودمان را به این صورت تغییر می دهیم .

 به همین راحتی قضیه را حل کردیم و دیگر نمره بالاتر از ۲۰ نداریم که سوتی شود .

اما یک لحظه صبر کنید .

مثل اینکه یک نفر اعتراض دارد .

 دانش آموزی که نمره اولش ۱۹ بوده می گوید که شما چطور می خواهید به کسی که ۱۸ گرفته ۲ نمره اضافه کنید و نمره اش را بکنید ۲۰ اما به من نمی خواهید یک نمره بدهید که نمره من هم ۲۰شود ؟

این هم حرف درست و اعتراض بجایی است .

پس باز هم کدهای خود را تکمیل تر می کنیم .

در اینجا ما یک متغیر داریم به نام i  .

این متغیر کار یک شمارنده را برای این حلقه ایفا می کند .

این متغیر کار شمارش را از عدد ۲ شروع کرده و تا عدد ۱۳ یکی یکی جلو می رود .

این حلقه قرار است ۱۲ بار تکرار شود .

برای بار اول این متغیر عدد را می گیرد .

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

در نوبت بعدی این متغیر عدد ۳ را می گیرد .

در این حالت سلول E3  انتخاب می شود و مقادیر قبلی در آن  با عدد ۲ جمع می شود .

و این کار یکی یکی تا عدد ۱۳ تکرار می شود تا حلقه ما کامل شود .

می بینید که به چه راحتی همه مشکلات را حل کردیم .

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

و شما را با پیچ و خم ها و سوالاتی که ممکن است پیش بیاید مواجه کنم که ببینید برای هر مشکل باید یک راه حل مناسب را پیدا کنید .

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

و بعد بگویم که کاربرد حلقه این است .

هدفم این بود یک سوال واقعی را مطرح و پاسخ درستی را برای آن در نظر بگیریم .

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

باز هم بحث را ادامه می دهیم و مثال های دیگری را دنبال خواهیم کرد . 

استفاده از قابلیت Step  در حلقه For 

Step  قابلیتی است که با استفاده از آن می توانیم به حلقه بگوییم که چند تا چند تا جلو برود .

اگر step  را ننویسیم شمارنده حلقه ما یکی یکی جلو می رود. 

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

من که خودم متوجه این توضیحات خودم نمی شوم .

بگذارید یک مثال بزنم .

 به کدهای زیر نگاه کنید

در اینجا از حلقه خود می خواهیم که در ۱۲ بار اجرا شود .

اما به جای اینکه یکی یکی کار شمارش را انجام دهد  دو تا دوتا جلو برود .

یعنی دفعه اول عدد ۲ بعد ۴ و بعد ۶ و به همین ترتیب تا آخر .

دفعه اول که متغیر ما عدد ۲ را به خود می گیرد ردیف های شماره ۲ به رنگ زرد در می آیند .

نوبت بعد عدد ۴ در متغیر ما قرار می گیرد و این بار ردیف شماره ۴   به رنگ زرد درمی آید .

و به همین ترتیب کار ادامه پیدا می کند .

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

حلقه یا Loop در برنامه نویسی VBA

برنامه نویسی VBA بازدید : 427 views 1 سپتامبر, 2020 ۰