زنگ

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

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

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

چرخه برایدارای نحو زیر است:
برای پیشخوان = شروع چرخه به پایان چرخه [گام گام]
گروهی از عملگرها، دستورات و غیره
خروج برای
بعد پیشخوان

  • "پیشخوان" -متغیری که به مقدار مشخص شده تغییر می کند "گام".اگر مرحله مشخص نشده باشد، به طور پیش فرض یکی برداشته می شود.
  • "شروع چرخه", "پایان چرخهاعداد یا متغیرهایی که حد پایین شمارنده و حد بالایی را نشان می دهند. چرخه زمانی که متوقف می شود "کنترل" >"پایان چرخه" (یا اگر چرخه معکوس شود، یعنی. با مرحله -1، سپس "پیشخوان"< "پایان چرخه").
  • خروج برای-دستور برای مجبور کردن چرخه به توقف. در مواردی استفاده می شود که رویدادی رخ داده است، پس از آن لازم است اجرای دستورات در حلقه متوقف شود یا از بروز خطا جلوگیری شود.

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

مثال 1
با توجه به دو ستون C و E پر از اعداد:

شما باید اعداد ستون C را با اعداد ستون E به صورت زیر اضافه کنید:
C2+E21, C3+E20, ..., C21+E2. خروجی نتیجه را در ستون D به صورت فرمول به عنوان مثال. محتوای سلول نتیجه باید "=C2+E21" باشد.

کد ماکرو به این شکل است (ما می خوانیم که کجا کد را بنویسیم):

زیر Loop_For()
"ثابتی که حد چرخه را نشان می دهد، یعنی تا چه مقدار چرخه باید اجرا شود
Const n=21
برای i = 2 به n
"یک فرمول رشته ای ایجاد کنید و آن را در یک سلول ذخیره کنید
سلول (i، 4) = "=C" و CStr(i) & "+E" & CStr((n - i) + 2)
"ادامه هنگام اجرا در یک حلقه
بعدمن
" بقیه کد برنامه
پایان فرعی

بیایید کد نوشته شده را تجزیه و تحلیل کنیم:

  • Const n = 21 - توصیف ثابت n با مقدار 21، یعنی. تعداد خطوطی که باید از طریق آنها حلقه بزنید برای;
  • برای i = 2 به n - i شمارنده ای است که با هر تکرار حلقه 1 تغییر می کند. شمارنده از 2 شروع می شود و با i>n به پایان می رسد.
  • سلول ها (i، 4) - سلول اختصاصی sheet، i شماره ردیف است، 4 شماره ستونی است که نتیجه در آن نمایش داده می شود. توجه داشته باشید که شمارنده i ما شماره ردیف صفحه اکسل را نشان می دهد.
  • بعدی منم-عملگر برای بستن حلقه و انتقال اشاره گر به برای.همه چیز در این بین برایو بعددر یک حلقه اجرا می شود.
  • CStr-تابعی که یک عدد را به متن تبدیل می کند.

ما فرمول ایجاد شده را به صورت زیر به سلول اختصاص می دهیم "=C" و CStr(i) & "+E" & CStr((n - i) + 2). علامت و - "چسباندن" کاراکترها، خطوط. در نتیجه، فرمول "=Cn+E((n - i) + 2)" را دریافت می کنیم که در آن n = 21، i شمارنده است.
ترسناک؟ فقط به نظر می رسد :)

همه. پس از اجرای ماکرو، ستون زیر (هایلایت شده) و در هر سلول فرمول را دریافت می کنیم:

مثال 2
اکنون یک چرخه با مرحله نشان داده شده در نظر بگیرید. پس از محاسبه آخرین ماکرو، سه ستون دریافت کردیم، اکنون باید D را از ستون E کم کنیم و فرمول های تفریق را در ستون F نمایش دهیم. کد ماکرو به صورت زیر است:

