حلقه ها در VBA

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

حلقه های VBA عبارتند از:

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

برای اپراتور حلقه در ویژوال بیسیک

ساختار عملگر حلقه La در ویژوال بیسیک را می توان به یکی از دو شکل سازماندهی کرد: به صورت حلقه برای بعدی یا به صورت حلقه برای هر.

چرخه «برای … بعدی»

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

برای i = 1 تا 10 مجموع = مجموع + iArray(i) بعدی i

در این حلقه ساده برای بعدی متغیر استفاده می شود i، که به ترتیب مقادیر 1، 2، 3، … 10 را می گیرد و برای هر یک از این مقادیر، کد VBA داخل حلقه اجرا می شود. بنابراین، این حلقه عناصر آرایه را جمع می کند. iArray در متغیر جمع.

در مثال بالا، افزایش حلقه مشخص نشده است، بنابراین متغیر را افزایش دهید i از 1 تا 10، پیش فرض یک افزایش است 1با این حال، در برخی موارد لازم است از مقادیر افزایشی مختلف برای حلقه استفاده شود. این را می توان با استفاده از کلمه کلیدی انجام داد گامهمانطور که در مثال ساده زیر نشان داده شده است.

برای d = 0 تا 10 مرحله 0.1 dTotal = dTotal + d بعدی d

از آنجایی که در مثال بالا، گام افزایشی برابر با تنظیم شده است 0.1، سپس متغیر dTotal برای هر تکرار چرخه مقادیر 0.0، 0.1، 0.2، 0.3،… 9.9، 10.0 را می گیرد.

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

برای i = 10 به 1 مرحله -1 iArray(i) = i بعدی i

در اینجا افزایش است -1، بنابراین متغیر i با هر تکرار چرخه مقادیر 10، 9، 8، … 1 را به خود می گیرد.

حلقه "برای هر"

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

کم نور wSheet به عنوان کاربرگ برای هر wSheet در کاربرگ MsgBox "Найден برگ: " & wSheet.Name wSheet بعدی

عبارت وقفه حلقه "خروج برای"

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

اپلیکیشن اپراتور خروج برای در مثال زیر نشان داده شده است. در اینجا حلقه بیش از 100 ورودی آرایه را تکرار می کند و هر کدام را با مقدار متغیر مقایسه می کند. dVal... اگر مطابقت پیدا شود، حلقه خاتمه می یابد:

برای i = 1 تا 100 اگر dValues(i) = dVal سپس IndexVal = i خروج برای پایان اگر بعدی i

حلقه Do while در ویژوال بیسیک

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

«رویه فرعی اعداد فیبوناچی را که از 1000 تجاوز نمی‌کند، زیر فیبوناچی () Dim i به‌عنوان عدد صحیح به دست می‌دهد تا موقعیت عنصر را در دنباله نشان دهد. از دنباله Dim iStep As Integer 'اندازه افزایش بعدی را ذخیره می کند' متغیرهای i و iFib_Next i = 1 iFib_Next = 0 'Do while اجرا می شود تا زمانی که مقدار 'عدد فیبوناچی فعلی بزرگتر از 1000 شود Do در حالی که iFib_Next < 1000 اگر i = 1 سپس «مورد خاص برای عنصر اول iStep = 1 iFib = 0 در غیر این صورت، اندازه افزایش بعدی را قبل از بازنویسی «مقدار فعلی دنباله ذخیره کنید iStep = iFib iFib = iFib_Next End اگر «عدد فیبوناچی فعلی را در ستون A چاپ کنید کاربرگ فعال 'در ردیف با شاخص i Cells(i , 1).Value = iFib 'عدد فیبوناچی بعدی را محاسبه کنید و شاخص موقعیت عنصر را 1 افزایش دهید iFib_Next = iFib + iStep i = i + 1 حلقه پایان زیر

در مثال داده شده، شرط iFib_Next < 1000 در ابتدای حلقه بررسی می شود. بنابراین، اگر مقدار اول iFib_Next اگر بیش از 1000 وجود داشت، حلقه هرگز اجرا نمی شد.

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

از نظر شماتیک، چنین چرخه ای انجام در حالی که با شرطی که در انتها بررسی می شود به صورت زیر خواهد بود:

انجام ... Loop while iFib_Next < 1000

سیکل «تا زمانی که» در ویژوال بیسیک

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

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'مقدار سلول فعلی در آرایه ذخیره می شود dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

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

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

انجام ... حلقه تا خالی شدن (سلول ها (iRow, 1))

پاسخ دهید