آرايه هاي چند بعدي در وي بي اي اكسل
DIM A(2,4,5) AS LONG
يك ارايه سه بعدي با بعد اول 2 بعد دوم 4 و بعد سوم 5 است كه عناصر آن از جنس لانگ مي باشند
DIM A(2,4,5) AS LONG
يك ارايه سه بعدي با بعد اول 2 بعد دوم 4 و بعد سوم 5 است كه عناصر آن از جنس لانگ مي باشند
A={ 1 , 2.57 , 17 , "ALI" , 122 }
آرايه ها يا يك بعدي هستند يا چند بعدي
تعريف يك آرايه يك بعدي در وي بي اي مانند تعريف يك متغير انجام مي پذيرد :مثال
DIM A(5) AS STRING
كه در آن پس از كلمه ديم نام آرايه و انتهاي آن ذكر مي گردد و در انتها نوع داده هاي آن
آرايه ها هميشه از ابتداي صفر آغاز مي كنند به تصاوير زير دقت كنيد
توجه كنيد كه دو عنصري از آرايه كه مقدار دهي نشده اند صفر در نظر گرفته شده اند .
براي اينكه يك آرايه يك بعدي از ابتداي يك آغاز كند مي توان در تعريف آن به روش زير اقدام كرد
DIM ALIARR(1 TO 7) AS SINGLE
كه 7 عنصر از جنس سينگل دارد با ابتداي يك aliarr يك آرايه يك بعدي با نام
براي پر كردن يك آرايه كافي است عناصر آنرا پر كنيم
A(1)="ALI"
A(2)=22
A(3)="ALI TOZIH"
A(6)="REZA"
تمرين - فرض كنيد ليستي داريد به شكل زير ، كه از سلول A2 آغاز شده است . حال قصد داريم تابعي طراحي كنيم كه با ارسال سلول آغازين ليست به آن تعداد سطر هاي ليست محاسبه شود .
خرید کتاب الکترونیکی Excel VBA Professional Projects
موفق باشيد .
function ali_link(a as string, b as string)
ali_link = a & " " & b
end function
اين تابع دو رشته را از كاربر دريافت كرده آنها را با يك فاصله در كنار هم قرار داده و به خروجي تابع ارسال مي كند. براي استفاده از آن كافي است آنرا به همراه دو متغيرش درون يك ماكرو صدا بزنيم :
sub ali_text()
msgbox ali_link("ali","tozih")
end sub
مثال 2 - در مثال بالا نام و نام خانوادگي زير هم در يك جعبه نام قرار گيرند ( VBCR)
مثال 3 - ماكرويي طراحي كنيد كه شعاع يك دايره را گرفته محيط و مساحت آنرا نمايش دهد.
مثال 4 - مثال بالا را با استفاده از يك ماكرو و دو تابع محيط و مساحت انجام دهيد .
مثال 5 - تابعي طراحي كنيد كه ميانگين وزني اعداد داده شده را محاسبه نمايد:
عدد : 10 31 15 5
ضريب :2 4 7 9
توجه كنيد كه تابع بايد هر 8 عدد را دريافت كند.
مثال 6 - تابعي طراحي كنيد كه قادر باشد با دريافت ضرايب عددي معادله درجه اول ax+b=0 آنرا حل كرده جوابش را بازگرداند.
Arithmetic |
Comparison | Logical |
---|---|---|
Exponentiation (^) |
Equality (=) |
Not |
Negation (–) |
Inequality (<>) |
And |
Multiplication and division (*, /) |
Less than (<) |
Or |
Integer division (\) |
Greater than (>) |
Xor |
Modulus arithmetic (Mod) |
Less than or equal to (<=) |
Eqv |
Addition and subtraction (+, –) |
Greater than or equal to (>=) |
Imp |
String concatenation (&) |
Like |
|
ساختار يك تابع ( FUNCTION ) شبيه يك ماكرو است با اين تفاوت كه بجاي كلمه ي SUB از كلمه ي FUNCTION استفاده ميشود :
(اين تابع عدد اول را به توان عدد دوم مي رساند )
FUNCTION AVW()
DIM I AS SINGLE , J AS SINGLE
I= INPUTBOX(" I :")
J=INPUTBOX(" J: ")
AVW =I ^ J
END FUNCTION
نكته ي قابل توجه اينست كه جواب خروجي يك تابع هميشه بايد درون نام تابع ريخته شود.
SUB TEST3()
DIM S AS STRING * 5
S= INPUTBOX("YOUR NAME ")
END SUB
______________________________________
SUB TEST4()
CALL TEST3
END SUB
ماكرو TEST3 درون ماكرو TEST4 صدا زده شده است .
به اين نكته توجه كنيد كه هر گاه بخواهيم يك ماكرو فقط در همان ماژول تعريف شده ، شناخته شود كافي است قبل از كلمه ي كليدي SUB از كلمه ي كليدي PRIVATE استفاده شود .
* ماكرو ها به صورت پيش فرض در تمام پروژه شناخته مي شوند.
1- عددي
2- غير عددي
3- ثابت ها
4- كاربر ساخته
كه محدوده ي هر كدام را در زير مشاهده ميكنيد ( راهنماي اكسل 2007 ) :
Data Type Summary |
The following table shows the supported data types, including storage sizes and ranges.
Data type | Storage size | Range |
---|---|---|
Byte | 1 byte | 0 to 255 |
Boolean | 2 bytes | True or False |
Integer | 2 bytes | -32,768 to 32,767 |
Long (long integer) |
4 bytes | -2,147,483,648 to 2,147,483,647 |
Single (single-precision floating-point) |
4 bytes | -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45 to 3.402823E38 for positive values |
Double (double-precision floating-point) |
8 bytes | -1.79769313486231E308 to -4.94065645841247E-324 for negative values; 4.94065645841247E-324 to 1.79769313486232E308 for positive values |
Currency (scaled integer) |
8 bytes | -922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
Decimal | 14 bytes | +/-79,228,162,514,264,337,593,543,950,335 with no decimal point; +/-7.9228162514264337593543950335 with 28 places to the right of the decimal; smallest non-zero number is +/-0.0000000000000000000000000001 |
Date | 8 bytes | January 1, 100 to December 31, 9999 |
Object | 4 bytes | Any Object reference |
String (variable-length) |
10 bytes + string length | 0 to approximately 2 billion |
String (fixed-length) |
Length of string | 1 to approximately 65,400 |
Variant (with numbers) |
16 bytes | Any numeric value up to the range of a Double |
Variant (with characters) |
22 bytes + string length | Same range as for variable-length String |
User-defined (using Type) |
Number required by elements | The range of each element is the same as the range of its data type. |
اين متغير هاكه با كلمه ي كليدي DIM معرفي مي شوند حيطه ي فعاليت ( اثر ) مشخصي دارند :
1- متغير هاي ماكرو
2- متغير هاي ماژول
3- متغيرهاي پروژه ( سراسري)
1- متغير هايي كه در سطح ماكرو تعريف مي شوند تنها در همان ماكرو شناخته مي شوند.
SUB TEST1()
DIM A AS SINGLE
A=INPUTBOX(" ENTER A NUMBER :")
MSGBOX A
END SUB
2- اما نوع دوم متغير ها آنهايي هستند كه بايد درون تمام ماکروهای يك ماژول شناخته شوند ، براي اينكار كافي است متغير را در ابتداي ماژول قبل از تمام ماكروها ( قسمت اعلان يا DECLARATION) تعريف كرد و سپس در تمام ماکرو های آن ماژول میتوان از آن استفاده کرد:
۳- اما اگر بخواهیم این متغیر در تمام ماژول های یک پروژه شناخته شود کافی است در قسمت اعلان بجای کلمه ی dim از كلمه ي GLOBAL استفاده كنيم .در اين حالت متغير سراسري شده و در تمام ماكرو ها ي يك پروژه شناخته مي شود.
GLOBAL S AS STRING
در ضمن بايد بدانيم كه مجموعه ماكرو ها تشكيل يك ماژول داده و مجموعه ي ماژول ها تشكيل يك پروژه را مي دهد .
نكته 1 : اگر بخواهيم درون يك ماكرو پس از اتمام آن مقادير متغير هايش تهي نشود كافي است بجاي DIM از واژه كليدي STATIC استفاده كنيم . در اين حالت حتي پس از اتمام ماكرو مقادير متغير ايستا حفظ شده تا مقادير جديد به آن تعلق پيدا كند.
اين حالت تنها در همان كاربرگ قابل اجراست . اما اگر محدوده ي مورد نظر را نامگذاري نماييد اينكار امكان پذير خواهد شد.
حال اگر در يك كاربرگ ديگر بخواهيم مثلا در ستون A فقط همين اسامي ديده شوند ؛ كافي است در قسمت LIST ابزار VALIDATION بجاي محدوده آدرس از گزينه ali ( نام محدوده ) استفاده كنيد .