ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 السلام عليكم ورحمة الله وبركاته نبدأ بعون الله في شرح شيء جديد في عالم البرمجة ، وهو القاموس Dictionary ، وإن شاء المولى يكون مفيد لكم إخواني الكرام. طبعاً عنوان الموضوع جذبكم مش عشان البرمجة أكيد عشان الناموس (وإزاي نقدر نتخلص من الناموس والإزعاج اللي بيسببه ) .. الناموس هنا معناه القانون أو القاعدة .. ودا عنوان كعامل جذب مش أكتر ما هو القاموس 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 وأكتفي بهذ الجزء البسيط .. لكي أجد المتابعة الجيدة منكم وإلى اللقاء في الأسبوع المقبل إن شاء الله مع حلقة جديدة في نفس الموضوع دمتم على طاعة الله 8
ابراهيم الحداد قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 دائما متميز . توقفت عندك كل كلمات الثناء عاجزة حفظك الله للمنتدى دائما بألف خير جمعة مباركة 2
عادل حنفي قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 اخي الحبيب ياسر لك كل الشكر علي المجهود غير العادي وانت ملك المواضيع المتكاملة الموضوع بالفعل شيق ويستحق التثبيت ولكن يجب اولا من الاخوة الذين قاموا بتثبيت مواضيع من قبل ومر عليه المدي المتفق عليه ان يفكوا هذا التثبيت لانه فاق العدد وكذلك المدة ولانريد احد يزعل منا اشجعك واحييك ومنتظرين التكملة خالص تحياتي وتقديري 3
أبوعيد قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 أحسنت أحسنت أحسنت بارك الله فيك , دائما في القمة لأنك صاحب همة زادك الله من فضله 2
مختار حسين محمود قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 الله عليك يا أستاذنا الغالى جزاك الله خيرا على ما تقدمه لنا من علم جديد زادك الله علما ورزقا وبركة فى الدنيا والاخرة تحياتى 2
عبد العزيز البسكري قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 السّلام عليكم و رحمة الله و بركاته بارك الله فيك أستاذنا القدير ياسر خليل أبو البراء .. مفاهيم و مصطلحات جديدة بقاموس معرفتنا البرمجيّة البسيطة وناموسها .. دومًا تتحفنا بمفاجآت سارّة .. جزاك الله خيرًا و زادك من علمه و فضله . خالص احتراماتي 2
الشهابي قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 بارك الله فيك أستاذنا القدير ياسر خليل وزادك الله علما ورفعة وجزاك الله خير 2
محمد حسن المحمد قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 السلام عليكم إخوتي الكرام...أخي الحبيب ياسر أبو البراء تحية طيبة معطرة بشذى الورد وعبق الياسمين..طرح جميل لموضوع هام نرجو أن يتفاعل مع أذهاننا وخصوصا بشرح سلس ومبسط من أستاذ المنتدى الذي تعودنا على طريقته الأنيقة والمتسلسلة في طرح الأفكار..أما عن العنوان نلاحظ أنه استخدم كلمة ناموس ولاحظ أيضا جزالة اللغة العربية وتنوعها وغناها تشترك بلفظ واحد كلمات عدة متباينة ومتغايرة..الناموس هو ملك الوحي جبريل عليه السلام ..كما هو أيضا ما ذكرتم ..وهناك معان أخرى لا داعي لذكرها الآن...أما القاموس..فكما أسلفتم هو الحاضن لهذه المعاني ضمن ترتيب معين وممنهج يخدم المجال المعد له....لله درك أبا البراء...تقبل مروري وتحياتي العطرة.. 2
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2015 الكاتب قام بنشر أكتوبر 9, 2015 إخواني الكرام أخي الحبيب زيزو العجوز المتميز دائماً مشاركاته المبدعة رغم قلتها أخي الغالي ومعلمي الكبير عادل حنفي أخي المتميز ابو عيد صاحب كل جديد أخي الحبيب مختار صاحب الموضوعات الفريدة من نوعها أخي الغالي عبد العزيز البسكري ذو الهمة والنشاط أخي الحبيب الشهابي (النادر وجوده ولكن متميز في مشاركاته) أبي الغالي (هنا أقول أبي وليس أخي فقط) أبو يوسف جزاكم الله خير الجزاء على ثناؤكم الطيب وبارك الله فيكم وما أنا إلا قطيرة في محيط علم الله وأسأله العلي القدير أن يجعل أعمالنا صالحة ولوجهه خالصة تقبلوا وافر تقديري واحترامي 5
Yasser Fathi Albanna قام بنشر أكتوبر 9, 2015 قام بنشر أكتوبر 9, 2015 بارك الله فيك وأكثر من أمثالك وزادك الله من العلم الكثير والكثير أخى الحبيب الغالى الأستاذ الفاضل / ياسر خليل موضوع شيق ورائع للغاية جعله الله فى ميزان حسناك 3
ياسر خليل أبو البراء قام بنشر أكتوبر 9, 2015 الكاتب قام بنشر أكتوبر 9, 2015 أخي الغالي ياسر فتحي مشكور على مرورك العطر بالموضوع .. وجزيت خيراً على دعائك الطيب المبارك 2
أبوعيد قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 أخي العزيز ياسر أقترح على الإدارة أن تفصل موضوعك هذا عن الردود حتى يسهل متابعة دروسك أي يكون موضوعك هذا مقفل حتى يتسنى لك طرح الدروس متتابعة وتفتح صفحة آخرى للردود والاستفسارات تحياتي 2
الصـقر قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 (معدل) اخى الحبيب ياسر خليل أولا اعتذر عن التاخير بالرد لكن والله ما دخلت الموقع من يوم الخميس طبعا الموضوع فى غايه الاهميه والشرح ولا اروع من كدا جعله الله فى ميزان حسناتك وعلم ينتفع به ايوة كدا رجعنا لايام زمان ايام فتح البابا يا عبدالتواب بس خلى بالك الشتا داخل وفتح الباب مش كويس عليك أموت واعرف سبب حبك للون الاحمر هل هو انك اهلاوى معتقدش تقبل تحياتى تم تعديل أكتوبر 10, 2015 بواسطه الصـقـر 2
محمد حسن المحمد قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 السلام عليكم ورحمة الله وبركاته أظن - أخي حسام - أن أبو البراء يحب اللون الأحمر كونه من الألوان الحارة، التي تساعد في إنضاج الفكرة في أذهان المتلقين يسهل علينا من خلاله هضمها فكرياً .. وهو من الألوان الجاذبة للانتباه ، ولذلك يستخدم لإيقاظ الانتباه لوجود فكرة لامعة على طريق البحث...وقد يكون بخلاف ذلك والجواب الأكيد عند أخينا الحبيب أبو البراء فعند جهينة الخبر اليقين...وأهل مكة أدرى بشعابها ... تقبلوا تحياتي العطرة....والسلام عليكم 3
ياسر خليل أبو البراء قام بنشر أكتوبر 10, 2015 الكاتب قام بنشر أكتوبر 10, 2015 أخي الحبيب حسام عيسى يشرفني مرورك بالموضوع وبارك الله فيك على دعائك الطيب أبي الحبيب أبو يوسف أحسنت في تحليل اختياري للون الأحمر بالنسبة للون الأحمر اللون المفضل عند معظم المصريين (رغم إني زمهلكاوي .. يعني اللون الأحمر مش المفضل) .. لأني بفضل اللون الأزرق أكتر وزي ما قال أبو يوسف دا لون جاذب للانتباه عشان الناس تصحصح ومتنامش مني ، وشيء آخر أنا بنوع في الألوان بشكل ملحوظ ودا بردو لجذب الانتباه وجعل القاريء للموضوع لا يتشتت حيث أنه لو تشتت سيصل بسهولة إلى النقطة التي توقف عندها وبعدين تعال هنا : سايب صلب الموضوع وجاي تتكلم في الألوان (يآآآخي عليكم حاجات ..تخلي الواحد يموت على نفسه من الضحك) تقبلوا وافر تقديري واحترامي 1
ابوحمزه المصرى قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 اخى ياسر شكرا على كل جديد ومفيد .. انت دائما مبدع 1
saad abed قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 اخى واستاذى ياسر خليل وفيت بوعدك فقد وعدتنا بافراد موضوع خاص لشرحCreateObject("scripting.dictionary") جزاك الله خيرا وفقكم الله 1
ياسر خليل أبو البراء قام بنشر أكتوبر 10, 2015 الكاتب قام بنشر أكتوبر 10, 2015 أخي الغالي صلاح المصري أخي الحبيب سعد عابد بارك الله فيكما وجزيتما خيراً على مروركما العطر بالموضوع
بكار للأبد قام بنشر أكتوبر 10, 2015 قام بنشر أكتوبر 10, 2015 بارك الله فيك ومتعك الله بموفور الصحة والعافية وأعزك وأعز المنتدى بك - آمين 1
توكل قام بنشر أكتوبر 11, 2015 قام بنشر أكتوبر 11, 2015 جعل الله ذلك في موازين حسناتك وعفر لك ولوالديك 1
ياسر خليل أبو البراء قام بنشر فبراير 29, 2016 الكاتب قام بنشر فبراير 29, 2016 إخواني الكرام السلام عليكم ورحمة الله وبركاته أقدم لكم كود مع الشرح لاستخدام القاموس في استخراج القيم الفريدة أي الغير مكررة بفرض أن لديك قائمة أسماء في العمود الأول تبدأ من الخلية A2 .. وتريد استخراج القيم الفريدة أي الغير مكررة في النطاق .. أحد الحلول الجميلة هو استخدام القاموس لتخزين القيم الفريدة (بس يا ريت فريدة متزعلش) وإليكم الكود بالشرح 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 .. وممكن تغير في الكود لتضع النتائج في أي خلية تريدها بس خلاااااااااااص ..وتصبحوا على السرير سالمين آمنين معافين تقبلوا تحياتي 3
ياسر خليل أبو البراء قام بنشر فبراير 29, 2016 الكاتب قام بنشر فبراير 29, 2016 وجزيت خيراً أخي الفاضل أحمد بمثل ما دعوت لي وزيادة
محي الدين ابو البشر قام بنشر فبراير 29, 2016 قام بنشر فبراير 29, 2016 (معدل) بارك الله بجهودك مشكلة بسيطة استاذي العزيز اذا كانت خلية فارغة فيعتبر الفراغ قيمة وحيدة فقط وجزاك الله كل خير تم تعديل فبراير 29, 2016 بواسطه محي الدين ابو البشر
ياسر خليل أبو البراء قام بنشر فبراير 29, 2016 الكاتب قام بنشر فبراير 29, 2016 أخي الفاضل محي الدين أبو البشر بارك الله فيك على مرورك العطر بالموضوع إليك التعديل البسيط ..تم وضع جملة 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 تقبل تحياتي 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.