زیر Loop_For_with_step()
Const n=21
برای i = n به 2 گام -1
سلول (i، 6) = "=E" و CStr(شناسه" & CStr(من)
بعدمن
پایان فرعی

در این مورد، همه چیز یکسان است، فقط حلقه اکنون نه از 2، بلکه از 21 به 2 با یک مرحله (Step) -1 "اجرا می شود".
نتیجه اجرا به صورت زیر خواهد بود:

چرخه برای، در VBA، یک حلقه واحد نیست. در آینده، چند گزینه دیگر برای حلقه ها در نظر گرفته خواهد شد که هنگام نوشتن ماکروها در اکسل ضروری هستند.

ممکن است شرایطی پیش بیاید که لازم باشد یک بلوک کد را چندین بار اجرا کنید. به طور کلی، دستورات به صورت متوالی اجرا می شوند: اولین دستور در تابع ابتدا، سپس دوم و غیره اجرا می شود.

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

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

VBA انواع حلقه های زیر را برای رسیدگی به الزامات حلقه ارائه می دهد. برای بررسی جزئیات آنها روی لینک های زیر کلیک کنید.

برای حلقه

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

نحو

در زیر سینتکس حلقه for در VBA آمده است.

برای شمارنده = شروع به پایان .... .... بعد

نمودار جریان

در زیر جریان کنترل در حالت حلقه آمده است -

  • مرحله اول در حال انجام است. این مرحله به شما امکان می دهد تا هر متغیر کنترل حلقه را مقداردهی اولیه کنید و متغیر شمارنده گام را افزایش دهید.
  • دوم، شرایط ارزیابی می شود. اگر درست باشد، بدنه حلقه اجرا می شود. اگر نادرست باشد، بدنه حلقه اجرا نمی شود و جریان کنترل بلافاصله پس از آن به دستور بعدی منتقل می شود. برای حلقه.
  • پس از اجرای حلقه for، جریان کنترل به دستور بعدی منتقل می شود. این عبارت به شما امکان می دهد هر متغیر کنترل حلقه را به روز کنید. بر اساس مقدار شمارنده گام به روز می شود.
  • وضعیت اکنون دوباره ارزیابی می شود. اگر این درست باشد، حلقه اجرا می شود و فرآیند تکرار می شود (بدنه حلقه، سپس مرحله افزایش می یابد و دوباره شرط). پس از false شدن شرط، حلقه For به پایان می رسد.

مثال

یک دکمه اضافه کنید و تابع زیر را اضافه کنید.

زیر خصوصی Constant_demo_Click() Dim a به عنوان عدد صحیح a = 10 برای i = 0 به مرحله 2 MsgBox "مقدار i است: " & i زیر انتهای بعدی

هنگامی که کد بالا کامپایل و اجرا می شود، نتیجه زیر را ایجاد می کند.

مقدار i است: 0
مقدار i است: 2
مقدار i است: 4
مقدار i است: 6
مقدار i است: 8
مقدار i است: 10

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

برای ... حلقه

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

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

نحو

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

برای هر عنصر در گروه .... بعدی

مثال

Private Sub Constant_demo_Click() "fruits یک آرایه است میوه ها = آرایه("سیب"، "پرتقال"، "گیلاس") نام میوه کم رنگ به عنوان متغیر "تکرار با استفاده از هر حلقه. برای هر مورد در میوه‌ها نام‌های میوه = نام‌های میوه و کالا و Chr(10) MsgBox بعدی نام‌های میوه پایان زیر

هنگامی که کد بالا اجرا می شود، همه نام میوه ها را با یک عنصر در هر خط چاپ می کند.

سیب
نارنجی
گیلاس

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

در حالی که..وند حلقه

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

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

نحو

در زیر سینتکس حلقه while..Wend در VBA آمده است.

در حالی که شرط (ها) ... Wend

نمودار جریان

مثال

زیر خصوصی Constant_demo_Click() Dim Counter: Counter = 10 while Counter< 15 " Test value of Counter. Counter = Counter + 1 " Increment Counter. msgbox "The Current Value of the Counter is: " & Counter Wend " While loop exits if Counter Value becomes 15. End Sub

وقتی کد بالا اجرا شد، در قسمت پیام خروجی زیر را خواهد داشت.

ارزش فعلی شمارنده: 11
ارزش فعلی شمارنده: 12
ارزش فعلی شمارنده: 13
ارزش فعلی شمارنده: 14
ارزش فعلی شمارنده: 15

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

انجام..در حالی که حلقه

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

نحو

در زیر سینتکس Do...While در VBA آمده است.

Do while شرط ...... حلقه

نمودار جریان

مثال

مثال زیر از یک حلقه Do ... while برای بررسی وضعیت در ابتدای حلقه استفاده می کند. دستورات داخل حلقه فقط در صورتی اجرا می شوند که شرط True شود.

Private Sub Constant_demo_Click() Do while i< 5 i = i + 1 msgbox "The value of i is: " & i Loop End Sub

مقدار i برابر است با: 1
مقدار i برابر است با: 2
مقدار i برابر است با: 3
مقدار i: 4 است
مقدار i: 5 است

نحو جایگزین

همچنین یک نحو جایگزین برای حلقه Do ... while وجود دارد که وضعیت را در انتهای حلقه بررسی می کند. تفاوت اصلی بین این دو نحو در مثال زیر توضیح داده شده است.

انجام ....... Loop while شرط

مثال

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

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 MsgBox "مقدار i است: " و i Loop while i< 3 "Condition is false.Hence loop is executed once. End Sub

هنگامی که کد بالا اجرا می شود، خروجی زیر را در یک جعبه پیام چاپ می کند.

مقدار i برابر با 11 است

دستورات do..While تا زمانی که شرط True باشد اجرا خواهند شد. (یعنی) حلقه باید تا زمانی که شرط False شود تکرار شود.

انجام.. حلقه داخل

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

نحو

در زیر سینتکس حلقه Do..Until در VBA آمده است.

انجام دهید تا شرط ... ... حلقه

نمودار جریان

مثال

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

زیر خصوصی Constant_demo_Click() i = 10 انجام دهید تا i>15 "شرط نادرست است. از این رو حلقه i = i + 1 msgbox اجرا می شود ("مقدار i است: " & i) Loop End Sub

هنگامی که کد بالا اجرا می شود، خروجی زیر را در یک جعبه پیام چاپ می کند.

مقدار i برابر با 11 است
مقدار i برابر با 12 است
مقدار i برابر با 13 است
مقدار i برابر با 14 است
مقدار i برابر با 15 است
مقدار i برابر با 16 است

نحو جایگزین

همچنین یک دستور جایگزین Do ... Before Loop وجود دارد که شرایط را در انتهای حلقه آزمایش می کند. تفاوت اصلی بین این دو نحو با مثال زیر توضیح داده شده است.

انجام ... ... حلقه تا شرط

نمودار جریان

مثال

مثال زیر از Do ... Before Loop برای بررسی یک شرط در انتهای حلقه استفاده می کند. دستورات داخل حلقه حداقل یک بار اجرا می شوند، حتی اگر شرط True باشد.

Private Sub Constant_demo_Click() i = 10 Do i = i + 1 msgbox "مقدار i است: " & i Loop Until i more15 "شرط True است. بنابراین حلقه یک بار اجرا می شود. پایان Sub

هنگامی که کد بالا اجرا می شود، خروجی زیر را در یک جعبه پیام چاپ می کند.

مقدار i برابر با 11 است

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

سوابق کنترل حلقه

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

بیانیه کنترل و توضیحات

خروج اپراتور

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

نحو

در زیر دستور Exit For Statement در VBA آمده است.

نمودار جریان

مثال

مثال زیر از Exit For استفاده می کند. اگر تعداد به 4 برسد، حلقه For به پایان می رسد و کنترل بلافاصله پس از حلقه For به دستور بعدی منتقل می شود.

Private Sub Constant_demo_Click() Dim a As Integer a = 10 برای i = 0 به مرحله 2 "i متغیر شمارنده است و 2 MsgBox افزایش می یابد ("مقدار i است: " & i) اگر i = 4 سپس i = i * 10 "این فقط در صورتی اجرا می شود که i=4 MsgBox ("مقدار i است: " & i) خروج برای "خروج زمانی که i=4 پایان می یابد اگر زیر پایان بعدی

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

مقدار i است: 0
مقدار i است: 2
مقدار i است: 4
مقدار i است: 40

دستور حلقه For را پایان می دهد و اجرا را بلافاصله بعد از حلقه به دستور منتقل می کند

از Do خارج شوید

دستور Exit Do زمانی استفاده می شود که بخواهیم بر اساس معیارهای خاصی از Do Loops خارج شویم. می توان از آن در هر دو حلقه Do Do ... while و Do ... Before استفاده کرد.

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

نحو

در زیر دستور Exit Do در VBA آمده است.

مثال

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

Private Sub Constant_demo_Click() i = 0 Do while i<= 100 If i >10 سپس از Do خارج شوید " حلقه خارج می شود اگر i>10 پایان اگر MsgBox ("مقدار i است: " & i) i = i + 2 حلقه پایان فرعی

هنگامی که کد بالا اجرا می شود، خروجی زیر را در یک جعبه پیام چاپ می کند.

مقدار i برابر با 0 است
مقدار i این است: 2
مقدار i برابر است با 4
مقدار i برابر است با: 6
مقدار i برابر با 8 است
مقدار i برابر است با 10

یک دستور Do while را پایان می دهد و اجرا را بلافاصله بعد از حلقه به دستور منتقل می کند

برای ... حلقه بعدی VBA Excel، نحو آن و شرح اجزای جداگانه. نمونه هایی از استفاده از حلقه For...Next.

برای... حلقه بعدی در VBA Excel برای اجرای گروهی از دستورات طراحی شده است مقدار مورد نیازبار، داده شده توسط متغیر کنترل چرخه - شمارنده. همانطور که حلقه اجرا می شود، مقدار شمارنده پس از هر تکرار با عدد مشخص شده توسط عبارت Step یا به طور پیش فرض یک عدد افزایش یا کاهش می یابد. هنگامی که لازم است عناصری را که تعداد و نمایه آنها در یک گروه (محدوده، آرایه، مجموعه) ناشناخته است حلقه بزنید، از .

برای... نحو حلقه بعدی

برای شمارنده = شروع به پایان [ مرحله مرحله ] [ بیانیه ها ] [ خروج برای ] [ بیانیه ها ] بعدی [ شمارنده ] برای شمارنده = شروع تا پایان [ مرحله مرحله ] [ بیانیه ها ] [ خروج برای ] [ بیانیه ها ] بعدی [ شمارنده ]

AT براکت های مربعویژگی های اختیاری حلقه For...Next مشخص شده است.

برای ... اجزای حلقه بعدی

مولفه شرح
پیشخوان ویژگی مورد نیاز متغیر عددی که به عنوان شمارنده عمل می کند که به آن متغیر کنترل حلقه نیز می گویند.
شروع کنید ویژگی مورد نیاز عبارت عددی که مشخص می کند مقدار اولیهپیشخوان.
پایان ویژگی مورد نیاز عبارت عددی که مقدار پایانی شمارنده را مشخص می کند.
گام* ویژگی اختیاری عبارتی که نشان می دهد مرحله حلقه تنظیم خواهد شد.
گام ویژگی اختیاری عبارت عددی که مرحله چرخه را مشخص می کند. می تواند هم مثبت و هم منفی باشد.
بیانیه ویژگی** اختیاری. اپراتورها در کد شما
خروج برای ویژگی اختیاری یک دستور خروج از یک حلقه قبل از پایان آن.
بعدی [پیشخوان] اینجا پیشخوان- ویژگی اختیاری این همان نام متغیر کنترل حلقه است که در اینجا می توان آن را حذف کرد.

*اگر صفت گاماز دست رفته، حلقه For...Next با یک مرحله پیش‌فرض اجرا می‌شود 1 .

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

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

می توانید حلقه های نمونه را در ماژول VBA خود کپی کنید، آنها را یکی یکی اجرا کنید و نتایج را ببینید.

ساده ترین چرخه

ده خانه اول ستون اول برگه فعال را پر کنید اعداد اکسل 1 تا 10:

آزمون فرعی 1() کم نور i به مدت i = 1 تا 10 سلول (i, 1) = i انتهای بعدی فرعی

ساده ترین حلقه گام

یک عبارت Step با مقدار 3 به حلقه قبلی اضافه می شود و نتایج در ستون دوم نوشته می شود:

Sub test2() Dim i As Long For i = 1 تا 10 مرحله 3 سلول ها (i, 2) = i پایان بعدی Sub

حلقه با آرگومان های منفی

این حلقه ده خانه اول ستون سوم را به ترتیب معکوس پر می کند:

Sub test3() Dim i به مدت i = 0 تا -9 مرحله -1 سلولها (i + 10, 3) = i + 10 پایان بعدی زیر

اندازه گام را به -3 افزایش دهید و نتایج را در ستون چهارم برگه فعال اکسل بنویسید:

Sub test4() Dim i As Long For i = 0 تا -9 مرحله -3 سلول (i + 10, 4) = i + 10 پایان بعدی Sub

حلقه تو در تو

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

Sub test5() Dim i1 As Long, i2 As Long برای i1 = 1 تا 10 , 5) + Cells(i1, i2) بعد بعدی پایان Sub

