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

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

قام بنشر

السلام عليكم لدي عمودين في حدود 200000 صف

اريد مقارنة العمودين واستخراج القيم المختلفة بينهم بالرغم من تكرارها في العمود الاخر

مرفق

لا داعى لضغط الملف طالما مساحته صغيره

 

مقارنة.xlsx

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

السلام عليكم

شكرا على الحل للاخ العزيز حسونة حسين

ولكن جربت ادخل بيانات حتى الصف20000 وعند الضغط على الcommandbutton ظهر error

 

 

تم تعديل بواسطه محسن33
قام بنشر (معدل)

اظن ان الكود المقترح من الاستاد @حسونة حسين   يشتغل بشكل جيد على العموم جرب هدا 

Option Explicit
Sub test()
    Dim arr As Variant, i As Long, Irow As Long
    Dim tmp1 As Object, tmp2 As Object, c As Variant
    Dim n As Variant, a As Variant, b As Variant
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")
    
    Application.ScreenUpdating = False
    
    With WS
    Irow = .Columns("A:E").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
        If Irow > 1 Then
            .Range("C2:E" & Irow).ClearContents
        End If
        
        arr = .Range("A2:B" & Irow).Value
        Set tmp1 = CreateObject("Scripting.Dictionary")
        Set tmp2 = CreateObject("Scripting.Dictionary")
        
        For i = 1 To UBound(arr, 1)
            If arr(i, 1) <> "" Then tmp1(arr(i, 1)) = True
            If arr(i, 2) <> "" Then tmp2(arr(i, 2)) = True
        Next i
        
        For Each n In tmp1
            If tmp2.exists(n) Then
                c = cnt(c, n)
                tmp2.Remove n
            Else
                a = cnt(a, n)
            End If
        Next n
        
        For Each n In tmp2
            b = cnt(b, n)
        Next n
        
        If Not IsEmpty(a) Then [C2].Resize(UBound(a), 1).Value = WorksheetFunction.Transpose(a)
        If Not IsEmpty(b) Then [D2].Resize(UBound(b), 1).Value = WorksheetFunction.Transpose(b)
        If Not IsEmpty(c) Then [E2].Resize(UBound(c), 1).Value = WorksheetFunction.Transpose(c)
        
        Application.ScreenUpdating = True
    End With
End Sub
Function cnt(arr As Variant, Value As Variant) As Variant
    If IsEmpty(arr) Then
        ReDim arr(1 To 1)
        arr(1) = Value
    Else
        ReDim Preserve arr(1 To UBound(arr) + 1)
        arr(UBound(arr)) = Value
    End If
    cnt = arr
End Function

 

 

 

مقارنة 3.xlsb

تم تعديل بواسطه محمد هشام.
  • Like 3
قام بنشر

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

في 24‏/9‏/2024 at 03:28, محسن33 said:

ولكن جربت ادخل بيانات حتى الصف20000 وعند الضغط على الcommandbutton ظهر error

ما هو الخطأ الذي يظهر لانه لا يظهر اخطأء بعد وضع بيانات الي الصف ٢٠ ألف

  • Like 1
  • 1 month later...
قام بنشر (معدل)

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

هل يمكن الارقام الموجودة في الاعمدة C و D

تظليل بلون اصفر   في العمود  A و العمود B بلون  برتقالي

 

 

 

تم تعديل بواسطه محسن33
قام بنشر
Option Explicit
Sub test()
    Dim arr As Variant, i As Long, Irow As Long
    Dim dictA As Object, dictB As Object, dictC As Object, dictD As Object
    Dim n As Variant, a As Variant, b As Variant, c As Variant
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")

    With WS
     Irow = .Columns("A:E").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
        If WorksheetFunction.CountA(.Range("A2:A" & Irow)) = 0 And _
        WorksheetFunction.CountA(.Range("B2:B" & Irow)) = 0 Then
            MsgBox "لا توجد بيانات للمقارنة", vbExclamation
            Exit Sub
        End If
'Code .............
..................

Set dictC = CreateObject("Scripting.Dictionary")
    Set dictD = CreateObject("Scripting.Dictionary")
    For i = 2 To Irow
        If WS.Cells(i, 3).Value <> "" Then dictC(WS.Cells(i, 3).Value) = True
        If WS.Cells(i, 4).Value <> "" Then dictD(WS.Cells(i, 4).Value) = True
    Next i
    
    For i = 2 To Irow
        If WS.Cells(i, 1).Value <> "" Then
            If dictC.exists(WS.Cells(i, 1).Value) Or dictD.exists(WS.Cells(i, 1).Value) Then
                WS.Cells(i, 1).Interior.Color = RGB(255, 255, 0)
            End If
        End If
        
        If WS.Cells(i, 2).Value <> "" Then
            If dictC.exists(WS.Cells(i, 2).Value) Or dictD.exists(WS.Cells(i, 2).Value) Then
                WS.Cells(i, 2).Interior.Color = RGB(255, 165, 0)
            End If
        End If
    Next i
    
    Application.ScreenUpdating = True
End Sub

 

مقارنة 3.xlsb

  • Like 3

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