كيفية تسليط الضوء على القيم المكررة باستخدام vba؟
عند العمل مع البيانات الكبيرة، تكون القيم المكررة مشكلة دائمًا. في أغلب الأحيان أستخدم خيار إزالة التكرارات لإزالة كل هذه القيم. وأنا متأكد من أنك تفعل الشيء نفسه.
لكن إزالة هذه القيم المكررة أو مجرد عدها لا يحل المشكلة أبدًا. الشيء المهم هو فحص جميع القيم المكررة قبل إزالتها.
نعم هذا صحيح. بمجرد تحديد كل هذه القيم، يمكنك التحقق منها ومن ثم يمكنك حذفها. اليوم في هذه المقالة، أود أن أشارككم 4 رموز VBA مختلفة لتسليط الضوء على القيم المكررة.
والشيء هو أن هذه الرموز يمكنها تسليط الضوء على الخلايا بطرق مختلفة. يمكنك ببساطة نسخها ولصقها في محرر VBA الخاص بك واستخدامها.
1. في كل سطر
يتحقق رمز VBA هذا من كافة الخلايا الموجودة في الصف ويسلط الضوء على كافة الخلايا المكررة في الصف. بعبارات بسيطة، إذا كان الصف يحتوي على القيمة “522” مرتين، فسيتم اعتباره مكررًا. ولكن إذا كانت الـ 522 الأخرى في صف آخر، فسيتم اعتبارها فريدة من نوعها.
Sub DuplicateValuesFromRow() 'Declare All Variables. Dim myCell As Range Dim myRow As Integer Dim myRange As Range Dim myCol As Integer Dim i As Integer 'Count Number of Rows and Columns myRow = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Count myCol = Range(Cells(1, 1), Cells(1, 1).End(xlToRight)).Count 'Loop Each Row To Check Duplicate Values and Highlight cells. For i = 2 To myRow Set myRange = Range(Cells(i, 2), Cells(i, myCol)) For Each myCell In myRange If WorksheetFunction.CountIf(myRange, myCell.Value) > 1 Then myCell.Interior.ColorIndex = 3 End If Next Next End Sub
إذا نظرت إلى هذا الماكرو، فسترى أننا استخدمنا حلقة للتحقق من كل صف بحثًا عن قيم مكررة وتمييزها باللون.
نقاط مهمة
- يجب ألا تحتوي بياناتك على صف أو عمود فارغ، وإلا فسيتم تجاهل تلك الخلية.
- يجب أن تكون خلية البداية لبياناتك هي الخلية “A1”. وإذا كنت تريد ضبط نقطة البداية، فأنت بحاجة إلى ضبط الكود.
- يجب أن يكون الصف الأول والعمود الأول من ورقة البيانات الخاصة بك رأسًا.
2. في كل عمود
يتحقق كود VBA هذا من كافة الخلايا الموجودة في عمود ويسلط الضوء على كافة الخلايا المكررة في كل عمود. بعبارات بسيطة، إذا كان العمود يحتوي على القيمة “231” مرتين، فسيتم اعتباره مكررًا. ولكن إذا كان هناك “231” آخر في عمود آخر، فسيتم اعتباره فريدًا.
Sub DuplicateValuesFromColumns() 'Declare All Variables Dim myCell As Range Dim myRow As Integer Dim myRange As Range Dim myCol As Integer Dim i As Integer 'Count number of rows & column myRow = Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Count myCol = Range(Cells(1, 1), Cells(1, 1).End(xlToRight)).Count 'Loop each column to check duplicate values & highlight them. For i = 2 To myRow Set myRange = Range(Cells(2, i), Cells(myRow, i)) For Each myCell In myRange If WorksheetFunction.CountIf(myRange, myCell.Value) > 1 Then myCell.Interior.ColorIndex = 3 End If Next Next End Sub
3. في الاختيار
لنفترض أنك تريد فقط تمييز الخلايا ذات القيم المكررة من التحديد، فيمكن أن يساعدك هذا الرمز. لاستخدام هذا الرمز، ما عليك سوى تحديد نطاق من الخلايا وتشغيل هذا الرمز. يقوم بالتحقق من كل خلية مع التحديد ويسلط الضوء عليها باللون الأحمر إذا كانت الخلية تحتوي على قيمة مكررة.
Sub DuplicateValuesFromSelection() Dim myRange As Range Dim i As Integer Dim j As Integer Dim myCell As Range Set myRange = Selection For Each myCell In myRange If WorksheetFunction.CountIf(myRange, myCell.Value) > 1 Then myCell.Interior.ColorIndex = 3 End If Next End Sub
4. بيانات صحيحة
إذا كانت لديك مجموعة بيانات كبيرة، فيمكنك استخدام رمز الماكرو هذا للتحقق من اكتمال البيانات وتمييز القيم المكررة. يمر هذا الرمز عبر كل خلية واحدة تلو الأخرى ويطبق اللون الأحمر على جميع الخلايا المكررة.
Sub DuplicateValuesFromTable() Dim myRange As Range Dim i As Integer Dim j As Integer Dim myCell As Range Set myRange = Range(“Table1”) For Each myCell In myRange If WorksheetFunction.CountIf(myRange, myCell.Value) > 1 Then myCell.Interior.ColorIndex = 3 End If Next End Sub
ملاحظة هامة: في الكود أعلاه استخدمنا اسم الجدول “Table1″، يمكنك تغيير هذا الاسم من الكود. الآن، إذا كان لديك نطاق، يمكنك فقط استخدام اسم النطاق.
[نصيحة إضافية] عد القيم المكررة
يساعدك هذا الرمز على حساب عدد القيم المكررة من التحديد. عند تشغيل هذا الرمز، فإنه يقوم بإرجاع مربع رسالة يوضح الرقم.
Sub CountDuplicates() Dim i As Integer Dim j As Integer Dim myCell As Range Dim myRange As Integer myRange = Range("Table1").Count j = 0 For Each myCell In Range("Table1") If WorksheetFunction.CountIf(Range("Table1"), myCell.Value) > 1 Then j = j + 1 End If Next MsgBox j End Sub
مرة أخرى في الكود أعلاه استخدمنا اسم جدول وقمت بتغييره أو استبداله بنطاق.
ملف المثال
قم بتنزيل ملف العينة هذا هنا لمعرفة المزيد.
خاتمة
في مواقف مختلفة، نحتاج إلى التحقق من القيم المكررة بطرق مختلفة. وجميع الرموز المذكورة أعلاه يمكن أن تكون مفيدة لك في هذا الصدد. إذا أردت، يمكنك تغيير لون التمييز من الرموز باستخدام رقم فهرس الألوان.
الآن ساعدني بشيء واحد.
أين يمكننا تحسين هذه الرموز؟
يرجى مشاركة أفكارك معي في قسم التعليقات، ويسعدني أن أسمع منك. ولا تنس مشاركة هذه النصيحة مع أصدقائك.