خروج حلقه

در ستون ششم شیت فعال نام ده حیوان را می نویسیم البته با استفاده از حلقه For ... بعدی:

Sub test6() Dim i As Long For i = 1 تا 10 سلول (i, 6) = انتخاب کنید (i، "خرس"، "فیل"، "زرافه"، "آنتلوپ"، _ "Crocodile"، "Gebra"، "ببر"، "مارمولک"، "شیر"، "بهموت") پایان بعدی فرعی

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

Sub test7() Dim i As Long For i = 1 تا 10 If Cells(i, 6) = "Crocodile" then Cells(i, 7) = "او گالوش خورد" Exit For Else Cells(i, 7) = "اینجا یک حلقه وجود داشت" End If Next End Sub

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

حلقه با آرگومان های کسری

ویژگی های شروع، پایان و مرحله را می توان با یک عدد، یک متغیر یا یک عبارت عددی نشان داد:

برای i = 1 تا 20 مرحله 2 برای i = a به b مرحله c برای i = a - 3 به 2b + 1 مرحله c/2

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

"مقادیر ویژگی قبل از گرد کردن برای i = 1.5 به 10.5 مرحله 2.51 "مقادیر ویژگی برای i = 2 به 10 گرد شد مرحله 3

سعی کنید اجازه ندهید که مقادیر آرگومان نامحدود وارد بدنه حلقه For...Next شوند تا نتایج غیر قابل پیش بینی از اجرای آن به دست نیاید. اگر نیاز به استفاده از اعداد کسری دارید و می خواهید از گرد کردن معمولی استفاده کنید، از تابع WorksheetFunction.Round در کد VBA خود برای گرد کردن یک عدد قبل از استفاده از آن در حلقه For...Next استفاده کنید.

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

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

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

