VBA дахь гогцоо

VBA програм нь ижил үйлдлийг хэд хэдэн удаа дараалан гүйцэтгэх шаардлагатай нөхцөл байдал байдаг (өөрөөр хэлбэл нэг кодын блокийг хэд хэдэн удаа давтах). Үүнийг VBA гогцоо ашиглан хийж болно.

VBA гогцоонууд нь:

Дараа нь бид эдгээр мөчлөг бүрийг нарийвчлан авч үзэх болно.

Visual Basic дээрх давталтын операторын хувьд

Давталтын операторын бүтэц The Visual Basic програмыг гогцоо хэлбэрээр хоёр хэлбэрийн аль нэгээр зохион байгуулж болно Учир нь… Дараа нь эсвэл гогцоо хэлбэрээр Тус бүр.

"Дараагийн төлөө ..." мөчлөг

Цикл Учир нь… Дараа нь өгөгдсөн мужаас утгыг дараалан авдаг хувьсагчийг ашигладаг. Хувьсагчийн утгыг өөрчлөх бүрт мөчлөгийн биед хавсаргасан үйлдлүүд хийгддэг. Энгийн жишээнээс үүнийг ойлгоход хялбар:

For i = 1-ээс 10 Нийт = Нийт + iArray(i) Дараагийн i

Энэ энгийн гогцоонд Учир нь… Дараа нь хувьсагчийг ашигладаг i, энэ нь 1, 2, 3, … 10 утгуудыг дараалан авдаг бөгөөд эдгээр утгуудын хувьд давталтын доторх VBA кодыг гүйцэтгэдэг. Тиймээс энэ давталт нь массивын элементүүдийг нэгтгэдэг. iArray хувьсагчаар Нийт.

Дээрх жишээнд давталтын өсөлтийг заагаагүй тул хувьсагчийг нэмэгдүүлнэ i 1-ээс 10 хүртэл, өгөгдмөл нь өсөлт юм 1… Гэсэн хэдий ч зарим тохиолдолд гогцоонд өөр өөр өсөлтийн утгыг ашиглах шаардлагатай байдаг. Үүнийг түлхүүр үг ашиглан хийж болно Алхамдараах энгийн жишээнд үзүүлсэн шиг.

d = 0-ээс 10 хүртэлх алхамын хувьд 0.1 dНийт = dНийт + d Дараагийн d

Дээрх жишээн дээр нэмэх алхам нь тэнцүү байна 0.1, дараа нь хувьсагч dНийт мөчлөгийн давталт бүрт 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0 утгыг авна.

VBA дахь давталтын алхамыг тодорхойлохын тулд та сөрөг утгыг ашиглаж болно, жишээлбэл:

For i = 10 To 1 Step -1 iArray(i) = i Дараагийн i

Энд нэмэгдэл байна -1, тэгэхээр хувьсагч i мөчлөгийн давталт бүрт 10, 9, 8, ... 1 утгыг авна.

"Бүр бүрийн хувьд" давталт

Цикл Тус бүр мөчлөгтэй төстэй Учир нь… Дараа нь, гэхдээ тоологч хувьсагчийн утгуудын дарааллыг давтахын оронд гогцоо Тус бүр заасан бүлэг объектын объект тус бүрийн багц үйлдлийг гүйцэтгэдэг. Дараах жишээнд гогцоо ашиглаж байна Тус бүр Одоогийн Excel ажлын дэвтэрт байгаа бүх хуудсыг тоолно:

WSheet-ийг ажлын хуудасны wSheet бүрийн ажлын хуудас болгон бүдгэрүүлэх MsgBox "Найден жагсаалт: " & wSheet.Нэр Дараагийн wSheet

"Гарах" давталтын тасалдлын мэдэгдэл

Оператор ExitFor мөчлөгийг тасалдуулахад ашигладаг. Код дээр ийм мэдэгдэлтэй тулгармагц програм нь давталтын гүйцэтгэлийг дуусгаж, энэ давталтын дараа шууд кодонд байгаа мэдэгдлүүдийг гүйцэтгэхэд шилжинэ. Үүнийг жишээ нь массив дахь тодорхой утгыг хайхад ашиглаж болно. Үүнийг хийхийн тулд гогцоо ашиглан массивын элемент бүрийг сканнердсан. Шаардлагатай элемент олдмогц үлдсэн хэсгийг нь үзэх шаардлагагүй - мөчлөг тасалдсан.

