VBA এ লুপ

এমন পরিস্থিতি রয়েছে যখন একটি VBA প্রোগ্রামের একই সেট অ্যাকশনগুলিকে এক সারিতে বেশ কয়েকবার সঞ্চালনের প্রয়োজন হয় (অর্থাৎ, কোডের একই ব্লক একাধিকবার পুনরাবৃত্তি করুন)। এটি VBA লুপ ব্যবহার করে করা যেতে পারে।

VBA লুপ অন্তর্ভুক্ত:

এর পরে, আমরা এই চক্রগুলির প্রতিটিকে ঘনিষ্ঠভাবে দেখব।

ভিজ্যুয়াল বেসিকের লুপ অপারেটরের জন্য

লুপ অপারেটরের গঠন সার্জারির ভিজ্যুয়াল বেসিকে দুটি ফর্মের একটিতে সংগঠিত করা যেতে পারে: একটি লুপ হিসাবে পরের জন্য বা একটি লুপ হিসাবে প্রতিটির জন্য.

সাইকেল "এর জন্য ... পরবর্তী"

চক্র পরের জন্য একটি ভেরিয়েবল ব্যবহার করে যা ক্রমানুসারে একটি প্রদত্ত পরিসর থেকে মান নেয়। ভেরিয়েবলের মানের প্রতিটি পরিবর্তনের সাথে, চক্রের শরীরে আবদ্ধ ক্রিয়াগুলি সঞ্চালিত হয়। এটি একটি সাধারণ উদাহরণ থেকে বোঝা সহজ:

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, তারপর পরিবর্তনশীল d মোট চক্রের প্রতিটি পুনরাবৃত্তির জন্য 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 গ্রহণ করে।

লুপ "প্রতিটির জন্য"

চক্র প্রতিটির জন্য একটি চক্র অনুরূপ পরের জন্য, কিন্তু কাউন্টার ভেরিয়েবলের জন্য মানের অনুক্রমের উপর পুনরাবৃত্তি করার পরিবর্তে, লুপ প্রতিটির জন্য বস্তুর নির্দিষ্ট গ্রুপে প্রতিটি বস্তুর জন্য কর্মের একটি সেট সঞ্চালন করে। নিম্নলিখিত উদাহরণে, একটি লুপ ব্যবহার করে প্রতিটির জন্য বর্তমান এক্সেল ওয়ার্কবুকের সমস্ত শীট গণনা করে:

ওয়ার্কশীটের প্রতিটি ডব্লিউশিটের জন্য ওয়ার্কশীট হিসাবে ডাইম করুন

লুপ বাধা বিবৃতি "এর জন্য প্রস্থান করুন"

অপারেটর প্রস্থান করুন চক্র ব্যাহত করতে ব্যবহৃত. এই বিবৃতিটি কোডের মুখোমুখি হওয়ার সাথে সাথে, প্রোগ্রামটি লুপের কার্য সম্পাদন শেষ করে এবং এই লুপের পরে অবিলম্বে কোডে থাকা বিবৃতিগুলি সম্পাদনের দিকে এগিয়ে যায়। এটি ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, একটি অ্যারেতে একটি নির্দিষ্ট মান অনুসন্ধান করতে। এটি করার জন্য, একটি লুপ ব্যবহার করে, অ্যারের প্রতিটি উপাদান স্ক্যান করা হয়। যত তাড়াতাড়ি প্রয়োজনীয় উপাদান পাওয়া যায়, বাকিগুলি দেখার দরকার নেই - চক্রটি বাধাগ্রস্ত হয়।

অপারেটর অ্যাপ্লিকেশন প্রস্থান করুন নিম্নলিখিত উদাহরণে প্রদর্শিত। এখানে লুপটি 100 টিরও বেশি অ্যারে এন্ট্রির পুনরাবৃত্তি করে এবং প্রতিটিকে ভেরিয়েবলের মানের সাথে তুলনা করে dVal… যদি একটি মিল পাওয়া যায়, তাহলে লুপটি বন্ধ হয়ে যাবে:

i = 1 থেকে 100 এর জন্য যদি dValues(i) = dVal তারপর IndexVal = i শেষের জন্য প্রস্থান করুন যদি পরবর্তী i

ভিজ্যুয়াল বেসিকের মধ্যে লুপ করার সময়