حلقه "برای... بعدی".

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

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

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

در مثال بالا، مرحله افزایش حلقه مشخص نشده است، بنابراین متغیر را افزایش دهید من 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 ، بنابراین متغیر منبا هر تکرار حلقه مقادیر 10، 9، 8، ... 1 را می گیرد.

برای هر حلقه

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

کم نور wSheet به عنوان کاربرگ برای هر wsheet در کاربرگ MsgBox "Sheet Found: " & wSheet.Name wSheet بعدی

عبارت Break Loop "Exit For"

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

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

برای i = 1 تا 100 اگر dValues(i) = dVal سپس IndexVal = i خروج برای End If Next i

در ویژوال بیسیک Loop انجام دهید

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

"رویه Sub اعداد فیبوناچی را که از 1000 زیر فیبوناچی تجاوز نمی کند، خروجی می دهد: Dim i As Integer "یک شمارنده برای نشان دادن موقعیت عنصر در دنباله Dim iFib As Integer "مقدار فعلی دنباله Dim iFib_Next As Integer را ذخیره می کند" مقدار بعدی دنباله Dim iStep As Integer "اندازه افزایش بعدی را ذخیره می کند" متغیرهای i و iFib_Next i = 1 iFib_Next = 0 مقداردهی اولیه می کند. در حالی که iFib_Next< 1000 If i = 1 Then "особый случай для первого элемента последовательности iStep = 1 iFib = 0 Else "сохраняем размер следующего приращения перед тем, как перезаписать "текущее значение последовательности iStep = iFib iFib = iFib_Next End If "выводим текущее число Фибоначчи в столбце A активного рабочего листа "в строке с индексом i Cells(i, 1).Value = iFib "вычисляем следующее число Фибоначчи и увеличиваем индекс позиции элемента на 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

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

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

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

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

