اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

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

نبدأ بعون الله في شرح شيء جديد في عالم البرمجة ، وهو القاموس Dictionary ، وإن شاء المولى يكون مفيد لكم إخواني الكرام. :fff:

طبعاً عنوان الموضوع جذبكم مش عشان البرمجة أكيد عشان الناموس (وإزاي نقدر نتخلص من الناموس والإزعاج اللي بيسببه :blink:) .. الناموس هنا معناه القانون أو القاعدة .. ودا عنوان كعامل جذب مش أكتر :wink2:

ما هو القاموس Dictionary؟

----------------------------

من اسمه ممكن نعرفه ..القاموس يعني تجميعة كلمات باللغة الإنجليزية وليها مرادف سواء بنفس اللغة أو بلغة أخرى .. اللي يهمنا في القاموس إني عبارة عن تجميعة Collection

القاموس في لغة البرمجة عبارة عن تجميعة ، وبنستخدمه عشان نخزن فيه : أرقام - نصوص - تواريخ - مصفوفات نطاقات - كائنات - متغيرات ..

والقاموس عبارة عن عناصر أو بنود Items وكل عنصر له مفتاح مميز Unique Key

المفتاح دا فايدته ايه؟ من اسمه بردو نعرف إن المفتاح بيفتح لنا الباب .. بيفتح الباب للعنصر (عشان نتعامل معاه بشكل برمجي .. يعني المفتاح دليلنا أو مرشدنا للعنصر المطلوب التعامل معه)

القاموس فايدته إننا بنقدر نتعامل مع البيانات في الذاكرة بعيداً عن ورقة العمل ..يعني مفيش تحديث للشاشة Screen Updating ، مفيش حساب تلقائي Auto Calculation ، بكدا نقدر نفول إنه أسرع في التعامل مع البيانات

++ (فائدة) بما إن القاموس بيحتوي على مفاتيح مميزة ، فيمكن استخدام الخاصية .Keys عشان نستخرج قائمة فريدة Unique List من البيانات

** القاموس ليس ضمن المكتبة القياسية للغة البرمجة VBA ، إنما هي جزء من Microsoft Scripting Runtime library ، وهذه المكتبة توجد في الملف الموجود في المسار التالي

\Windows\system32\scrrun.DLL

ولذلك إذا أردت استخدام القاموس فيمكنك من خلال محرر الأكواد الذهاب للقائمة Tools ثم References واختر المكتبة المسماة Microsoft Scripting Runtime library

إنشاء القاموس Create Dictionary

-----------------------------------

أبسط طريقة لإنشاء القاموس استخدام الأسطر التالية

With CreateObject("scripting.Dictionary")

End With

ماذا تعني هذه الأسطر؟ تعني إنشاء كائن جديد بالاعتماد على المكتبة المسماة scripting.Dictionary ، وما بين السطرين سيتم كتابة أسطر وأوامر برمجية

الأسطر التي ستبدأ بنقطة تعني التعامل مع خصائص الكائن أي أنها ستتعامل مع الكائن الجديد

## مثال بسيط لإضافة عنصر للقاموس

    With CreateObject("scripting.dictionary")
        .Add "First Name", "Yasser"
    End With

الطريقة Method التي تلي النقطة تسمى Add أي أضف .. والمقصود منها إضافة عنصر جديد للقاموس ..

ذكرنا في بداية الموضوع أن لكل عنصر مفتاح مميز ، المفتاح هنا First Name ، والعنصر يحتوي على النص Yasser

يمكن استخدام متغير للقاموس بهذا الشكل

    Dim Dict As Object
    Set Dict = CreateObject("scripting.dictionary")
    With Dict
        .Add "First Name", "Yasser"
    End With

الإعلان عن المتغير من النوع كائن ، ثم تعيين قيمة للمتغير ليساوي إنشاء الكائن من المكتبة الخاصة scripting.Dictionary ثم بدء التعامل مع الكائن القاموس ..

## مثال آخر :

المثال التالي سيتناول عد العناصر داخل القاموس باستخدام الخاصية Count قم بوضع الكود داخل موديول ثم نفذ الكود ستجد رسالة بها عدد عناصر القاموس وهو في المثال 2 فقط

مفتاح العنصر الأول هو First Name ومفتاح العنصر الثاني هو Second Name

أما كلمة Yasser وكلمة Khalil فهي محتويات أو عناصر القاموس

    With CreateObject("scripting.dictionary")
        .Add "First Name", "Yasser"
        .Add "Last Name", "Khalil"
        MsgBox .Count
    End With

وأكتفي بهذ الجزء البسيط .. لكي أجد المتابعة الجيدة منكم

وإلى اللقاء في الأسبوع المقبل إن شاء الله مع حلقة جديدة في نفس الموضوع

دمتم على طاعة الله :fff::fff:

  • Like 8
