آشنایی با مفهوم آرایه ها (Array) در برنامه نویسی VBA
آرایه ها (َArray) در برنامه نویسی VBA یکی از مفاهیم مهم و کاربردی در این زبان برنامه نویسی هستند .
مدتها قبل و در همین سایت ما راجع به آرایه ها با هم صحبت کردیم .
در مطلب مذکور ما بطور تفصیل در خصوص موارد زیر با هم صحبت کردیم .
اول بیان کردیم که کلمه آرایه اشاره به چه معنا و مفهومی دارد .
در قدم بعدی عنوان کردیم که کاربرد آرایه ها چیست و در کجاها می توان از آنها استفاده کرد .
در خصوص ساختار آرایه ها و اینکه چطور می توان یک آرایه را تعریف کرد هم در همان مطلب صحبت شد .
در انتها هم با انواع آرایه های ثابت و متغیر بصورت اسمی آشنا شدیم .
اما امروز در این مطلب می خواهیم بطور اختصاصی تر و حرفه ای تر به مبحث آرایه ها بپردازیم .
ما در این مطلب صحبتی از این نمی کنیم که چگونه یک آرایه را ایجاد کنیم.
برای آشنایی با این کار یعنی نحوه ایجاد یک آرایه و سوالاتی از این دست شما را به مطلب زیر ارجاع می دهم .
مطلب مرتبط : آشنایی با مفهوم آرایه ها در اکسل .
آنچه که در این مطلب به دنبال آن هستیم این است که بطور حرفه ای کار با آرایه ها را یاد بگیریم و بتوانیم از آنها در
برنامه های خود استفاده کنیم .
اما قبل از اینکه وارد بحث بشویم اول یک نگاهی به پرسش های زیر بکنید.
اینها سوالاتی است که در ذهن خیلی ها ایجاد می شود .
- سوال اول : آرایه ها چه کاری می توانند برای ما بکنند و کجاها قرار است به درد ما بخورند ؟
- سوال دوم : آیا کار با آرایه ها سخت است؟
- سوال سوم : اصلا می شود در کدهای خود از آرایه ها استفاده نکنیم ؟
حالا به این سوال ها پاسخ می دهیم .
در خصوص سوال اول و اینکه آرایه ها قرار است چه کاری برای ما بکنند .
آرایه قرار است کار ما را برای کد نویسی تا حد بسیار زیادی ساده کنند .
اما چگونه ؟
دقیقا در جایی که ما نیاز پیدا می کنیم که تعداد زیادی متغیر تعریف کنیم .
این جواب را تا همین جا داشته باشید تا در ادامه همین آموزش بیشتر و بهتر آن را بررسی کنیم .
اما آیا کار با آرایه ها و استفاده کردن از آنها سخت است؟
شاید کار با آرایه ها کمی سخت باشد ( یادتان باشد فقط کمی سخت) اما مطمئنا سخت تر از وضعیتی نخواهد بود که
نخواهیم از آرایه ها استفاده کنیم .
در پاسخ به سوال سوم هم باید گفت شاید در برخی از جاها که با مسائل کوچکی روبرو می شویم بتوانیم از زیر کار با آرایه ها
در برویم اما وقتی که کمی مسائل بزرگتر و پیشرفته تر می شوند خواه نا خواه مجبور می شویم که از آرایه ها استفاده کنیم .
حالا با در نظر گرفتن این موارد برویم به سراغ اصل موضوع خودمان یعنی آشنایی و کار با آرایه ها در برنامه نویسی VBA .
آرایه ها را از چند منظر می شود مورد بررسی قرار داد .
اول اینکه ببینیم که چند نوع آرایه داریم .
آرایه ها از نظر ابعاد به چند دسته تقسیم می شوند .
تقسیم بندی آرایه ها از لحاظ ابعاد آنها
۱ – آرایه های یک بُعدی
آرایه یک بعدی آرایه ای است که تمامی اعضای آن در یک جهت قرار دارند و یا به عبارتی فقط در یک سطر اطلاعات ثبت می شوند .
به تصویر زیر نگاه کنید
()Sub arrayes
(Dim myarray(6
"شنبه" = (myarray(0
"یک شنبه " = (myarray(1
"دو شنبه "=(myarray(2
"سه شنبه "=(myarray(3
"چهار شنبه "=(myarray(4
"پنج شنبه "=(myarray(5
"جمعه "=(myarray(6
End Sub
در اینجا هم درست مانند کدهای قبلی هر عضو از این آرایه اطلاعات مربوط به نام یکی از ایام هفته را در خود ذخیره می کند .
می بینید که در اینجا چقدر در کار تعریف متغیرها صرفه جویی کردیم .
حالا به تصویر زیر دقت کنید .
ما در اینجا اسامی مربوط به ۱0 قلم کالا را داریم .
می خواهیم اسامی هر کدام از این کالا ها را از اکسل گرفته و در داخل یک متغیر ذخیره کنیم .
مطمئنا کار عاقلانه ای نیست که بخواهیم برای هر کدام از این کالاها یک متغیر جداگانه تعریف کنیم .
پس به سراغ تعریف آرایه می رویم .
در اینجا ما به یک آرایه با ۱۱ عضو نیاز داریم .
پس این آرایه را به اینصورت تعریف می کنیم .
()Sub test
(Dim myarray(10
End Sub
حالا می خواهیم با استفاده از کد نویسی نام هر کدام از این کالا ها را از اکسل خوانده و نام هر کدام از آنها را در یک متغیر مختص به خودش ذخیره کنیم .
از کالای شماره ۱ شروع می کنیم .
می خواهیم این کالا را در اولین عضو از آرایه خود ذخیره کنیم برای این کار کد خود را بصورت زیر تکمیل می کنیم .
()Sub test
(Dim myarray(10
myarray(0) = Worksheets(“sheet1”).Range(“B2”).Value
End Sub
در اینجا همه چیز در خط شماره 3 اتفاق می افتد .
شاید بپرسید که چه اتفاقی ؟
اتفاق اول این است که با استفاده از عبارت ( myarray(0 مشخص می کنیم که برنامه اولین عضو از آرایه ما را آماده کند .
وقتی که این عضو آماده شد با استفاده از عبارت مساوی می گوییم که هر مقداری را که در سلول B2 موجود در شیت کاری با نام sheet1 قرار دارد را در این عضو از آرایه ما ذخیره کند .
به همین راحتی اولین عضو آرایه را مقدار دهی کردیم .
حالا می رویم به سراغ عضو بعدی آرایه خودمان .
در این عضو می خواهیم مقدار موجود در سلول بعدی را یعنی سلول B3 را ذخیره کنیم .
پس کدهای خود را به این صورت تکمیل می کنیم .
()Sub test
(Dim myarray(10
myarray(0) = Worksheets(“sheet1”).Range(“B2”).Value
myarray(1) = Worksheets(“sheet1”).Range(“B2”).Offset(1, 0).Value
End Sub
در اینجا با استفاده از متد Offset به برنامه می گوییم که از سلول B2 به اندازه یک ردیف پایین برود و مقدار سلول مربوطه را در عضو دوم آرایه ما ذخیره کند .
برای سایر اعضای آرایه نیز کار به همین منوال خواهد بود .
فقط کافی است که شماره اندیس آرایه و شماره ردیف مربوط به متد Offset را تغییر دهیم .
حالت تکمیل شده این کدها بصورت زیر است .
3
()Sub test
(Dim myarray(10
myarray(0) = Worksheets("sheet1").Range("B2").Value
myarray(1) = Worksheets("sheet1").Range("B2").Offset(1, 0).Value
myarray(2) = Worksheets("sheet1").Range("B2").Offset(2, 0).Value
myarray(3) = Worksheets("sheet1").Range("B2").Offset(3, 0).Value
.
.
.
.
.
myarray(10) = Worksheets("sheet1").Range("B2").Offset(10, 0).Value
End Sub
بنابراین با استفاده از این کدها به همین راحتی می توانیم مجموعه اطلاعات موجود در یک محدوده آرایه ها (َArray) در برنامه نویسی VBA ذخیره کنیم.
ما در مرحله اول توانستیم کاری کنیم که به جای اینکه بیاییم و ۱۰ متغیر جداگانه را برای هر کدام از مقادیر تعریف کنیم با تعریف یک آرایه همه این ۱۰ متغیر را که قرار بود در ۱۰ خط نوشته شود را در قالب یک نصفه خط خلاصه کنیم .
اما آیا می توان کاری کرد که برای مقدار دهی به این آرایه و یا هر آرایه دیگری با هر تعداد عضو هم کار راحت تری داشته باشیم .
یعنی برای اینکه بیاییم برای هر عضو از آرایه یک خط کد بنویسیم کاری کنیم که تنها با یک خط همه مقادیر مورد نظر ما در آرایه ما ذخیره شوند ؟
البته که یک راهکار مناسب برای این کار وجود دارد .
و این راهکار هم چیزی نیست جز استفاده از قابلیت حلقه ها در برنامه نویسی VBA که در ادامه همین مطلب به آن خواهیم پرداخت . اما قبل از آن به سراغ معرفی نوع دوم از متغیرها می رویم .
مطلب مرتبط : مفهوم حلقه یا Loop در برنامه نویسی VBA.
آرایه های چند بعدی در برنامه نویسی VBA
در بخش قبلی با ساده ترین نوع آرایه ها که همان آرایه های یک بعدی بود آشنا شدیم .
اما در برنامه نویسی اینطور نیست که همیشه فقط با آرایه های یک بعدی سرو کار داشته باشیم . علاوه بر آرایه های یک بعدی معمولا ما با آرایه های 2 یا چند بعدی هم سرو کار داریم که باید با آنها و نحوه استفاده کردن از آنها هم آشنا شویم.
پس در ادامه این مطلب به سراغ آرایه های چند بعدی می رویم .
1- آرایه های دو بعدی .
اگر به جای اینکه ما اطلاعاتمان را در یک سطر متوالی ذخیره کنیم بیاییم آنها را در چند سطر و ستون قرار دهیم آن وقت ما به جای یک آرایه یک بعدی با یک آرایه دو بعدی سرو کار داریم .
مثلا به تصویر زیر نگاه کنید .
اطلاعات موجود در تصویر بالا می تواند در حکم یک آرایه دو بعدی در نظر گرفته شود . چرا ؟
چون این اطلاعات در قالب 13 سطر و سه ستون در کنار هم ذخیره شده اند . حالا با در نظر گرفتن همین اطلاعات می خواهیم آنها را در قالب یک آرایه دو بعدی مورد بررسی قرار دهیم .
در اینجا می خواهیم کدهایی بنویسیم که اطلاعات موجود در این جدول را خوانده و انها را در قالب یک آرایه دو بعدی ذخیره کند .
برای این کار باید چند تا مرحله پشت سر بگذاریم .
مرحله اول : تعریف یک آرایه دو بعدی
گفتیم که اگر اطلاعات ما به جای یک سطر واحد در چند سطر در کنار هم قرار بگیرند تشکیل آرایه دو بعدی را می دهند .
تصویر زیر یک نمایی از آرایه دو بعدی را نمایش می دهد .
در کار با آرایه های دو بعدی باید دو تا چیز را یاد بگیریم .
اول اینکه یاد بگیریم چطور یک آرایه از نوع دو بعدی را تعریف کنیم .
در قدم بعدی هم باید یاد بگیریم که چطور به یک آرایه دو بعدی مقدار دهی کنیم یا به عبارت دیگر چطور می توانیم اطلاعات مورد نظر خود را در یک آرایه دو بعدی ذخیره کنیم .
در ادامه این مطلب راجع به هر دوی این موارد با هم صحبت خواهیم کرد .
چگونه یک آرایه دو بعدی تعریف کنیم ؟
پس در قدم اول برویم به سراغ اینکه چطور می شود یک آرایه دو بعدی را برای خودمان تعریف کنیم .
تعریف یک آرایه به صورت دو بعدی دقیقا مثل تعریف آرایه های خطی است .
یعنی برای یک آرایه دو بعدی هم باید یک نام اختصاصی انتخاب کنیم و هم نوع داده مشخصی را برای آن در نظر بگیریم .
تا به اینجا هر دو نوع آرایه شبیه هم هستند . اما در یک نقطه یک تفاوت وجود دارد . آن نقطه ای که باعث ایجاد این تفاوت می شود این است که در آرایه دو بعدی باید تعداد سطر ها و ستونهای مورد نظر خود را که قرار است تشکیل یک آرایه بدهند را به برنامه معرفی کنیم .
اجازه دهید که با هم یک مثال را بررسی کنیم .
به تصویر زیر دقت کنید .
اینجا ما یک سری از اطلاعات را داریم . این اطلاعات در 4 سطر و سه ستون قرار دارند . می خواهیم برای کار با این اطلاعات در برنامه نویسی وی بی ای از یک آرایه استفاده کنیم .
برای این کار من آرایه زیر را تعریف می کنم .
rem تعریف یک آرایه با 4 سطر و سه ستون
Dim myArray (4,3) AS String
در اینجا آرایه مورد نظر خود را ایجاد کردیم . اجازه دهید کمی روی این خط از کد مکث کرده و توضیحاتی را در مورد آن بدهم .
اول اینکه این آرایه ما دارای یک اسم است و آن هم myArray است . این یک اسم دلخواه است و شما می توانید هر اسمی را برای آرایه خود انتخاب کنید .
دوم اینکه نوع داده این آرایه ما یا به اصطلاح همان DataType آن از نوع String است . یعنی قرار است داده های نوع متن را در خود ذخیره کند .
نکته سوم هم مر بوط به دو عددی می شود که در داخل پرانتز و در جلوی اسم آرایه مان قرار دارد . این دو عدد به برنامه می گوید که آرایه ما یک آرایه دو بعدی است .
یعنی یک آرایه که داری 4 سطر و سه ستون است .
حالا که روش ایجاد این آرایه را یاد گرفتیم در مرحله بعد باید یاد بگیریم که چه طور می شود با این آرایه کار کرد .
یعنی چطور اطلاعات خود را در داخل آن ذخیره کنیم و یا بر عکس چطور می شود اطلاعات مورد نظر خود را که از قبل در این آرایه ذخیره شده است را استخراج کنیم .
اول برویم به سراغ روش های ذخیره کردن اطلاعات در داخل یک آرایه دو بعدی .
روش های ذخیره اطلاعات در یک آرایه دو بعدی .
برای ذخیره کردن اطلاعات در یک آرایه دو بعدی روش های مختلفی وجود دارد که در اینجا آنها را بررسی می کنیم .
اما اول بیایید یک نگاهی به اطلاعاتی کنیم که می خواهیم آنها را در قالب یک آرایه دو بعدی ذخیره کنیم .
اینجا ما یک جدول داریم که دارای 13 سطر و 4 ستون از اطلاعات است . حالا می خواهیم اطلاعات مربوط به ستون B از این جدول را استخراج و آنها را در قالب یک آرایه ی دو بعدی ذخیره کنیم .
اول باید خود آرایه را تعریف کنیم . یعنی یک آرایه با 13 سطر و 4 تا ستون .
در اینجا من این آرایه را به صورت زیر تعریف کرده ام .
Dim myarray(13, 4)
این آرایه را ایجاد کردیم در قدم بعدی باید چه کار کنیم . ؟
کاری که باید اینجا انجام دهیم این است که به تک تک اعضای این آرایه دسترسی پیدا کرده و اطلاعات مورد نظر خود را از جدول بالا خوانده و در هر کدام از اعضای آرایه خود ذخیره کنیم .
گفتیم که هر عضو از یک آرایه دو بعدی یک شماره ایندکس دو بخشی دارد .
بخش اول از شماره ایندکس اشاره به شماره ردیفی می کند که آن عضو در آن ردیف قرار دارد و عدد دوم هم اشاره به ستونی می کند که عضو مورد نظر در داخل آن ستون قرار دارد .
با در نظر گرفتن این نکته با هم به سراغ مقدار دهی و ذخیره اطلاعات مورد نظر در داخل این آرایه می کنیم .
برای این کار از کدهای زیر می توانیم استفاده کنیم .
Dim myarray(13, 4)
myarray(4, 4) = "تلويزيون"
myarray(5, 4) = "مانيتور"
myarray(6, 4) = "موس"
.
.
.
.
myarray(12, 4) = "موبايل"
myarray(13, 4) = "لپ تاپ"
این ساده ترین روشی بود که می توانیم به کمک ان یک آرایه ی دو بعدی را مقدار دهی کنیم . اما این روش در عین سادگی یک ایراد بزرگ دارد .
ایراد این است که در اینجا ما خودمان مقادیر را از جدول اطلاعات خوانده و آنها را در داخل آرایه ذخیره کرده ایم . در ادامه می خواهیم کاری کنیم که خود اکسل این کار را برای ما انجام دهد .
خُب برای این کار چند تا راه وجود دارد .
یکی از این راهها همان راهی است که در بالاتر برای مقدار دهی آرایه یک بعدی استفاده کردیم . منظورم همان استفاده از تابع Offset و آدرس دهی سلول ها است .
اگر بخواهیم از این تابع در اینجا هم استفاده کنیم می توانیم از کدهایی مثل زیر استفاده کنیم .
Dim myarray(13, 3) As String
myarray(0, 1) = Range("C2").Offset(0, 0).Value
myarray(1, 1) = Range("C2").Offset(1, 0).Value
myarray(2, 1) = Range("C2").Offset(2, 0).Value
myarray(3, 1) = Range("C2").Offset(3, 0).Value
.
.
.
.
.
myarray(12, 1) = Range("C2").Offset(12, 0).Value
myarray(13, 1) = Range("C2").Offset(13, 0).Value
این راه در عین حال یک راه حل ساده برای مقدار دهی اعضای یک آرایه است اما ایرادی که دارد این است که می تواند خیلی طولانی بوده و نیاز به خطوط کد زیادی داشته باشد .
آیا راه حل بهتری برای مقدار دهی یک آرایه وجود دارد ؟
پاسخ این سوال مثبت است . راه حل بهتر و مناسب تر استفاده از حلقه ها در مقدار دهی به یک آرایه است . ما در آموزش های قبلی راجع به حلقه ها و انواع آنها با هم صحبت کردیم .
اگر می خواهی بیشتر و بهتر راجع به حلقه ها در برنامه نویسی وی بی ای بدانی کافی است به لینک زیر مراجعه کنی :
مطلب مرتبط : مفهوم حلقه ها در برنامه نویسی VBA
حالا برویم و ببینیم که چطور می شود با استفاده از حلقه ها کار مقدار دهی به اعضای یک آرایه را ساده تر و سریعتر از قبل انجام داد .
مطالب زیر را حتما مطالعه کنید
Xlookup در اکسل- تابعی با کلی قابلیت های کاربردی
تابع Hlookup در اکسل💥نکات و ترفندهای کار با آن +ویدئو
تابع فیلتر در اکسل 💥به همراه یک مثال کاربردی
تابع سفارشی در اکسل 💥چطور تابع مدنظرتان را در اکسل ایجاد کنید ؟
تابع countif در اکسل💚راهنمای کامل کار با آن
زوم کردن در سلول های اکسل + ۳ روش مختلف
3 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام مطالب واقعا کاربردی دارید ممنون از شما من واقعا با مبحث آرایه ها در برنامه نویسی مشکل داشتم ولی به کمک این مطلب خیلی راحت دارم با اونها کار می کنم
سلام همه ایندکس ها جابجا و غلطه که!!؟؟!!؟
سلام این مطلب به زودی مورد بازبینی قرار می گیرد و ایرادات احتمالی بررسی و برطرف خواهد شد .