Until Loop را در ویژوال بیسیک انجام دهید

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

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

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

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

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

الگوریتم حلقه For….Next در شکل نشان داده شده است. 5.28.

پیشخوان – معمولاً هر متغیر عددی VBA متغیر نوععدد صحیح یا طولانی.

شروع کنید - هر عبارت عددی و مقدار اولیه را برای متغیر Counter تعریف می کند.

پایان - یک عبارت عددی که مقدار نهایی متغیر را تعیین می کند پیشخوان .

بیانیه - یک، چند یا بدون اپراتور. این دستورات بدنه حلقه را اجرا می کنند. VBA هر یک از این دستورات را با هر بار اجرای حلقه اجرا می کند.

کلمه کلیدی بعد

Counter=counter+StepSise

شکل 9.28. برای….الگوریتم حلقه بعدی

کلمه کلیدی بعد به VBA می گوید که به انتهای حلقه رسیده است. متغیر Counter اختیاری بعد از کلمه کلیدی Next باید همان متغیر Counter باشد که بعد از کلمه کلیدی For در ابتدای ساختار حلقه مشخص شده است.

نحو:

برای شمارنده = شروع تا پایان

هنگام اجرای یک حلقهبرایبعد VBAبه شرح زیر پیش می رود:

مقدار نمایش داده شده را اختصاص می دهد ستاره , متغیر از جانب بیرون .

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