قام بنشر

اخي الحبيب ياسر

لك كل الشكر علي المجهود غير العادي وانت ملك المواضيع  المتكاملة

الموضوع بالفعل شيق ويستحق التثبيت ولكن يجب اولا من الاخوة الذين

قاموا بتثبيت مواضيع من قبل ومر عليه المدي المتفق عليه ان يفكوا هذا التثبيت لانه فاق العدد وكذلك المدة

ولانريد احد يزعل منا اشجعك واحييك ومنتظرين التكملة

خالص تحياتي وتقديري

  • Like 3
قام بنشر

الله عليك يا أستاذنا الغالى

جزاك الله خيرا على ما تقدمه  لنا من علم جديد    زادك الله علما ورزقا وبركة فى الدنيا والاخرة         تحياتى

 

  • Like 2
قام بنشر

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

بارك الله فيك أستاذنا القدير ياسر خليل أبو البراء .. مفاهيم و مصطلحات جديدة بقاموس معرفتنا البرمجيّة البسيطة وناموسها .. دومًا تتحفنا بمفاجآت سارّة .. جزاك الله خيرًا و زادك من علمه و فضله .

                                                                                                           خالص احتراماتي

5617deda28bbe____.thumb.gif.683afa39b0b1

 

جزاك الله كل الخير.gif

  • Like 2
قام بنشر

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

  • Like 2
قام بنشر

إخواني الكرام

أخي الحبيب زيزو العجوز المتميز دائماً مشاركاته المبدعة رغم قلتها

أخي الغالي ومعلمي الكبير عادل حنفي

أخي المتميز ابو عيد صاحب كل جديد

أخي الحبيب مختار صاحب الموضوعات الفريدة من نوعها

أخي الغالي عبد العزيز البسكري ذو الهمة والنشاط

أخي الحبيب الشهابي (النادر وجوده ولكن متميز في مشاركاته)

أبي الغالي (هنا أقول أبي وليس أخي فقط) أبو يوسف

جزاكم الله خير الجزاء على ثناؤكم الطيب وبارك الله فيكم

وما أنا إلا قطيرة في محيط علم الله وأسأله العلي القدير أن يجعل أعمالنا صالحة ولوجهه خالصة

تقبلوا وافر تقديري واحترامي :fff:

  • Like 5
قام بنشر

بارك الله فيك وأكثر من أمثالك وزادك الله من العلم الكثير والكثير أخى الحبيب الغالى الأستاذ الفاضل / ياسر خليل

موضوع شيق ورائع للغاية

جعله الله فى ميزان حسناك

 

  • Like 3
قام بنشر

أخي العزيز ياسر 

أقترح على الإدارة أن تفصل موضوعك هذا عن الردود حتى يسهل متابعة دروسك

أي يكون موضوعك هذا مقفل حتى يتسنى لك طرح الدروس متتابعة

وتفتح صفحة آخرى للردود والاستفسارات

تحياتي

  • Like 2
قام بنشر (معدل)

اخى الحبيب ياسر خليل

أولا اعتذر عن التاخير بالرد لكن والله ما دخلت الموقع من يوم الخميس 

طبعا الموضوع فى غايه الاهميه والشرح ولا اروع من كدا 

جعله الله فى ميزان حسناتك وعلم ينتفع به

ايوة كدا رجعنا لايام زمان ايام فتح البابا يا عبدالتواب  :wavetowel:

بس خلى بالك الشتا داخل وفتح الباب مش كويس عليك :wink2:

أموت واعرف سبب حبك للون الاحمر هل هو انك اهلاوى معتقدش :wub: 

:fff: تقبل تحياتى :fff:

 

 

تم تعديل بواسطه الصـقـر
  • Like 2
قام بنشر

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

أظن - أخي حسام - أن أبو البراء يحب اللون الأحمر كونه من الألوان الحارة، التي تساعد

في إنضاج الفكرة في أذهان المتلقين يسهل علينا من خلاله هضمها فكرياً:Rules: .. وهو من الألوان الجاذبة للانتباه ، ولذلك 

يستخدم لإيقاظ الانتباه لوجود فكرة لامعة على طريق البحث:wink2:...وقد يكون بخلاف ذلك والجواب الأكيد عند أخينا الحبيب أبو البراء

فعند جهينة الخبر اليقين...وأهل مكة أدرى بشعابها ...

تقبلوا تحياتي العطرة....والسلام عليكم

  • Like 3
قام بنشر

أخي الحبيب حسام عيسى

يشرفني مرورك بالموضوع وبارك الله فيك على دعائك الطيب

أبي الحبيب أبو يوسف أحسنت في تحليل اختياري للون الأحمر

بالنسبة للون الأحمر اللون المفضل عند معظم المصريين (رغم إني زمهلكاوي .. يعني اللون الأحمر مش المفضل) .. لأني بفضل اللون الأزرق أكتر

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

