آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی

آرایه ها ( array ) کاربرد گسترده ای در برنامه نویسی دارند و از مفاهیم کاربردی و پیشرفته برنامه نویسی می باشند. در این بخش از آموزش های رایگان وی بی ای قصد داریم با آرایه ها و کاربرد آنها در VBA آشنا شویم.

array چیست؟

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

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

داده های درون آرایه را «عناصر آرایه» می‌نامند که همگی قابلیت نگهداری فقط یک نوع داده را دارند.

برای درک موضوع مجموعه A = {a1, a2 , ... an} را در نظر بگیرید. مجموعه A دارای n عضو می باشد و هر یک از اعضای آن یک زیرنویس دارد که نمایانگر موقعیت هر عضو در مجموعه A می باشد.

در ادامه یاد خواهید گرفت که چگونه می توانید اعضای مجموعه A را در VBA بصورت یک آرایه تعریف نمود.

تفاوت متغیر و آرایه

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

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

آیا می‌دانید:

اگر به دنبال افزایش بهره‌وری در آفیس هستید، VBA بهترین ابزار برای شماست. این زبان برنامه‌نویسی به شما امکان می‌دهد تا فرآیندها را خودکار کرده و کارها را سریع‌تر انجام دهید.

ابعاد آرایه

آرایه یک بعدی

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

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

آرایه یک بعدی با توجه به اینکه فقط یک سطر دارد، با یک زیرنویس می توان موقعیت هر عنصر را مشخص نماییم. بعنوان مثال مجموعه A را می توان در VBA بعنوان یک آرایه با نماد A(n) یا A(0 To n) نمایش داد.

آرایه دو بعدی ( Multi-dimensional arrays )

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

آرایه دو بعدی داده ها را مانند ماتریس m × n ذخیره می نماید.
نحوه قرار گیری داده ها در یک ماتریس

با توجه به اینکه مفهوم ریاضی ماتریس بعنوان یک شبکه دوبعدی مطرح می باشد، آرایه دوبعدی نیز بعضاً ماتریس خوانده می شود.

از آنجایی که تعداد سطرها و ستون های آرایه دوبعدی بیشتر از یک می باشد، برای تشخیص موقعیت هر داده به دو زیرنویس نیاز می باشد. بعنوان مثال می توانیم ماتریس بالا را در VBA بصورت یک آرایه با نماد A(m, n) یا A(1 to m, 1 to n) نمایش دهیم.

در آرایه دو بعدی عدد اول اندیس نشانگر موقعیت سطر و عدد دوم ستون داده می باشد. مثلاً a34 موقعیت سطر سوم و ستون چهارم را مشخص می نماید.

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

جعبه نام در اکسل (excel name box)
سلول C4 در حالت انتخاب قرار دارد. که به این معناست که شما از سطر ۴ ستون C را انتخاب نموده اید.

نکته
در آینده خواهید دانست که با استفاده از VBA در اکسل می توانید با شماره سطر و ستون نیز به یک سلول خاص اشاره نمایید. بعنوان مثال بجای عنوان C4 در تصویر بالا می توانید از (4, 3)‌ استفاده نمایید.

کاربرد آرایه ها در برنامه نویسی

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

  • با کمک آرایه ها می توانید داده های چندین متغیر را در یک متغیر واحد ذخیره نمایید و در موارد نیاز به آن رجوع نمایید؛ و در نتیجه مقدار زیادی در کدنویسی صرفه جویی نمایید.
  • آرایه ها کاربرد گسترده در ذخیره نتایج پرس و جوهای (query) اطلاعات از پایگاه داده ها دارند.
  • می توانید اطلاعات یک صفحه اکسل را فقط در یک آرایه ذخیره نمایید. و یا با استفاده از یک آرایه به راحتی یک صفحه اکسل را تکمیل نمایید.

آرایه در VBA

اعلان آرایه در VBA

اعلان آرایه در VBA مشابه سایر متغیرها با استفاده از دستور Dim، دستور Static، دستور Private و یا دستور Public امکان پذیر می باشد.

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

آرایه را در VBA می توان به دو صورت اعلان نمود:

۱- اعلان آرایه با اندازه ثابت

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

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

کدهای زیر نمونه هایی از اعلان آرایه با اندازه ثابت در VBA می باشند:


Dim firstArray(10) As Integer ' اعلان آرایه یک بعدی با اندازه ثابت ۱۱ عنصر
Dim secoundArray(10, 3) As Integer ' اعلان آرایه دو بعدی با اندازه ثابت ۱۱ سطر و ۴ ستون

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

مانند سایر متغیرها اگر نوع داده آرایه را در اعلان مشخص ننمایید، نوع داده آن Variant خواهد بود.