یک متغیر را تغییر می دهد از جانب بیرون با مقدار اندازه گام (اگر کلمه اختیاری Step گنجانده شود) اگر Step تعریف نشده باشد، VBA متغیر شمارنده را 1 افزایش می دهد.

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

9.2.4. ورودی-خروجی آرایه های یک بعدی و دو بعدی

آرایه (آرایه) مجموعه ای از متغیرهایی است که نام و نوع پایه مشترک دارند. آرایه است راه راحتذخیره چندین عنصر داده مرتبط در یک ظرف واحد برای راحتی بیشتر و کارایی برنامه نویسی. تمام عناصر داده ذخیره شده در یک آرایه باید از یک نوع باشند.

یک آرایه به شما اجازه می دهد تا تعداد زیادی از داده ها را از طریق یک متغیر ذخیره و دستکاری کنید. علاوه بر کاهش تعداد کل نام متغیرهای مختلف که نیاز به پیگیری دارند، یکی دیگر از مزایای اصلی استفاده از آرایه ها این است که می توانید از حلقه ها برای پردازش آسان عناصر مختلف آرایه ها استفاده کنید. با ترکیب آرایه ها و ساختارهای حلقه (معمولاً For….Next) می توانید تعداد کمی دستور بنویسید که حجم زیادی از داده را پردازش می کند. انجام کارهای مشابه با استفاده از متغیرهای فردی ممکن است نیازمند نوشتن صدها عبارت باشد.