وبعدين تعال هنا : سايب صلب الموضوع وجاي تتكلم في الألوان (يآآآخي عليكم حاجات ..تخلي الواحد يموت على نفسه من الضحك)

تقبلوا وافر تقديري واحترامي

 

  • Like 1
قام بنشر

اخى واستاذى ياسر خليل

وفيت بوعدك فقد وعدتنا بافراد موضوع خاص لشرحCreateObject("scripting.dictionary")

جزاك الله خيرا

وفقكم الله

  • Like 1
  • 4 months later...
قام بنشر

إخواني الكرام

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

أقدم لكم كود مع الشرح لاستخدام القاموس في استخراج القيم الفريدة أي الغير مكررة

بفرض أن لديك قائمة أسماء في العمود الأول تبدأ من الخلية A2 .. وتريد استخراج القيم الفريدة أي الغير مكررة في النطاق ..

أحد الحلول الجميلة هو استخدام القاموس لتخزين القيم الفريدة (بس يا ريت فريدة متزعلش) :blink:

وإليكم الكود بالشرح :rol:

Sub GetUniqueValues()
'يقوم الكود باستخراج القيم الفريدة أي الغير مكررة باستخدام الكائن قاموس
'----------------------------------------------------------------------
    'المتغير الأول لتخزين قيم النطاق والمتغير الثاني لتخزين مفاتيح القاموس
    'الثالث متغير للكائن القاموس والرابع متغير يستخدم في عمل حلقة تكرارية
    Dim myData As Variant, Temp As Variant
    Dim Obj As Object, I As Long
    
    'ليساوي الكائن المسمى القاموس والذي يعتبر أداة قوية للتعامل مع القيم الفريدة [Obj] تعيين المتغير
    Set Obj = CreateObject("Scripting.Dictionary")
    
    'ليساوي قيم النطاق في العمود الأول [myData] تعيين المتغير
    myData = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    
    'حلقة تكرارية تبدأ من أول عنصر في مصفوفة القيم إلى آخر عنصر في المصفوفة
    For I = 1 To UBound(myData)
        'هذا السطر هو أهم سطر في الكود حيث يتم تمرير القيمة للقاموس
        'فيقوم القاموس بتخزينها إذا كانت القيمة تصادفه لأول مرة
        'أما إذا كانت القيمة مكررة فلا يقوم بتخزينها مرة أخرى
        Obj(myData(I, 1) & "") = ""
    Next I
    
    'ليساوي مفاتيح القاموس والتي تمثل القيم الغير مكررة [Temp] تعيين المتغير
    Temp = Obj.Keys
    
    'حيث يتم تحديد عدد الصفوف [E1] وضع عناصر القاموس الغير مكررة في الخلية
    'والتي تقوم بعد عناصر القاموس التي تم تخزينها [Count] من خلال كلمة
    'عبارة عن مصفوفة بالقيم تكون على شكل أفقي لذا نستخدم [Temp] المتغير
    'لتحويل القيم من الشكل الأفقي إلى الشكل الرأسي ليناسب وضع النتائج في عمود [Transpose] كلمة
    Range("E1").Resize(Obj.Count, 1) = Application.Transpose(Temp)
End Sub

لن يتم إرفاق ملف (عشان الكسالى ... يصحصحوا ويركزوا )

الموضوع بسيط مش محتاج مرفق

افتح ملف إكسيل وضع قيم في النطاق A2:A20 مثلاً .. ضع أسماء مكررة في النطاق

افتح محرر الأكواد ..أدرج موديول .. ضع الكود في الموديول

روح لورقة العمل ونفذ الكود عن طريق Alt + F8 ...

هتلاقي القيم الغير مكررة في النطاق من أول الخلية E1 .. وممكن تغير في الكود لتضع النتائج في أي خلية تريدها

بس خلاااااااااااص ..وتصبحوا على السرير سالمين آمنين معافين :wink2:

تقبلوا تحياتي :fff::fff:

  • Like 3
قام بنشر

أخي الفاضل محي الدين أبو البشر

بارك الله فيك على مرورك العطر بالموضوع

إليك التعديل البسيط ..تم وضع جملة IF لاختبار إذا ما كانت القيمة فراغ ام لا ..قبل تخزينها في القاموس

Sub GetUniqueValues()
    Dim myData As Variant, Temp As Variant
    Dim Obj As Object, I As Long
    
    Set Obj = CreateObject("Scripting.Dictionary")
    
    myData = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    
    For I = 1 To UBound(myData)
        If Not IsEmpty(myData(I, 1)) Then
            Obj(myData(I, 1) & "") = ""
        End If
    Next I
    
    Temp = Obj.Keys
    
    Range("E1").Resize(Obj.Count, 1) = Application.Transpose(Temp)
End Sub

تقبل تحياتي

  • Like 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information