চক্র যখন না যতক্ষণ নির্দিষ্ট শর্ত পূরণ হয় ততক্ষণ কোডের একটি ব্লক কার্যকর করে। নিম্নলিখিত একটি পদ্ধতির একটি উদাহরণ উপ, যা লুপ ব্যবহার করে যখন না ফিবোনাচি সংখ্যা 1000 এর বেশি নয় ক্রমানুসারে প্রদর্শিত হয়:

'সাব প্রসিডিউর আউটপুট ফিবোনাচ্চি সংখ্যা 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 'Do while লুপ কার্যকর হবে যতক্ষণ না 'বর্তমান ফিবোনাচি সংখ্যার মান 1000 এর বেশি না হয় Do while iFib_Next = 1000 যদি iFib_Next = 1 1 তারপর 'প্রথম উপাদানের জন্য বিশেষ কেস iStep = 0 iFib = 1 অন্যথায়' ওভাররাইট করার আগে পরবর্তী বৃদ্ধির আকার সংরক্ষণ করুন 'ক্রমের বর্তমান মান iStep = iFib iFib = iFib_Next End If' কলাম A-তে বর্তমান ফিবোনাচি নম্বর প্রিন্ট করুন সূচী i Cells(i , 1) সহ সারিতে সক্রিয় ওয়ার্কশীট। মান = iFib ' পরবর্তী ফিবোনাচি সংখ্যা গণনা করুন এবং উপাদান অবস্থানের সূচকটি 1 iFib_Next = iFib + iStep i = i + XNUMX লুপ এন্ড সাব দ্বারা বৃদ্ধি করুন।

প্রদত্ত উদাহরণে, শর্ত iFib_Next < 1000 লুপের শুরুতে চেক করা হয়েছে। অতএব, যদি প্রথম মান iFib_Next যদি 1000 টির বেশি হয় তবে লুপটি কখনই কার্যকর করা হবে না।

একটি লুপ বাস্তবায়ন আরেকটি উপায় যখন না - শর্তটি শুরুতে নয়, লুপের শেষে রাখুন। এই ক্ষেত্রে, শর্ত পূরণ করা হোক না কেন, লুপটি অন্তত একবার কার্যকর করা হবে।

Schematically, যেমন একটি চক্র যখন না শেষে চেক করা শর্তের সাথে এই মত দেখাবে:

করুন... iFib_Next < 1000 থাকাকালীন লুপ করুন

ভিজ্যুয়াল বেসিকের মধ্যে «অপর্যন্ত করুন»

চক্র পর্যন্ত করবেন চক্রের অনুরূপ যখন না: লুপের বডিতে কোডের ব্লক বারবার চালানো হয় যতক্ষণ না নির্দিষ্ট শর্ত পূরণ হয় (শর্তগত অভিব্যক্তির ফলাফল হল সত্য) পরবর্তী পদ্ধতিতে উপ একটি চক্র ব্যবহার করে পর্যন্ত করবেন একটি কলামের সমস্ত ঘর থেকে মান পুনরুদ্ধার করুন A ওয়ার্কশীট যতক্ষণ না কলাম একটি খালি ঘরের মুখোমুখি হয়:

iRow = 1 IsEmpty(Cells(iRow, 1)) পর্যন্ত করুন 'বর্তমান ঘরের মান dCellValues ​​dCellValues(iRow) = Cells(iRow, 1) অ্যারেতে সংরক্ষিত থাকে। মান iRow = iRow + 1 লুপ

উপরের উদাহরণে, শর্ত খালি (কোষ (iRow, 1)) কাঠামোর শুরুতে অবস্থিত পর্যন্ত করবেন, তাই লুপটি অন্তত একবার কার্যকর করা হবে যদি নেওয়া প্রথম ঘরটি খালি না থাকে।

যাইহোক, লুপ উদাহরণ হিসাবে দেখানো হয়েছে যখন না, কিছু পরিস্থিতিতে শর্তযুক্ত অভিব্যক্তির প্রাথমিক ফলাফল নির্বিশেষে লুপটি অন্তত একবার কার্যকর করা আবশ্যক। এই ক্ষেত্রে, শর্তসাপেক্ষ অভিব্যক্তিটি লুপের শেষে স্থাপন করা উচিত, যেমন:

কর... খালি না হওয়া পর্যন্ত লুপ (কোষ(iRow, 1))

নির্দেশিকা সমন্ধে মতামত দিন