السلام عليكم ورحمة الله وبركاته
إخواني في الله
الموضوع ليس جديد وقد تم طرح الكود في مشاركات فرعية بموضوعات مختلفة بالمنتدى ، ولكن لأهميته رأيت ان أقوم بطرح موضوع مستقل ليسهل الوصول إلى الموضوع باستخدام خاصية البحث في المنتدى
فكرة الكود هي استخراج القيم الغير مكررة أي استخراج القيم الفريدة في نطاق محدد ..
والكود مشروح لمن أرد الشرح لعل وعسى أن يتعلم الجميع كيفية استخدام الأكواد بشكل جيد
وهذا هو الكود مصحوب بالشرح ... أرجو أن ينال إعجايكم
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
وإليكم الملف المرفق مطبق فيه الكود مع مثال بسيط
حمل الملف من هنا
تقبلوا تحياتي