حلقه در اکسل
حلقه
حلقهزنی یکی از قویترین تکنیکهای برنامهنویسی است. حلقه در اکسل VBA به شما این امکان را میدهد که تنها با چند خط کد از میان طیفی از سلولها عبور کنید.
حلقه تک
شما میتوانید از یک حلقه برای عبور از یک محدوده یکبعدی از سلولها استفاده کنید.
یک دکمه دستوری را روی کاربرگ خود قرار دهید و خطوط کد زیر را اضافه کنید:
Dim i As Integer
For i = 1 To 6
Cells(i, 1).Value = 100
Next i
با این کار، سلولهای ستون اول از ردیف 1 تا 6 مقدار 100 را خواهند گرفت.
نتیجه زمانی که روی دکمه فرمان روی برگه کلیک می کنید:
توضیح: خطوط کد بین For و Next شش بار اجرا میشوند. برای i = 1، اکسل VBA مقدار 100 را در سلول محل تقاطع ردیف 1 و ستون 1 وارد میکند. وقتی اکسل VBA به Next i میرسد، i را یک واحد افزایش میدهد و به دستور For بازمیگردد. برای i = 2، اکسل VBA مقدار 100 را در سلول محل تقاطع ردیف 2 و ستون 1 و به همین ترتیب وارد میکند.
توجه: بهتر است که همیشه کد را بین کلمات For و Next قرار دهید. این کار خواندن کد شما را آسانتر میکند.
دو حلقه
شما میتوانید از یک حلقه دوتایی برای عبور از یک محدوده دوبعدی از سلولها استفاده کنید.
یک دکمه دستوری را روی کاربرگ خود قرار دهید و خطوط کد زیر را اضافه کنید:
Dim i As Integer, j As Integer
For i = 1 To 6
For j = 1 To 2
Cells(i, j).Value = 100
Next j
Next i
با این کار، سلولهای محدوده A1 مقدار 100 را خواهند گرفت.
نتیجه زمانی که روی دکمه فرمان روی برگه کلیک می کنید:
برای i = 1 و j = 1، اکسل VBA مقدار 100 را در سلول محل تقاطع ردیف 1 و ستون 1 وارد میکند. هنگامی که اکسل VBA به Next j میرسد، j را یک واحد افزایش میدهد و به دستور For j بازمیگردد. برای i = 1 و j = 2، اکسل VBA مقدار 100 را در سلول محل تقاطع ردیف 1 و ستون 2 وارد میکند. سپس، اکسل VBA j را نادیده میگیرد زیرا j فقط از 1 تا 2 اجرا میشود. وقتی اکسل VBA به Next i میرسد، i را یک واحد افزایش میدهد و به دستور For i بازمیگردد. برای i = 2 و j = 1، اکسل VBA مقدار 100 را در سلول محل تقاطع ردیف 2 و ستون 1 و به همین ترتیب وارد میکند.
حلقه سهگانه
میتوانید از یک حلقه سهگانه برای حلقهگذاری محدودههای دوبعدی در چندین کاربرگ اکسل استفاده کنید.
یک دکمه دستوری را روی کاربرگ خود قرار دهید و خطوط کد زیر را اضافه کنید:
Dim c As Integer, i As Integer, j As Integer
For c = 1 To 3
For i = 1 To 6
For j = 1 To 2
Worksheets(c).Cells(i, j).Value = 100
Next j
Next i
Next c
تنها تغییری که در مقایسه با کد حلقه دوگانه ایجاد شده، این است که یک حلقه دیگر برای کاربرگها (Worksheets(c)) اضافه کردهایم. این کد برای c = 1، محدوده دو بعدی صفحه اول، برای c = 2، محدوده دو بعدی صفحه دوم و برای c = 3، محدوده دو بعدی صفحه سوم را پر میکند. برای مشاهده این نتیجه، فایل اکسل را دانلود کنید.
علاوه بر حلقه For Next، حلقههای دیگری نیز در Excel VBA وجود دارند. به عنوان مثال، حلقه Do While. کد قرار داده شده بین Do While و Loop تا زمانی که شرط بعد از Do While صحیح باشد، تکرار میشود.
1.یک دکمه دستوری را روی کاربرگ خود قرار دهید و خطوط کد زیر را اضافه کنید:
Dim i As Integer
i = 1
Do While i < 6
Cells(i, 1).Value = 20
i = i + 1
Loop
در این کد، مقدار اولیه i برابر با ۱ است. حلقه Do While تا زمانی که مقدار i کمتر از 6 باشد، تکرار میشود. در هر تکرار، مقدار سلول در ستون 1 و ردیف i برابر با 20 قرار میگیرد و سپس مقدار i یک واحد افزایش مییابد.
نتیجه زمانی که روی دکمه فرمان روی برگه کلیک می کنید:
توضیح: تا زمانی که i کمتر از ۶ باشد، اکسل VBA مقدار ۲۰ را در سلول محل تقاطع ردیف i و ستون ۱ وارد میکند و سپس i را یک واحد افزایش میدهد. در اکسل VBA (و در سایر زبانهای برنامهنویسی)، نماد “=” به معنای “میشود” است، نه “برابر است با”. بنابراین، عبارت “i = i + 1” به این معناست که مقدار i یک واحد افزایش مییابد. به عبارت دیگر، مقدار فعلی i گرفته شده و ۱ به آن اضافه میشود. به عنوان مثال، اگر i برابر با ۱ باشد، i به ۲ تبدیل میشود. در نتیجه، مقدار ۲۰ در ستون A پنج بار قرار میگیرد (نه شش بار، زیرا اکسل VBA زمانی که i برابر با ۶ شود، متوقف میشود).
2. تعدادی عدد را در ستون A وارد کنید.
3.یک دکمه فرمان را روی کاربرگ خود قرار دهید و خطوط کد زیر را اضافه کنید:
Dim i As Integer
i = 1
Do While Cells(i, 1).Value <> “”
Cells(i, 2).Value = Cells(i, 1).Value + 10
i = i + 1
Loop
این کد مقادیر ستون اول را بررسی میکند و تا زمانی که مقدار یک سلول در ستون اول خالی نباشد، حلقه ادامه پیدا میکند. در هر تکرار، مقدار سلول مربوطه در ستون دوم برابر با مقدار سلول در ستون اول به اضافه ۱۰ قرار میگیرد و سپس مقدار i یک واحد افزایش مییابد
نتیجه زمانی که روی دکمه فرمان روی برگه کلیک می کنید:
توضیح: تا زمانی که مقدار Cells(i, 1).Value خالی نباشد (<> به معنی “برابر نیست”)، اکسل VBA مقدار سلول در محل تقاطع ردیف i و ستون 2 را برابر با 10 بیشتر از مقدار سلول در محل تقاطع ردیف i و ستون 1 قرار میدهد. اکسل VBA زمانی متوقف میشود که مقدار Cells(7, 1).Value خالی باشد، زیرا در این مثال، فرض بر این است که سلولهای ردیف ۷ و بعد از آن خالی هستند. این یک راه عالی برای حلقه زدن از طریق هر تعداد ردیف در یک کاربرگ است.