نکته
در نظر داشته باشید که نوع عددی داده Variant فضایی معادل ۱۶ بایت و نوع رشته ای آن فضایی ۲۲ بایتی را اشغال می نماید و این فضا برای یک آرایه در تعداد عناصر آن آرایه ضرب خواهد گردید.
بنابراین برای جلوگیری از اشغال بی مورد فضای حافظه حتماً و حتماً نوع داده آرایه را در هنگام اعلان بصورت صریح مشخص نمایید.

برای مشاهده اطلاعات تکمیلی در مورد انواع داده ها در VBA می توانید این صفحه را مشاهده نمایید.

اجزاء آرایه در VBA

هر آرایه از چندین جزء‌ تشکیل شده است که کاربرد و نحوه محاسبه هر یک از آن ها را در VBA بررسی می نماییم:

۱- اندیس یا زیرنویس ( Index )

همانطور که گفتیم عناصر یک آرایه با یک یا چند شماره که به آن «اندیس» می‌گوییم از یکدیگر متمایز می‌شوند. اندیس راهنمایی دسترسی به یک عنصر آرایه می باشد.

۲- کران پایین ( lower bound )

کران پایین به زیرنویس اولین داده ذخیره شده در آرایه اشاره دارد. در VBA به صورت پیش فرض عدد 0 اندیس برای دسترسی به کران پایین آرایه ها می باشد.

دستور Option Base در VBA برای تغییر کران پایین آرایه ها کاربرد دارد. برای مشاهده اطلاعات بیشتر در مورد این دستور و نحوه کاربرد آن می توانید این صفحه را مشاهده نمایید.

بعنوان مثال در آرایه B = ["one", "two", "three"] کران پایین رشته one می باشد. در VBA بصورت پیش فرض برای نمایش مقدار one باید از اندیس 0 به صورت B(0) استفاده نمایید.

تابع داخلی LBound در VBA زیرنویس کران پایین یک آرایه را مشخص می نماید. اطلاعات بیشتر در مورد تابع LBound در این صفحه در دسترس می باشد.

۳- کران بالا ( upper bound )

کران بالا به اندیس آخرین داده ذخیره شده در آرایه اشاره دارد. همانند کران پایین دستور Option Base روی کران بالای آرایه نیز موثر می باشد.

بعنوان مثال در آرایه B = ["one", "two", "three"] کران بالا رشته three می باشد و در صورتی که Option Base روی 0 (صفر) تنظیم شده باشد اندیس 2 به صورت B(2) و اگر روی 1 (یک) تنظیم شده باشد اندیس 3 به صورت B(3)نشاندهنده کران بالای آرایه B خواهد بود.

تابع داخلی UBound در VBA زیرنویس کران بالای یک آرایه را مشخص می نماید. اطلاعات بیشتر در مورد تابع UBound در این صفحه در دسترس می باشد.

۴- اندازه آرایه ( array size )

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


UBound(arrayVar, intDimension) - LBound(arrayVar, intDimension) + 1

در دستور بالا arrayVar متغیر حاوی آرایه و intDimension بعد موردنظر می باشد. بعنوان مثال UBound(A, 2) - LBound(A, 2) + 1 اندازه بعد دوم آرایه A را محاسبه می نماید.

۲- اعلان آرایه پویا ( Dynamic Array )

آرایه پویا ( Dynamic Array ) آرایه‌ای است که اندازه‌اش در زمان اجرا با عمل درج یا حذف عناصر در آن تغییر می‌کند. خیلی از مواقع وجود دارند که اندازه آرایه به هنگام شروع کد مشخص نمی باشد، در این مواقع ناگریز به ایجاد آرایه پویا خواهیم بود.

در VBA برای اعلان آرایه پویا فقط کافیست به هنگام استفاده دستور Dim، دستور Static، دستور Private و یا دستور Public از پرانتزهای خالی مانند مثال زیر استفاده نمود.


Dim sngArray() As Single

در وسط روال (روالی که آرایه در میدان دید آن قرار دارد) می توان با استفاده از دستور ReDim، ابعاد و اندازه آرایه پویا را تغییر و برای هر بعد کران بالا و کران پایین تعریف نمود.

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


ReDim dataArr(0 To (rowCount - 1), 59)

با استفاده از کلمه کلیدی Preserve بعد از دستور ReDim می توانید ضمن حفظ مقادیر فعلی آرایه، همزمان کران بالای آن را تغییر دهید.

اطلاعات بیشتر در مورد دستور ReDim را می توانید در این صفحه مشاهده نمایید.

دیدگاهتان را بنویسید