أكاديمية الصقر للتدريب

لوحة التميز الأسبوعي
العضو المتميز المشرف المتميز المراقب المتميز المدير المتميز الموضوع المتميز القسم المتميز
العضو المتميز المشرف المتميز المراقب المتميز المدير المتميز الموضوع المتميز القسم المتميز
هانى على لا تميز خلال هذه الفترة-- لا تميز خلال هذه الفترة YasserKhalil مشكلة في الكود اكسيل اسئله واجابات


أهلا وسهلا بك زائرنا الكريم في أكاديمية الصقر للتدريب، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .





الحلقة الحادى عشر الدوال النصية

السلام عليكم ورحمة الله وبركاته اخوانى الكرام اكمل لكم سلسلة افتح الباب الخاصة بالاستاذ الكبير ياسر خليل والتى اوكلنى لن ..



28-07-2018 09:28 مساء
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 89
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 

السلام عليكم ورحمة الله وبركاته
اخوانى الكرام اكمل لكم سلسلة افتح الباب الخاصة بالاستاذ الكبير ياسر خليل
والتى اوكلنى لنقلها لكم ولم انسى الامر بالطبع
وكنت قد توقفت لفترة بسبب انشغالى وبإذن الله نكملها على خير

والان اترككم مع الاستاذ ياسر خليل فى شرح دوال التعامل مع النصوص
....................................................................................................................................................

السلام عليكم ورحمة الله وبركاته

إخواني الكرام في الصرح العملاق أكاديمية الصقر ، أقدم لكم اليوم موضوع في غاية الأهمية ، ألا وهو التعامل مع السلاسل النصية Strings والدوال الخاصة بالتعامل مع النصوص.

اتعرفنا في حلقات سابقة على المتغير String ، ودا بنستخدمه لتخزين النصوص .. أول شيء بنعلن عن اسم المتغير ونحدد نوعه كـ String بالشكل ده :

Dim strEmail As String


وقلنا إن الأفضل دايماً لما نسمي متغير يكون معبر ، ففي السطر اللي فات أنا نويت والنية لله إني أخزن نص ، والنص ده عبارة عن إيميل ، فسميت المتغير strEmail أول 3 حروف من كلمة String وبعدين كلمة معبرة عن النص Email ، وحددت نوعه إنه نص String.

طيب تاني سطر ببدأ أضع قيمة للمتغير اللي أعلنت عنه ، ودا بيكون بطريقة معينة ، إننا نحط اسم المتغير على اليسار ، وبأكد على اليسار وبعديه علامة يساوي ، وبعد علامة يساوي أفتح أقواس تنصيص وأكتب النص اللي عايز أخزنه وأقفل أقواس التنصيص
(كل اللي بقوله ياسمسم  كلام قديم مفيش جديد ..دا في الإنجليزي بيسموه Warm-Up يعني تهيئة للحلقة)

strEmail = "yakh777@yahoo.com"

طيب هل دايماً لازم نحط نص في قيمة المتغير النصي ولا فيه طريقة تانية ؟ فيه طريقة تانية ..إن يكون النص في خلية معينة وليكن A1 ، ولما نيجي نضع قيمة للمتغير نشير لقيمة الخلية A1 زي كدا :
strEmail = Range("A1").Value

حط الايميل في الخلية A1 ، وجرب بنفسك .. جرب مرة تكتب النص ، وعن طريق الدالة Msgbox شوف النتيجة ، ومرة تانية جرب السطر الأخير وشوف النتيجة (النتيجة واحدة .. كل السبل تؤدي إلى حلقات افتح الباب) 1 ...

خلصنا المراجعة يا مدحت .. نشوف ايه اللي هنقدمه في حلقة النهاردة ..

أنا صراحة مش مرتب في أفكاري .. ممكن تقول إني عشوائي جداً ، بس الحمد لله ، بتوفيق الله عز وجل بيخرج الموضوع منظم ومتسألش إزاي ..!

أنا همسك دالة دالة من دوال التعامل مع النصوص وهشرحها بالتفصيل ، والله المستعان :rolleyes


*-------------------------------------------------*

