اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

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


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

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

إخواني في الله

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

فكرة الكود هي استخراج القيم الغير مكررة أي استخراج القيم الفريدة في نطاق محدد ..

والكود مشروح لمن أرد الشرح لعل وعسى أن يتعلم الجميع كيفية استخدام الأكواد بشكل جيد

وهذا هو الكود مصحوب بالشرح ... أرجو أن ينال إعجايكم

Sub UniqueByDictionary()
'يقوم الكود باستخراج القيم الفريدة أي الغير مكررة باستخدام الكائن قاموس
'----------------------------------------------------------------------
    'المتغير الأول لتخزين قيم النطاق والمتغير الثاني لتخزين مفاتيح القاموس
    'الثالث متغير للكائن القاموس والرابع متغير يستخدم في عمل حلقة تكرارية
    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("C1").Resize(Obj.Count, 1) = Application.Transpose(Temp)
End Sub

وإليكم الملف المرفق مطبق فيه الكود مع مثال بسيط

حمل الملف من هنا

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

  • Like 6
رابط هذا التعليق
شارك

وجزيت خيراً يا أخي الغالي أحمد

ربنا يجبر بخاطرك زي ما جبرت بخاطري .. يبدو أنني سأكتفي من الموضوعات الجديدة ، حيث أن الأعضاء أصبح لديهم تشبع من العلم .. !!! :closed:

  • Like 1
رابط هذا التعليق
شارك

اخى الحبيب الغالى

انا لم اكتفى من التعلم توكل على الله وعلمنا مما علمك وفضلك به الله علينا ونحن لله شاكرين بان رزقنا بك معلم واخ وصديق

تقبل تحياتى وتقديرى

  • Like 2
رابط هذا التعليق
شارك

بارك الله فيك يا غالي على الدّروس الهامّة و المفيدة و الشّرح البسيط ..

لم نشبّع .. و لا نشبع من علمك أبدًا

واصل و فّقك الله .. و هأنذا بصدد محاولة فهم الكود ..

1.png

تم تعديل بواسطه عبد العزيز البسكري
  • Like 2
رابط هذا التعليق
شارك

أخي الغالي عبد العزيز

بارك الله فيك وجزيت خيراً ..

لكم أسعدتني كلماتك ومرورك العطر بالموضوع

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

  • Like 2
رابط هذا التعليق
شارك

أخى حسام

صباحك معطر بذكر الله

كن كشجرة طيبه تؤتى اكلها كل حين

من يريد ان يتعلم سوف يبحث هنا وهناك 

هل ينتظر المحسن مقابل ممن يحسن عليهم

فاحسن علينا مما فضلك به الله علينا وجزاك الله خيرا

تقبل تحياتى

رابط هذا التعليق
شارك

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

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

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

وأنا لا أنتظر الشكر من الناس ..كلا والله .. فإني آمل الأجر من الله قبل أي شيء آخر ..

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

ولذا قمت بتخصيص موضوع من 5 أسابيع للبحث وتركت المجال للجميع أن يقدم ويبحث ويناقش .. هذا ما أتمناه ..

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

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

  • Like 3
رابط هذا التعليق
شارك

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

جرى ايه يا أخوة؟! لما النقاش بهذا الشكل ..؟!! :Rules: وحدوا الله وليصفي جميعكم القلوب :rol:.. فأنتم في المقام الأول أحبة في الله :fff:

ولن أطيل الكلام ولا أريد أية مناقشات غير مجدية في الأمر :closed:.. فليكن نقاشنا وتركيزنا في التعلم وفي الموضوعات التي تطرح ..:cool:

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

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

في محاولتي لفهم الموضوع وتطبيقه عملياً

حصل معي تداخل مع دروس المصفوفات: في السطر:

myData = sheet.Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value

تم وضع القيم في القيم في  المصفوفة myData

ما احاول عمله هو إضافة قائمة أخرى من sheet آخر أو اكثر إلى المصفوفة myData ليتم المطلوب على اكثر من قائمة في اكثر من sheet

أو كيف نجعل 

Dictionary

يتعامل مع عدة مصفوفات كأنها مصفوفة واحدة

امر آخر:

في نفس السطر .value. لم أعرف اهميتها

حيث وضعت احرف بعد تنفيذ الماكرو تم الأمر

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

أرجو الإفادة ودمتم ذخراً

  • Like 1
رابط هذا التعليق
شارك

أخي الكريم محي الدين

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

رابط هذا التعليق
شارك

9 دقائق مضت, ياسر خليل أبو البراء said:

أخي الكريم محي الدين

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

السلام عليم

بارك الله بك استاذ ياسر

سأعمل على الموضوع وساعود إليك إذا مش ولا بد

 

رابط هذا التعليق
شارك

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

ما زلت عند قولي أني متضايق من قلة التفاعل فأنا لم أنكر قولي .. ولكن لا أريد مناقشات كما ذكرت تضيع الوقت ولا تجدي ..

ولن أحذف المشاركات لأن ذلك يحزن الأعضاء ، فدع النقاش ولكن يجب أن نضع نهايةً له حيث لا جدوى منه وربما يأتي بعواقب غير محمودة

 

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

تقبل تحياتي (ومتزعلش يا حوسو وآدي راسك أبوسها :rol:)

 

  • Like 2
رابط هذا التعليق
شارك

اخى فى الله حسام 

حاسس انك زعلان منى ووالله انا لم اقصد اى شىء غير انه حتى لو لم يتم التفاعل من الاعضاء فلا يؤثر على من يقوم بالرد عليهم بالحل او موضوع تعليمى فهو ينتظر الجزاء من الله وإلا لن يكلف نفسه عناء الجلوس لكتابة موضوع او رد على استفسار 

فارجو منك مسامحتى ان كنت زعلتك بغير قصد

وانا اخوك الصغير

واعتذر منك ومن ابوالبراء ومن جميع الاساتذه والاخوان الافاضل

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

تقبلوا تحياتى واحترامى واعتذارى

  • Like 2
رابط هذا التعليق
شارك

ربنا يعزك ويجازيك كل خير 

ونعوذ بالله العلى العظيم من كل شيطان رجيم

نسال الله ان يحفظكم ويبارك فيكم ويهديكم الصراط المستقيم 

تحياتى وتقديرى لكم اساتذتى الكرام

  • Like 2
رابط هذا التعليق
شارك

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