ابعاد آرایه

زبان های برنامه نویسی معمولاً از آرایه های یک بعدی و چند بعدی استفاده می کنند که برخی از آنها اشیاء نسبتاً ساده را توصیف می کنند در حالی که برخی دیگر اشیاء پیچیده تر را توصیف می کنند.

آرایه های تک بعدی

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

جدول شماره 9.9

در برنامه نویسی معمولاً از شماره گذاری مبتنی بر صفر استفاده می شود.

برای دسترسی به داده های ذخیره شده در یک عنصر خاص از یک آرایه، نام آرایه را به همراه یک عدد مشخص می کنید که به آن شاخص عنصر می گویند. شاخص در داخل پرانتز قرار گرفته است. به عنوان مثال، اگر آرایه در جدول 1.1 DoubleArray نام داشته باشد، عبارت زیر عدد 45 را به DoubleAny اختصاص می دهد.

DoubleAny = DoubleArray (3)

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

هنگام اجرای دستور DoubleArray، VBA مقدار 45 را انتخاب می کند و آن مقدار را در متغیر DoubleArray ذخیره می کند.

هنگام ذخیره داده ها در یک آرایه می توان از همان عملگر استفاده کرد:

DoubleArray (5)=12.

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

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

آرایه های چند بعدی

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

در یک آرایه دو بعدی، آدرس هر سلول از دو عدد تشکیل شده است: شماره ردیف (شاخص اول) و شماره ستون (شاخص دوم). در VBA می توانید آرایه هایی تا 60 بعد ایجاد کنید.

اگر تعداد عناصر آرایه تغییر نکند، چنین آرایه ای استاتیک نامیده می شود.

آرایه های استاتیک و پویا

اگر بتوانید تعداد عناصر یک آرایه را در حین اجرای یک برنامه VBA تغییر دهید، آنگاه چنین آرایه هایی پویا نامیده می شوند. عملگر ReDim برای تغییر اندازه یک آرایه پویا استفاده می شود.

VBA تا زمانی که متغیر نوع آرایه وجود داشته باشد، یک ناحیه ذخیره شده از حافظه را برای همه عناصر یک آرایه نگه می دارد. چنین آرایه هایی استاتیک نامیده می شوند زیرا تعداد عناصر آرایه تغییر نمی کند.

اپراتورگزینه پایه

به طور معمول، VBA از آرایه های مبتنی بر صفر استفاده می کند. دستور Option Base به شما امکان می دهد 0 یا 1 را به عنوان دانه پیش فرض برای شاخص های آرایه مشخص کنید. اگر اپراتور گزینه پایه استفاده نشده است، VBA شماره گذاری شاخص را از 0 شروع می کند (پیش فرض). قبل از اعلام هر متغیر، ثابت یا رویه، باید یک عبارت Option Base را در ناحیه اعلان یک ماژول قرار دهید. شما نمی توانید یک عبارت Option Base را در داخل یک رویه قرار دهید. شما می توانید تنها یک عبارت Option Base در یک ماژول داشته باشید.

نحو:

گزینه پایه 0|1

اعلام آرایه

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

نحو:

DimVarName()

Dim VarName (بالا، بالا]….)[ مانند نوع],

VarName هر نامی برای آرایه ای است که قوانین VBA برای نام گذاری شناسه ها را برآورده می کند.

اشتراک ها - بعد آرایه.

به عنوان نوع - نوع داده.

پایین تر - کران پایینی مقدار شاخص.

بالا - حد بالایی مقدار شاخص.

نوع - نوع داده

اگر نوع را حذف کنید، همه عناصر آرایه از نوع Variant خواهند بود. VBA عناصر آرایه های عددی را صفر و عناصر آرایه های رشته ای را به رشته های خالی مقدار دهی می کند.

Dim str_array (1 تا 100) به عنوان رشته