الدالة Len (دالة بسيطة وسهلة وكلنا عارفينها ، وبنستخدمها في ورقة العمل : طبعاً إنتو لما بتقروا الحلقات بيكون فيه ملف إكسيل مفتوح (مش كدا ولا مطنشين) ، عشان نطبق أول بأول ..
 في الخلية A1 إحنا كتبنا نص ، عايزين نعرف طول النص ده ، فبنستخدم الدالة Len ، مثلاً في الخلية B1 اكتب المعادلة بهذا الشكل :

=LEN(A1)

واحد هيقولي إنت مش بتشرح VBA إنت بتخدعنا ، الشغل دا إحنا عارفينه !!  smile  أنا عارف إنكم عارفينه ، بس عايزين نربط بين الشغل في ورقة العمل والشغل في محرر الأكواد ، عشان تكون الصورة واضحة ..

نروح للمحرر .. ونكمل الكود اللي كتبنا منه أول سطرين ..

    Dim strEmail As String
    Dim X As Integer
    
    strEmail = Range("A1").Value
    X = Len(strEmail)
    MsgBox strEmail & " : " & X

أظن الكود واضح جداً ، إحنا الحمد لله وصلنا لمرحلة متقدمة نقدر من خلالها نفهم أسطر الكود .. هشرح الجديد بس عشان الناس متحسش بالملل : الجديد يا أستاذ عبد المجيد ، الدالة Len ، ودي وظيفتها إننا بنقدر من خلالها معرفة عدد أحرف النص ، والأحرف مش مقصود بيها الحروف العربية والإنجليزية فقط ، ولكن الرموز أيضاً بيتم حسابها زي علامة @ والنقطة .. لما ننفذ الكود هتطلع رسالة فيها النص الموجود في الخلية A1 وبعدين عدد أحرف النص .. وفصلت بينهم بـ : (Shift + ك)

الدالة أسندناها للمتغير X وخلينا نوعه Integer لأن عدد أحرف النص عدد صحيح (ولا يمكن يكون فيه حرف بنشوفه ربع حرف .. طبعاً لا ... ، الحرف يمثل عدد واحد صحيح)

بعد كتابة الدالة فتحنا قوس ووضعنا المتغير النصي اللي سميناه strEmail وقفلنا القوس (...) ، ننفذ الكود هنلاقي النتيجة إن عدد الأحرف 17 (اتأكد بنفسك لو وقتك يسمح)  rolleyes


*-------------------------------------------------*

ننتقل لدالة تانية : الدالة InStr (شكلها صعبة .. لو عرفت اختصارها هتكون سهلة بإذن الله ..الحرفين In يعني (في) أو (داخل) .. والحروف Str اختصار String .. بمعنى تاني : الدالة دالة بحث عن نص داخل نص (فزورة .. وكلام معقد مش عايزين) .. بالمثال نفهم الكلام المعقد ..(نص فرعي أي جزء من النص داخل سلسلة نصية طويلة) ..بردو الكلام صعب

نفترض إننا في الإيميل اللي كتبناه عايزين نعرف علامة @ موقعها فين في النص ، في الحالة دي هنستخدم الدالة InStr عشان نقدر نحدد موقعها (مش هنحتاج لـ GPRS خاصية البحث عن طريق الأقمار الصناعية) .. ناخد مثال عشان منتوهش !!

    Dim strEmail As String
    Dim X As Integer
    
    strEmail = "yakh777@yahoo.com"
    X = InStr(strEmail, "@")
    MsgBox X

    
نفس المثال اللي فات تقريباً .. نركز على الجديد ، ونقول دا شكل الدالة ، تقريباً زي الدالة اللي فاتت بس نركز إن فيه بارامتر تاني ، البارامتر التاني هو عبارة عن النص المراد البحث عنه (يعني ممكن نقول إن النص عبارة عن كومة قش ، والنص الفرعي المراد البحث عنه عبارة عن إبرة ، فنشرح الدالة ببساطة إن الدالة بتقوم بعملية البحث عن إبرة في كومة قش .. !!)
الناتج يا جماعة يا متابعين الحلقات بيكون عبارة عن عدد صحيح Integer ، لو جربنا الكود هنلاقي الناتج 8 ، أي أن موقع الإبرة في كومة القش رقم 8 (عد من الشمال يا حاج كمال)

ممكن نكتب النص الأصلي مباشرةً بدل من إسناده لمتغير زي كدا :

    Dim X As Integer
    X = InStr("yakh777@yahoo.com", "@")
    MsgBox X

بس أنا أفضل دايماً الإعلان عن المتغير ، وإسناد قيمة له ، لسبب إننا لما بنكتب كود ، مش هنشتغل على النص مرة واحدة .. الشغل هيكون أكتر من مرة .. فبالتالي أفضل المثال السابق.

وجه الاستفادة من الدالة دي إنك تتأكد من وجود نص معين في النص الأصلي من عدم وجوده ، يعني لو مش موجود هتكون النتيجة ايه ؟ فكروا شوية قبل ما أقول الإجابة : أكيد صفر ، لأن النص الفرعي (الإبرة) مش موجودة ، بالتالي تكون النتيجة صفر..نجرب المثال التالي :

    Dim strEmail As String
    Dim X As Integer
    
    strEmail = "yakh777@yahoo.com"
    X = InStr(strEmail, "@")
    
    If X = 0 Then
        MsgBox "الإيميل غير صحيح  ؛ لأنه لا يحتوي على العلامة اللي متعودين عليها"
    Else
        MsgBox "الإيميل صحيح يا فصيح ؛ لأنه يحتوي على العلامة اللي زهقنا من شكلها"
    End If

نجرب ننفذ الكود مرة ، ونشوف النتيجة ، هنلاقي إن الرسالة التانية هي اللي هتظهر ، لأن قيمة X = 8 ، يعني أكبر من الصفر (ودا دليل على وجود الإبرة في كومة القش)

أما لو شيلنا علامة @ وجربنا الكود مرة تانية ، فهتظهر لنا الرسالة الأولى ، لأن قيمة X=0 ، (ودا دليل على عدم وجود النص الفرعي في السلسلة النصية)

بكدا يكون انتهى الكلام عن الدالة InStr ... لا لسه متستعجلش .. الدالة فيها بارامترات اختيارية واحد بيكون في الأول وواحد في الآخر ، الشكل العام لها كدا :

InStr(start, Text_To_Search, Find, comapre)

إحنا أخدنا البارامتر التاني اللي هو كومة القش (النص المراد البحث فيه) ، والبارامتر التالت اللي هو الإبرة (النص المراد البحث عنه) ..

بالنسبة للبارامتر الأول دا نقطة البداية ، ولما مش بنكتبها بيكون الافتراضي فيها 1 أي بداية عملية البحث والتنقيب عن الإبرة في كومة القش تبدأ من أول حرف بالنص..

البارامتر الأخير بردو اختياري ودا نادر الاستخدام .. ودا له 4 قيم :

(vbUseCompareOption) , (vbBinaryCompare) , (vbTextCompare) , (vbDatabaseCompare)

ناخد مثال بسيط عشان نفهم جزء واحد من الخيارات للبارامتر الرابع :
    Dim X As Integer
    X = InStr("This is my heart", "t")
    MsgBox X


ننفذ الكود نلاقي إن الناتج 16 ، ودا موقع حرف t في النص ، نخلي بالنا إن فيه حرف الـ T في أول النص الأصلي ، طيب نفترض إننا عايزين نعرف موقع أول حرف T سواء كان Capital أي حرف كبير أو Small أي حرف صغير .. في الحالة دي هنستخدم البارامتر الرابع ، وهنستخدم الخيار vbTextCompare (وفي حالة استخدامه بيتم تجاهل حالة الأحرف)
    Dim X As Integer
    X = InStr("This is my heart", "t", vbTextCompare)
    MsgBox X
ننفذ الكود نتصدم برسالة خطأ .. الغلطة فين ؟ هي مش غلطة ، إنما قاعدة ، إنك لو هتستخدم البارامتر الرابع اللي هو أصلاً اختياري يبقا إجباري عليك تستخدم البارامتر الأول اللي هو اختياري -- أما لو استخدمت البارامتر الأول اللي هو اختياري ، فممكن عادي تستغنى عن البارامتر الرابع اللي هو اختياري (هدوخكم ورايا .. اقرا من الأول عشان تفهمها ) ..
يعني الشكل الصحيح يكون كدا :
    Dim X As Integer
    X = InStr(1, "This is my heart", "t", vbTextCompare)
    MsgBox X

الناتج هنا هيكون مختلف ، هيكون رقم 1 ، ودا موقع حرف الـ T في أول النص (هنا تم التغاضي عن حالة الأحرف .. يعني كأننا بنقوله ملكش دعوة الحرف كبير أو صغير .. ابحث عنه)

كفاية كدا على الدالة دي (خدت أكتر من وقتها) ..


*-------------------------------------------------*

ننتقل لدالة ثالثة اسمها StrReverse ودي من اسمها نعرف وظيفتها .. Reverse معناها عكس (مضاد : لا مش مضاد .. بقول عكس) يعني بص لها من الآخر ..

يعني مثلا كلمة (الصقر) لما نبصلها من الآخر تبقا (رقصلا) كدا أكيد وصلتكم

ناخد مثال عملي :

    Dim strAlsaqr As String
    Dim strResult As String
    
    strAlsaqr = "الصقر"
    strResult = StrReverse(strAlsaqr)
    
    MsgBox strResult

نجرب الكود ونشوف النتيجة .. كفاية عليها كدا ، مش مستاهلة نتكلم عنها كتير ..
*-------------------------------------------------*

هختم الحلقة بالدالة الرابعة (نظراً لأن رقم 4 بيغيظ ناس .. وأنا بصراحة من النوع الغياظ المستفز) ..

الدالة التوأم (دالتين هشرحهم مع بعض ) .. بس قبل ما نشرحهم نروح لورقة العمل ونكتب مثلاً yasser في الخلية B3 ، وفي الخلية المجاورة اكتب المعادلة :
=UPPER(B3)

والخلية B4 اكتب كلمة YASSER كلها حروف كبيرة ، وفي الخلية المجاورة اكتب المعادلة :
=LOWER(B4)

أظن الأمور واضحة بالنسبة لكم ، نرجع للمحرر ونشوف شكل الدالتين دول في المحرر :

الدالة LCase أول حرف منها L اختصار Lower يعني زيها زي الدالة Lower في ورقة العمل ، والتانية UCase وحرف U اختصار لكامة Upper يعني زيها زي الدالة Upper

بس خلاص .. مش محتاجة شرح .. ممكن ندعم الكلام بمثال فقط :

    Dim strName As String
    strEmail = "yasserkhalil"
    MsgBox UCase(strEmail)

نجرب نفس المثال ، بس نخلي النص كله حروف كبيرة ، ونستخدم الدالة التانية LCase زي كدا :
    Dim strName As String
    strEmail = "YASSERKHALIL"
    MsgBox LCase(strEmail)

نأتي إلى الواجب اللي الناس بطلت تعمله :

اكتب كود ، وأعلن عن متغير نصي ، على أن يكون النص المراد تخزينه فيه العلامة @ ، وفي رسالة أظهر النص المخزن في سطر ، وعدد الأحرف للنص في سطر ، موقع العلامة @ في سطر ، وقم بعكس النص في سطر ، وقم بتحويل حروف النص إلى أحرف كبيرة في سطر ، وتحويل حروف النص إلى أحرف صغيرة في نص .. وكفاية كدا عشان متتعبوش ، أنا يهمني راحتكم.

كان معكم أخوكم أبو البراء من منتدى أكاديمية الصقر للتدريب


إلى لقاء متجدد بإذن الله .. دمتم في رعاية الله (خدوا بقا شوية ورد لأحسن أخونا اسلام شكله ناوي يخلص على الورد اللي في المنتدى 81818181  .. كفاية 4 وردات)


والسلام عليكم ورحمة الله وبركاته


































28-07-2018 10:10 مساء
مشاهدة مشاركة منفردة [1]
YasserKhalil
مراقب عام
معلومات الكاتب ▼
تاريخ الإنضمام : 21-08-2017
رقم العضوية : 3
المشاركات : 10445
الجنس : ذكر
تاريخ الميلاد : 1-10-1978
الدعوات : 24
يتابعهم : 1
يتابعونه : 535
قوة السمعة : 36552
عدد الإجابات: 254
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
بارك الله فيك أخي الحبيب إسلام وجزاك الله كل خير على اهتمامك البالغ بنقل الحلقات وإعادة نشرها لعل وعسى أن تجد الدروس من يستفيد منها
تقبل وافر تقديري واحترامي

28-07-2018 10:33 مساء
مشاهدة مشاركة منفردة [2]
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 89
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
وجزاك الله كل خير أستاذى الغالى ياسر 81
معلش بقى معنديش وقت اعمل الهووم وورك المره دى biggrin2

28-07-2018 11:38 مساء
مشاهدة مشاركة منفردة [3]
salim
خبير معتمد
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 22-08-2017
رقم العضوية : 43
المشاركات : 853
الجنس : ذكر
تاريخ الميلاد : 1-5-1989
الدعوات : 1
يتابعهم : 13
يتابعونه : 33
قوة السمعة : 6607
عدد الإجابات: 67
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
الواجب اليومي

Option Explicit

Sub Home_Work()
Dim MY_st$: MY_st = "www.Alsaqr@Leave_Me_Alone.I Don't Know"

MsgBox "My_string is: " & MY_st & Chr(10) & _
"My_string's len is: " & Len(MY_st) & Chr(10) & _
" The @ of My_string's is On: " & InStr(MY_st, "@") & " Place" & Chr(10) & _
" The reverse of My_string's is : " & StrReverse(MY_st) & Chr(10) & _
" The Ucase of My_string's is : " & UCase(MY_st) & Chr(10) & _
" The Lcase of My_string's is : " & Chr(10) & LCase(MY_st), 64

End Sub



 

28-07-2018 11:58 مساء
مشاهدة مشاركة منفردة [4]
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 89
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
المشاركة الأصلية كتبت بواسطة: salim
الواجب اليومي

Option Explicit

Sub Home_Work()
Dim MY_st$: MY_st = "www.Alsaqr@Leave_Me_Alone.I Don't Know"

MsgBox "My_string is: " & MY_st & Chr(10) & _
"My_string's len is: " & Len(MY_st) & Chr(10) & _
" The @ of My_string's is On: " & InStr(MY_st, "@") & " Place" & Chr(10) & _
" The reverse of My_string's is : " & StrReverse(MY_st) & Chr(10) & _
" The Ucase of My_string's is : " & UCase(MY_st) & Chr(10) & _
" The Lcase of My_string's is : " & Chr(10) & LCase(MY_st), 64

End Sub



 


بارك الله فيك استاذ سليم
تفاعل مثمر ومستمر دوما
كاتب  Leave_Me_Alone و  I Don't Know
الظاهر انك بتحب rolleyes
تقبل مزاحى biggrin2


29-07-2018 12:05 صباحا
مشاهدة مشاركة منفردة [5]
YasserKhalil
مراقب عام
معلومات الكاتب ▼
تاريخ الإنضمام : 21-08-2017
رقم العضوية : 3
المشاركات : 10445
الجنس : ذكر
تاريخ الميلاد : 1-10-1978
الدعوات : 24
يتابعهم : 1
يتابعونه : 535
قوة السمعة : 36552
عدد الإجابات: 254
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
بارك الله فيك أخي العزيز سليم وجزاك الله خيراً على هذا التفاعل الجميل في الموضوعات 
مشكور على مروركما المشرف والعطر بالموضوع وإن كان الموضوع موضوع إسلام smile

29-07-2018 12:08 صباحا
مشاهدة مشاركة منفردة [6]
Eslam Abdullah
مشرف على لغات برمجة آخرى
rating
معلومات الكاتب ▼
تاريخ الإنضمام : 03-10-2017
رقم العضوية : 852
المشاركات : 1580
الدولة : مصر
الجنس : ذكر
تاريخ الميلاد : 1-9-1995
الدعوات : 5
يتابعهم : 0
يتابعونه : 89
قوة السمعة : 10845
موقعي : زيارة موقعي
عدد الإجابات: 6
 offline 
look/images/icons/i1.gif الحلقة الحادى عشر الدوال النصية
المشاركة الأصلية كتبت بواسطة: YasserKhalil
بارك الله فيك أخي العزيز سليم وجزاك الله خيراً على هذا التفاعل الجميل في الموضوعات 
مشكور على مروركما المشرف والعطر بالموضوع وإن كان الموضوع موضوع إسلام smile

ودى تيجى ازاى ، الموضوع موضوعك بالأصل أنا يدوب بقدم المحتوى بس biggrin2




الكلمات الدلالية
الحلقة ، الحادى ، دوال ، التعامل ، النصوص ،


 










اخلاء مسئولية: يخلى منتدى أكاديمية الصقر للتدريب مسئوليته عن اى مواضيع او مشاركات تندرج داخل الموقع ويحثكم على التواصل معنا ان كانت هناك اى إنتهاكات تتضمن اى انتهاك لحقوق الملكية الفكرية او الادبية لاى جهة - بالتواصل معنا من خلال نموذج مراسلة الإدارة .وسيتم اتخاذ الاجراءات اللازمة.
سياسة النشر: التعليقات المنشورة لا تعبر عن رأي منتدى أكاديمية الصقر للتدريب ولا نتحمل أي مسؤولية قانونية حيال ذلك ويتحمل كاتبها مسؤولية النشر.

الساعة الآن 10:34 صباحا