Операторын програм ExitFor дараах жишээнд харуулав. Энд давталт нь 100 гаруй массив оруулгыг давтаж, тус бүрийг хувьсагчийн утгатай харьцуулна. dVal... Хэрэв тохирох зүйл олдвол давталт дуусгавар болно:

For i = 1-ээс 100 Хэрэв dValues(i) = dVal Дараа нь IndexVal = i Гарах Төгсгөлийн хувьд дараагийн бол i

Visual Basic дээрх Do while давталт

Цикл Хийх зуур заасан нөхцөл хангагдсан тохиолдолд кодын блокийг гүйцэтгэдэг. Дараах нь процедурын жишээ юм дэд, үүнд гогцоо ашиглаж байна Хийх зуур 1000-аас хэтрэхгүй Фибоначчийн тоонуудыг дараалан харуулна:

'Дэд процедур нь 1000-аас хэтрэхгүй Фибоначчийн тоог гаргадаг Sub Fibonacci() Dim i As Integer 'тоолуур дараалал дахь элементийн байрлалыг заана Dim iFib As Integer 'sequence одоогийн утгыг хадгална Dim iFib_Next As Integer ' дараагийн утгыг хадгална дарааллын Dim iStep As Integer нь дараагийн өсөлтийн хэмжээг хадгалдаг 'i болон iFib_Next i = 1 хувьсагчдыг эхлүүлнэ iFib_Next = 0 'Do while давталт 'одоогийн Фибоначчийн тооны утга 1000-аас их болтол ажиллана Doext = 1000iF 1 Дараа нь 'эхний элементийн тусгай тохиолдол iStep = 1 iFib = 0 Эсвэл 'дарааллын одоогийн утгыг дарж бичихээс өмнө дараагийн өсөлтийн хэмжээг хадгална iStep = iFib iFib = iFib_Next End Хэрэв 'Одоогийн Фибоначчийн дугаарыг А баганад хэвлэ. идэвхтэй ажлын хуудасны 'index i Cells(i , 1) бүхий мөрөнд.Value = iFib 'дараагийн Фибоначчийн тоог тооцоолж, элементийн байрлалын индексийг 1-ээр нэмэгдүүлнэ iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Өгөгдсөн жишээнд нөхцөл байдал iFib_Next < 1000 давталтын эхэнд шалгасан. Тиймээс, хэрэв эхний үнэ цэнэ iFib_Next Хэрэв 1000-аас дээш байсан бол гогцоо хэзээ ч гүйцэтгэгдэхгүй.

Гогцоог хэрэгжүүлэх өөр нэг арга Хийх зуур - нөхцөлийг давталтын эхэнд биш харин төгсгөлд байрлуулна. Энэ тохиолдолд нөхцөл хангагдсан эсэхээс үл хамааран давталтыг дор хаяж нэг удаа гүйцэтгэнэ.

Схемийн хувьд ийм мөчлөг Хийх зуур Төгсгөлд нь шалгах нөхцөл нь дараах байдалтай байна.

Do ... iFib_Next < 1000 байхад давталт хийнэ

Visual Basic дээр "Хийх хүртэл" гэсэн хэсэг

Цикл Хүртэл хий мөчлөгтэй маш төстэй Хийх зуур: давталтын бие дэх кодын блок нь заасан нөхцөл биелэх хүртэл дахин дахин гүйцэтгэгдэнэ (нөхцөлт илэрхийллийн үр дүн нь Үнэн). Дараагийн журамд дэд цикл ашиглан Хүртэл хий баганын бүх нүднээс утгыг авах A багана хоосон нүдтэй тулгарах хүртэл ажлын хуудас:

iRow = 1 IsEmpty хүртэл хийх(Cells(iRow, 1)) 'Одоо байгаа нүдний утгыг dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) массивт хадгална. iRow = iRow + 1 давталт.

Дээрх жишээнд нөхцөл байдал Хоосон(Нүднүүд(iRow, 1)) бүтцийн эхэнд байрладаг Хүртэл хий, тиймээс эхний авсан нүд хоосон биш бол давталт дор хаяж нэг удаа хийгдэнэ.

Гэсэн хэдий ч давталтын жишээнүүдэд үзүүлсэн шиг Хийх зуур, зарим тохиолдолд нөхцөлт илэрхийллийн анхны үр дүнгээс үл хамааран давталтыг дор хаяж нэг удаа гүйцэтгэх шаардлагатай байдаг. Энэ тохиолдолд нөхцөлт илэрхийллийг давталтын төгсгөлд дараах байдлаар байрлуулна.

Хий ... Хоосон болтол давталт(Cells(iRow, 1))

хариу үлдээх