Professional Documents
Culture Documents
إنشاء دروس VBA أكسس - قسم الأكسيس Access - أوفيسنا
إنشاء دروس VBA أكسس - قسم الأكسيس Access - أوفيسنا
6
16
على بركة اهلل نبدأ أول درس و ننتظر مالحظاتكم حول أي شيء نسيته و هو متعلق بهذا
الدرس أو أي معلومة أخطأت بها:
ص
الــدرس األول :المتغيرات
ا
ل
تعتبر المتغيرات النواة األساسية أو حجر األساس بالنسبة لكل
برنامج في أي لغة برمجة كانت .يعني قبل البدأ يجب أن تقوم بتعريف ح
المتغيرات التي تحتاجها و تحدد نوعها قبل كل شيء. ح
م
-11ا أنواع المتغيرت:
د
ي هناك العديد من أنواع المتغيرات و كل نوع يخصص له حجم معين
قام في الذاكرة .سوف نقوم بإضافة شرح جميع أنواع المتغيرات و
بنشر الحجم الذي يأخذه كل نوع من الذاكرة:
يناير
نص يتسع المتغير النصي إلى 2جيجا بايت و كل :String ,21
2017
حرف يشغل 1بايت
:Booleanياخذ نوعين من القيم Trueو ( Falseطوله 2
بيت )
:Byteبايت يكون رقم بين 0من ( 255طوله 1بايت)
: Integerعدد صحيح (طوله 2بيت ) قيمته من -32768إلى
32767
: Longعدد صحيح طويل (طوله 4بيت) قيمته من
-2,147,483,648إلى 2.147.483.647
:Signalعدد عشري (طوله 4بيت) قيمته من
-3.402823x1038إلى -1.401298x10-45للقيم السالبة
Dim a as Integer
Dim b as Integer
أ أ
- اسم المتغير يجب أن يبتدأ بحرف .
- يمكن استعمال الحروف التي تلي الحرف األول رقم أو حرف أو اإلثنين
معا.
- ال يجب أن تكون هناك فراغات بين أسماء المتغير و يمكن استعمال
الشكل التاليid_user :
- يجب عدم استعمال نقطة أو رمز خاص مثل ( ؟ ........./ ، ( ، ) ، * ،
إلخ ) ولكن يمكن استخدام الشرطة السفلية ) _ (
- أن ال يكون اسم المتغير من الكلمات المحجوزة في األكسس.
3
17
j
-2طريقة اإلعالن عن المتغيرات:
j
a
f
f
e
طرق استعمالها:
r
r
.1اذا اردنا استعمال المتغير في الحدث /الوحدة النمطية فقط (يعني ال يمكن اخذ قيمتها من
نماذج/تقارير/استعالمات/وحدات نمطية اخرى) ،فنستخدم:
قام
بنشر
Dim UserName as string يناير
,21
او 2017
ويجب ان نستخدم Dimلكل حدث في النموذج/التقرير ،اي نعيد كتابته لكل حدث ،
بينما يمكننا ان نضع Dim / Privateمرة واحدة في اعلى الصفحة ،وال تكون داخل اي حدث
،هكذا
Option Compare Database
Private User_Name As String
.2بينما اذا اردنا ان تكون القيمة متوفرة في جميع كائنات البرنامج ،فنستخدم التالي في
وحدة نمطية (حتى ولو كانت وحدة نمطية فارغة):
مثال هذا ،عندما تستعمل نموذج المستخدمين ،ثم تريد االحتفاظ باسم المستخدم في الكود ،
.
ويمكننا ان نجعل الكود ال يعمل إال بتعريف المتغير ،وفي الواقع هذه صعبة في البداية ،ولكن
في النهاية سيكون برنامجك افضل ،
.
.
واهمية هذه الخطوة هي عندما تريد ان تحفظ البرنامج الحقا بصيغة mdeاو ، accde
فيجب عليك ان:
.
واذا كانت المتغيرات في الكود معّر فة ،فلن تحصل على اخطاء في التحويل
جعفر
اقتباس
j
-4شروط تسمية المتغيرات:
j
a
f
أحد الشروط التي التزم بها دائما ،هي كتابة اسم متغير مفهوم وله معنى ،مثالFile_Name :
او ، How_Many f
e
r
بحيث بعد مدة لما أرجع لتصحيح الكود ،افهم ما هو عمل المتغير.
r
قام
بنشر
والمحترفين يذهبون إلى ابعد من هذا ،فباالضافة إلى استعمالهم مسمى مفهوم المعنى ،فإنهم
يناير
يسبقون االسم بحروف تدل على ان المتغير رقم أو كلمات ،هكذا:
,22
2017
لالرقام intRows :او ، nColumns
وللكلمات.strName :
واستغرب من بعض المتغيرات المستعمله في كود معقد مثل a :او !! b
جعفر
1
14
أيضا يستحسن كتابة أسماء المتغيرات باللغة الالتينية من أجل تسهيل التعامل معها و عدم
حدوث مشاكل فيما بعد
ص
ا
3
ل
ح
ح
م
ا
د
ي
قام
بنشر
يناير
,22
2017
j
j
جعفرa
f
f
e
r
3
r
قام
بنشر
يناير
,22
2017
مالحظاتك ممتاز و في محلها و متممة للمعنى
ربما هنا من يستعمل اللغة العربية في تعريف المتغير بهذا الشكل :
ص
ا
الرقم_األول Dim As Integer ل
ح
مالحظة: ح
م
-ا القيمه اإلفتراضية للمتغيرات النصيه هي فراغ " "
د
-يأما القيمه اإلفتراضية للمتغيرات الرقميه هي صفر 0
قام
بنشر
يناير
7 ,22
2017
IF condition THEN
statements1
Statements2
END IF
If condition
Then
) التعليمات المنفذة في حال تحقق الشرط(statements1
Else
)التعليمات المنفذة في حال عدم تحقق الشرط(statements2
End If
ELSE
التعليمات المنفذة في حال عدم تحقق جميع الشروط السابقة(statements2
End If
مثال :
If grade >= 90 Then
"ممتاز"= Text1
ElseIf grade >= 80 Then
"جيد جدا"= Text1
ElseIf grade >= 70 Then
"جيد"= Text1
ElseIf grade >= 60 Then
"مقبول"= Text1
Else
"راسب"= Text1
End If
مالحظات:
-في الصيغة األخيرة ( ) If – Then –ElseIfاذا تحقق احد
الشروط فان البرنامج ينفذ العملية ثم يذهب الى نهاية الجملة
و ال يتحقق من الشروط الباقية.
-في حالة أردنا إستعمال شرطين معا أو أكثر نستعمل العبارة
.And
-في حالة أردنا تحقق أحد شرطين ليتم تنفيذ العملية نستعمل
Or
تم تعديل يناير 2017 ,24بواسطه صالح حمادي
1
16
أهم نقطة فى جملة if
" And Password=2017 Thenأبو خليل"=If UserName ص
"مرحبا أستاذ أبو خليل"MsgBox
ا
End If
ل
ح
ح
في هذا المثال إذا كان اسم المستخدم هو أبو خليل و كلمة المرور هي
م
ا 2017سوف يقوم البرنامج بعرض رسالة ترحيبية
د
ي
"مرحبا أستاذ أبو خليل"MsgBox قام
بنشر
يناير
التعليمة .يعني لتنفيذ التعليمة و,25إذا إختل أحد الشرطين فلن يتم تنفيذ
يجب تحقق الشرطين في نفس الوقت.2017
If Died_Father=true Or Died_Mother=False Then
"يتيم" MsgBox
End If
في هذا المثال يكفي تحقق أحد الشرطين ليتم تنفيذ التعليمة (رسالة
تخبرنا بأن هذا الشخص يتيم) و إذا تحقق الشرطين معا أيضا يتم تنفيذ
التعليمة
إذا هناك شخص أبوه متوفي فهو يتيم و إذا كانت أمه متوفية فهو يتيم
و إذا كان كال والديه متوفيين فهو أيضا يتيم.
2
8
ماشاء اهلل عليك اخوي صالح ،كفيت ووفيت ،وما بقيت لي شئ اكتبه
j
تنسيق وتجميع مجموعات اللـ IFمهم ،وكلما كان تنسيقك افضل ،كلما قّلت اخطاءك ،وكلماf
استطعت الوصوت للخطأ بسرع e
r
r
في الصور كود لبرنامج أحد االعضاء (واعتذر مسبقا من صاحب االكواد) ،
قام
الحظ طريقة عرض الكود ،بدون تنسيق ،وصعوبة معرفة بداية ونهاية الشرط : IF
بنشر
يناير
,25
2017
.
اما الكود التالي ،فذكرني بالكاريكاتير "ابحث عن فضولي" ،وهنا نبحث عن بداية ونهاية
الشرط : IF
.
.
ثانيا :الحظ اني عندما اقفل الجملة الشرطية ، End Ifفاني اكتب تعليق خلفها ،وهذا التعليق
مأخوذ من جزء من بداية الشرط ، IF
.
جعفر
Case Expression_1
Statement_1
Case Expression_2
Statement_2
Case Expression_n
Statement_n
End Select
Select Case me.le_nombre
Case 1
"واحد" = Me.y
Case 2
"إثنان" = Me.y
Case 3
"ثالثة" = Me.y
Case 4
"أربعة" = Me.y
End Select
Select Case Expression
Case Expression_1
Statement_1
Case Expression_2
Statement_2
Case Expression_n
Statement_n
Case Else
Other_statement
End Select
في هذه الصيغة عند عدم تحقق الشرط مع جميع الحاالت يتم
إرجاع التعليمة اإلستثنائية Other_statement
مثال :2نفس المثال األول
Select Case me.le_nombre
Case 1
"واحد" = Me.y
Case 2
"إثنان" = Me.y
Case 3
"ثالثة" = Me.y
Case 4
"أربعة" = Me.y
Case Else
"هذا الرقم غير موجود" = me.y
End Select
هذا عندما نضيف أي رقم يختلف عن 1أو 2أو 3أو 4يطبع لنا
"هذا الرقم غير موجود"
Select Case Me.Degre
Case 0 To 30
"ضعيف" = Me.y
Case 30 To 49
"دون الوسط" = Me.y
Case 50 To 69
"مقبول" = Me.y
Case 70 To 89
"جيد جدا" = Me.y
2
10
السالم عليكم أخي صالح
j
إطراء وتعقيب:j
a
f
f
e
الموضوع متكامل ،والتنسيق رائع
r
r
والشئ الوحيد الذي لم تشر اليه هو (مأخوذ من برنامج االكسس) ،هو خلط المتغير
Expression
قام
بنشر
يناير
,27
Case 9, 11, 13 2017
و
.
جعفر
7
Age=50
ميزاتها:
مثال:
Price=10
Qty=5
عيوبها:
الدالة تختبر جميع الحاالت ،وال تختبر القيمة االولى وتخرج (مثل
الـ :)IF
امثلة عملية:
الحظ اني عملت اول شرط ونتيجة القيمة الصحيحة ،ثم انهيت
السطر بخط سفلي _ (واللي معناه في البرمجة ان الكود
سيتواصل في السطر التالي ،
iDay = 2
_ ;"Today_is = IIf(iDay = 1; "Sun
;"IIf(iDay = 2; "Mon
;"IIf(iDay = 3; "Tue
IIf(iDay = 6; "Fri";
شروط (ارقام االشهر نريد تحويلها الى7 اذا عندنا اكثر من .3
: فهنا نضطر الى عمل وحدة نمطية، )اشهر
Function What_Month(M)
Select Case M
Case 1
What_Month = "Jan"
Case 2
What_Month = "Feb"
Case 3
What_Month = "Mar"
Case 4
What_Month = "Apr"
Case 5
What_Month = "May"
Case 6
What_Month = "Jun"
Case 7
Important Information
What_Month = "Jul"
I accept Case 8
What_Month = "Aug"
Case 9
"What_Month = "Sep
Case 10
"What_Month = "Oct
Case 11
"What_Month = "Nov
Case 12
"What_Month = "Dec
End Select
End Function
.
والنتيجة
10
شكرا أخي صالح
j
j
في الواقع انا لم ادرس البرمجة (نعم مادة الفورتران في بداية دراستي الجامعية) ،ولم ادخل
a
f
وانما كل الذي عندي من تجارب في تدريب ،وحتى ما عندي رخصة سواقة الحاسوب
f
عملية ،
لذلك ترى الفرق واضح من طريقة عرضك للموضوع ،وطريقة عرضي e
r
r
قام
جعفر
بنشر
يناير
,27
5
2017
6
مثال:1
Important Information
For i = 1 To 10
Me.y = Me.y + i
Next i
مثال:2
For i = 0 To 10 Step 2
Me.y = Me.y + i
Next i
For Each element In Group
][statement 1
][statement 2
....
][statement n
Next
مثال:1
Dim Array_n() as string
)Array_n = Array(1, 2, 3, 5
Dim sum As Integer
Important Information
sum=0
Me.y = sum
مثال:2
Dim frm As Form
Dim fc As Control
Set frm = Me
For Each fc In frm.Controls
)Me.listbox.AddItem (fc.Name
Next
هذا البرنامج يقوم بإضافة جميع أسماء عناصر النموذج الحالي إلى
مربع قائمة .listbox
تقوم هذه الحلقة بتفحص الشرط قبل الدخول للحلقة إذا كان الشرط
محقق ) (Trueفإن البرنامج يقفز إلى ما بعد حلقة التكرارية أي أنه لن
يتم الدخول للحلقة .و إذا كان الشرط غير محقق ( )Falseفسيتم
صيغتها:
Do Until condition
Statments
Loop
مثال:
Dim i As Integer
Dim sum As Integer
i = 1
sum = 0
Do Until i > 10
sum = sum + i
i = i + 1
Loop
Me.y = sum
مادام i<10فإن البرنامج يبقى يكرر العملية حتى يصبح i>10و بعد
نهاية الدوران يضع القيمة النهائية في مربع النص y
هذا النوع من الحلقات يقوم بتنفيذ الدوران على األقل مرة واحدة ألنه
يختبر الشرط في نهاية الحلقة و بالتالي فإنه يتم الدخول للحلقة أوال
ثم في نهاية الحلقة يتم تفحص الشرط.
صيغتها:
Do
Statements
Loop Until condition
Do
sum = sum + i
i = i +2
Loop Until i > 10
Me.y = sum
صيغتها:
Do While Condition
Statements
Loop
مثال:
Dim i As Integer
Dim sum As Integer
i = 0
sum = 0
Do While i <= 10
sum = sum + i
i = i + 2
Loop
Me.y = sum
صيغتها:
Do
Statements
Loop While Condition
مثال:
Dim i As Integer
Dim mult As Long
i = 10
mult = 1
Do
mult = mult * i
i = i - 1
Loop While i > 0
Me.y = mult
هذا البرنامج يقوم بحساب جداء األعداد من 10إلى 1و يضع النتيجة
في me.y
هنا وضعنا العداد iتنازليا ( )i=i-1في كل دورة ينقص 1من العداد
حتى يصل إلى 0
نالحظ هنا بالنسبة للمتغير multو الذي يمثل الناتج أنني وضعت
نوعهLong بدال من Integerو السبب يرجع ألن النوع integer
أقصى قيمة له هي 32767و في هذه الحالة الناتج يفوق هذا العدد و
بالتالي سوف يظهر لنا الخطأ رقم )Overflow( 6
7
إن استعمال الرموز و األحرف لها دور كبير و ال يمكن اإلستغناء عليه
في جميع لغات البرمجة .و يختلف دور الرموز حسب موقعها في الكود
و سنحاول ذكر ما نستطيع ذكره في هذا الدرس و أتمنى من اإلخوة
أن يكملوا ما عجزت عن ذكره.
I accept
Important Information
الفاصلة ,
ص
تستخدم الفاصلة بشكل واسع في اكواد VBAفمثال نورد هنا
ا
بعض استخدماتها على سبيل المثال ال للحصر:
ل
ح
تستخدم للفصل بين قيم دالة تتطلب ادراج عدة قيمح
م
امثال:
د
ي
)exm=DFirst(Expr, Domain, Criteria قام
بنشر
يناير
بين المتغييرات عند تعريفها للفصل
,30
2017
مثال:
االقواس الهاللية ( )
مثال:
)Function Example (exm As Boolean
D=(e-f)*g
moy=(2+3+4)/3
مثال:
"منتدى أوفيسنا"=Text0
مثال:
' A = Text0.BackColor
االقواس المربعة
][
االقواس المربعة ايضًا حالها حال الرموز السابقة لها استخداماتها
المحددة و تتمثل استخدماتها في توضيح ان المتغييرات
المحصورة بين قوسين مربعين انما هي اسماء لجدول او نموذج
او استعالم او عناصر داخل تلك النماذج او حقل ضمن الجداول و
االستعالمات و تستخدم في منشأ التعابير و كودات ال)(VBA
على حٍد سواء و في بعض االحيان يمكن االستغناء عنها اي ان
نذكر العناصر السابقة بدون حصرها بين قوسين
مثال:
عالمة التعجب !
تستخدم عالمة التعجب على حد علمي استخدام وحيد و هو
موضح في
مثال:
الرمز &
عالمة =
و هي تقوم بإسناد قيمة ما بعدها للمتغيير الموجود قبلها سواءًا
كانت تلك القيمة رقم او معادلة رياضية او قيمة منطقية او
سلسلة نصية ..الخ
مثال:
A=b+c
عالمة النقطة
.
و هي مهمة جدا في البرمجة .فعند ذكر اسم اي عنصر من عناصر
قاعدة البيانات و الحاق اسم العنصر بعالمة النقطة ( ).فسوف
تظهر قائمة بخصائص ذلك العنصر و االوامر التي يتعامل معها
ذلك العنصر .
مثال:
مثال:
عالمة
#
تستعمل هذه العالمة لتحول سلسلة رقمية الى تاريخ
مثال :
Text0 = #30/1/2017#
+عملية الجمع
مثال:
text1=2+3
text2=10-6
text3=70/5
text4=4*23
text5=6^4
5
شكرا جزيال اخي صالح
j
j
تسلم ايدك على هذا العمل ،والواقع ان العمل مو سهل ،انا اشتغلت على جزء واحد واعرف
a
الصعوبة
f
f
e
r
r
وعندي أضافات سأعمل عليها ان شاء اهلل
قام
بنشر
جعفر
يناير
,30
2017
5
تسلم ايدك على هذا العمل ،والواقع ان العمل مو سهل ،انا اشتغلت على جزء واحد
واعرف الصعوبة
مثال:
)"Me.y = Chr("210
النتيجة=ز
مثال:
مثال:
Me.y = LCase("ABC")=abc
مثال:
)السلسلة النصية(UCase
"Me.y = UCase("abcd")="ABCD
مثال:
) عدد األحرف المطلوبة,السلسلة(Left
Me.y = Left("1999", 2)=19
مثال:
)السلسلة(len
Me.y = Len("1999")=4
مثال:
)السلسلة(Trim
"(Me.y = Trim "1999")="1999
)عدد األحرف,نقطة البداية(رقم),السلسلة(Mid
"Me.y = Mid("SALAH", 3, 2)="LA
مثال:
)الجزء المعوض,الجزء الذي نريد استبداله,السلسلة(Replace
"Me.y = Replace("SALAH", "H", "T")="SALAT
مثال:
)عدد الحروف,السلسلة(Right
"Me.y = Right("SALAH", 2)="AH
مثال:
)السلسلة(RTrim
Me.y = RTrim("15 "")="15
مثال:
)السلسلة(Trim
"(Me.y = Trim 15 "")="15
مثال:
)عدد الفراغات(Space
"=)Me.y = Space(3 "
مثال:
)العدد(Str
"Me.y = Str(3)=" 3
"Me.y = Str(-3)="-3
تقوم بإرجاع مسافة قبل األعداد الموجبة
مثال:
)السلسلة,2السلسلة,1المقارنة(StrComp
Me.y = StrComp("ass", "ass")=0
Me.y = StrComp("as", "ass")=-1
مثال:
),LCIDرقم يمثل رمز التحويل,السلسلة(StrConv
"Me.y = StrConv("ass", 1)="ASS
رموز التحويل:
أ
:Stringتكرار أحرف بعدد معين.
مثال:
)الحرف ,عدد التكرارات(String
"Me.y = String(3, "S")="SSS
مثال:
)السلسلة(StrReverse
"Me.y = StrReverse("ABCD")="DCBA
6
رائع جدا ..عندي اقتراح وهو هل باإلمكان تزويدنا بأمثلة بخصوص الوظائف الموجودة في
شريط أدوات اكسس أو شريط ادوات محرر الفيجوال بيسك فهي تحتوي على امور كثيرة
s
نجهلها
a
n
تحياتي
d
a
2
n
e
t
قام
بنشر
فبراير
,13
2017
a
الدالة DateAdd r
قام
بنشر
يمكنك استخدام الدالة DateAddإلضافة فاصل زمني معّي ن أو طرحه من تاريخ ما .على
فبراير
,17
سبيل المثال ،يمكنك استخدام الدالة DateAddلحساب تاريخ لمدة 30يومًا من اليوم أو
2017
وصيغتها كاالتى
الفاصل الزمني :ويوضع رمز للمتغير الذي تريد اضافة القيمة الزمنيه إليه
رقـــــــــــــــــم :ويوضع الرقم الذى تريد اضافته للمتغير الذي قمت بتحديده
تــــــــــــــاريخ :ويوضع هنا الزمن الذي به المتغير موضح به القيمه الحاليه حتى يتم
اضافة الرقم إليه حسب المتغير الذي قمت بتحديده
)"DateAdd("m", 1, "31-Jan-95
yyyyالسنة
qربع سنوي
mالشهر
yيوم من السنة
dاليوم
wيوم من األسبوع
wwاألسبوع
hالساعة
مثال : 2أذا اردت مثًال اضافة شهر الى القيمه الحالية للتاريخ
)DateAdd("m", 1, Date
3
مثال:
"Date()="19/02/2017
مثال:
)أول أسابيع السنة,أول أيام األسبوع,التاريخ,فاصل زمني(DatePart
DatePart("d","22/03/2017")=22
DatePart("m","22/03/2017")=3
DatePart("yyyy","22/03/2017")=2017
مثال:
)يوم,شهر,سنة(DateSerial
"DateSerial("1999","03","20")="20/03/1999
مثال:
)»التاريخ«(DateValue
)"DateValue("12 02 2016
مثال:
)التاريخ(Day
Day("15/03/2016")=15
مثال:
)الوقت(Hour
Hour("15:25")=15
مثال:
)الوقت(Minute
Minute("15:25")=25
مثال:
مثال:
)التاريخ(Month
Month("12/11/2003")=11
مثال:
)التاريخ(Year
Year("12/12/2017")=2017
4
:IsDate
تستخدم هذه الدالة لفحص ما إذا كان المتغير الممرر لها تاريخ أم ال حيث
ص
ًا ًا
اتعيد trueإذا كان المتغير تاريخ و تعيد falseإذا لم يكن تاريخ .
ل
ح
)»تعبير«(IsDate
ح
IsDate("12/03/2017")=True م
")=Falseأوفيسنا"(IsDate ا
د
ي
:Now
قام
بنشر
هذه الدالة إلستخراج تاريخ و وقت النظام الحاليين. تستخدم
مارس
,15
2017
)(Now
:و تكون النتيجة بالشكل التالي
15-03-2017 10:18:15
:Time
:Timer
)(Timer
:MonthName
)»اختصار»« ,شهر«(MonthName
"مارس"=)MonthName(3,True
"أوت"=)MonthName(8
:TimeSerial
تستخدم هذه الدالة إلرجاع متغير من نوع تاريخ يحتوي على الوقت
لساعة و دقيقة و ثانية محددة.
)»ثانية»« ,دقيقة»« ,ساعة«(TimeSerial
TimeSerial(10, 56, 13)=10:56:13
:Weekday
تستخدم هذه الدالة إلرجاع متغير "عدد صحيح" يمثل رقم اليوم في
األسبوع.
)أول أيام األسبوع ,التاريخ(Weekday
Weekday("15/3/2017", vbSunday)=4
:WeekdayName
)»أول أيام األسبوع»« ,اختصار»« ,يوم من األسبوع«(WeekdayName
"الثالثاء"=)WeekdayName(3, True, vbSunday
7
اضف رد
مشاركة
17 متابعين
محتوي مشابه
لكن هل يمكن استخراج تاريخ الميالد والمحافظة والنوع ذكر أو أنثى من الرقم
القومي بصورة آلية؟؟!!
تابعونا
لإلجابة عن هذا السؤال وأكثر تابعونا في هذا الفيديو
ونتعرف أيضا على
:
أبسط معادالت للحصول على تاريخ الميالد والمحافظة والنوع من الرقم القومي
أكواد المحافظات في الرقم القومي
اقتصاص عدد معين من حروف الكلمة
كيف سيكون الرقم القومي في المستقبل سنة 2100؟
تحويل النص إلى تاريخ
معادالت ifالمتداخلة
معادلة البحث
lookup