Dim variant_array()

Dim str_Multiplication (0 تا 15، 0 تا 15) به عنوان رشته

استفاده از آرایه ها

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

دسترسی به یک عنصر آرایه دارای نحو زیر است.

نحو.

آرایه نام (validIndex1، ....)

validIndex نام آرایه است.

validIndex1- ارزش مجازشاخص برای بعد اول آرایه.

validIndex2 یک مقدار شاخص معتبر برای بعد دوم آرایه است.

هر بار که به هر عنصر آرایه دسترسی پیدا می کنید، باید یک مقدار شاخص برای هر بعد آرایه ارائه کنید.

ورودی/خروجی آرایه های یک بعدی

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

الگوریتم ورودی/خروجی برای یک آرایه تک بعدی در شکل 5.29 نشان داده شده است.

روش کار در زیر توضیح داده شده است.

آرایه فرعی () - نام رویه.

Dim Mas (5) به عنوان عدد صحیح - یک آرایه یک بعدی با 5 عنصر، نوع عدد صحیح اعلام شده است.

Dim s As String - یک متغیر کاری برای خروجی نهایی داده از آرایه در کادر محاوره ای اعلام کرد. As String نوع داده ای است که در متغیر ذخیره می شود.

برای i = 1 تا 5 - رویه در اولین حلقه For….Next اعداد صحیح را از 1 تا 5 می گیرد و آنها را در یک آرایه قرار می دهد.

Mas (i) = InputBox (i) - یک عدد صحیح برای عنصر i-ام وارد کنید.

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

برای i = 1 تا 5 - عناصر در ردیف از 1 تا 5.

s = s & Mas(i) & “ ;” - تشکیل یک رشته از عناصر آرایه. آرایه در یک خط نمایش داده می شود. عناصر آرایه با کاراکتر ";" از هم جدا می شوند.

MsgBox s - خروجی آرایه وارد شده قبلی.

شکل 5.27. الگوریتم I/O یک بعدی

برنج. 9.29. الگوریتم و روش ورودی-خروجی یک آرایه تک بعدی

ورودی/خروجی آرایه دو بعدی

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

شرح این روش:

آرایه فرعی () - نام رویه

اعلان متغیرهایی که در این روش استفاده می شوند:

Dim Mas (5، 5) به عنوان Integer - یک آرایه دو بعدی با 5 ستون و پنج ردیف اعلام کرد، نوع اعداد اعداد صحیح است.

Dim s As String - یک متغیر کاری برای خروجی نهایی داده از آرایه در کادر محاوره ای اعلام کرد. به عنوان رشته - نوع داده در متغیر برای ذخیره

i بعدی - پایان عملیات انتساب متغیر

وارد کردن عناصر آرایه در حافظه کامپیوتر:

برای i = 1 تا 5 - ورودی از اولین عنصر خط اول، سپس از دوم و غیره انجام می شود.

برای j = 1 تا 5 تا انتهای خط اول، سپس از عنصر اول خط دوم و به همین ترتیب.

Mas(i,j) = InputBox(i,j) – عملگر برای وارد کردن عناصر آرایه در حافظه کامپیوتر

برنج. 9.30 الگوریتم و روش ورودی-خروجی یک آرایه دو بعدی

الگوریتم های ترتیب آرایه

به عنوان مثال، الگوریتم و روش مرتب سازی یک آرایه یک بعدی را با استفاده از روش "حباب" ارائه می کنیم.

خروجی عناصر آرایه وارد شده از حافظه کامپیوتر:

برای i = 1 تا 5 - خروجی مشابه ورودی انجام می شود

s = s & Mas(i,j) & “ ; ”

s = s & Chr (13) - تغذیه خط (خروجی نه در یک خط، بلکه در چندین، مانند آرایه ورودی)

i بعدی - پایان عبارت For….Next

MsgBox s - آرایه وارد شده قبلی را در کادر محاوره ای نمایش می دهد

End Sub - پایان روش.

زنگ

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