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

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

قام بنشر

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

يوجد لدي قائمة أرقام جوالات بالآلاف ..

ويوجد لدي (قائمة أرقام) موجودين في القائمة أرغب بإزالتهم من القائمة

أريد أن أقول للإكسل أو قوقل شيت إحذف هذه القائمة، يعني القائمة الرئيسية اذا كانت تحتوي على أي رقم من هذه الأرقام فاحذفه

ويفضل أن تكون ورقة (sheet) أقوم بتحديثها دورياً بحيث أي رقم أضيفه لهذا العمود داخل الشيت يقوم بحذفه من القائمة الرئيسية الاساسية

فكيف هي الطريقة؟

  • أفضل إجابة
قام بنشر (معدل)

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

ادن انفترض اننا لدينا ورقتين الاولى باسم الرئيسية والثانية باسم استثناءات 

96.PNG.8bfcd333f9e29ad4e41ca72c2def1e5d.PNG

القائمة الرئيسية للارقام على ورقة الرئيسية بداية من الخلية A3 الى غاية A10000  (يمكنك تعديلها بما يناسبك)

قائمة الارقام المرغوب إزالتها موجودة في ورقة إستثناءات بداية من الخلية A2 الى غاية A10000 (يمكنك تعديلها بما يناسبك)

مكان استخراج الأرقام بعد إزالة العدم مرغوب بها هو العمود B 

في حالة استخدامك لإصدارات قديمة من برنامج الأوفيس يمكنك استخدام الصيغة التالية 

ورقة الرئيسية الخلية B3  

=IF(ISNUMBER(MATCH(A3,'استثناءات '!$A$2:$A$10000,0)), "", A3)

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

=IFERROR(INDEX($B$3:$B$10000,MATCH(0,COUNTIF(D2:$D$2,$B$3:$B$10000)+(COUNTIF($B$3:$B$10000,$B$3:$B$10000)<>1),0)),"")

اما في حالة استخدامك للنسخ الحديثة وهدا أفضل دائما 

يمكنك استخدام احدى المعادلات التالية 

=FILTER(الرئيسية!A3:A10000, (ISERROR(MATCH(الرئيسية!A3:A10000, 'استثناءات '!A2:A10000, 0))) * (LEN(الرئيسية!A3:A10000) > 0))

او 

=FILTER(الرئيسية!A3:A10000, (ISERROR(MATCH(الرئيسية!A3:A10000, 'استثناءات '!A2:A10000, 0))) * (الرئيسية!A3:A10000 <> 0))

 كما في المثال المرفق

020202.PNG.3995d35f5543d0a7b8ba7d0dafec25dc.PNG

 

phone_numbers.xlsx

 

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

Sub Extract_the_main()
    Dim i&, b&, n&, xMatch As Boolean
    Dim OneRng1 As Variant, OneRng2 As Variant
    Dim Cnt() As Variant, tmp As Object
    Dim dest As Worksheet: Set dest = Sheets("الرئيسية")
    Dim WS As Worksheet: Set WS = Sheets("استثناءات")

    OneRng1 = dest.Range("A2:A" & dest.Cells(dest.Rows.Count, "A").End(xlUp).Row).Value
    OneRng2 = WS.Range("A2:A" & WS.Cells(WS.Rows.Count, "A").End(xlUp).Row).Value
    
    Set tmp = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(OneRng2, 1)
        If Not IsEmpty(OneRng2(i, 1)) And Not tmp.exists(OneRng2(i, 1)) Then
            tmp.Add OneRng2(i, 1), True
        End If
    Next i
    
    xMatch = False
    ReDim Cnt(1 To UBound(OneRng1, 1), 1 To 1)
    b = 1
    n = 0
    For i = 1 To UBound(OneRng1, 1)
        If Not IsEmpty(OneRng1(i, 1)) Then
            If tmp.exists(OneRng1(i, 1)) Then
                xMatch = True
            ElseIf OneRng1(i, 1) <> 0 Then
                Cnt(b, 1) = OneRng1(i, 1)
                b = b + 1
                n = n + 1
            End If
        End If
    Next i
    
    If Not xMatch Or n = 0 Then
        MsgBox "لم يتم العثور على أي تطابق بين البيانات", vbExclamation, "نتائج التصفية"
        Exit Sub
    End If

    dest.Range("C2:C" & dest.Rows.Count).ClearContents
    If b > 1 Then
        dest.Range("C2").Resize(b - 1, 1).Value = Cnt
    End If
    
    MsgBox "تم تصفية البيانات بنجاح" & vbCrLf & "عدد الأرقام المصفاة: " & n, vbInformation, "ورقة " & dest.Name
End Sub

 

مع امكانية النسخ لنفس الورقة ( الرئيسية ) او ورقة مغايرة في المرفق التالي 

 

 

 

 

phone_numbers vba.xlsb

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

بارك الله لك أستاذ محمد

وهذا جهدي المتواضع في كود يحذف الموجود في قائمة الاستثناءات ويبقي غير الموجود وفي نفس العمود

Sub FilterUniqueItems()
    Dim rngA As Range, rngB As Range, cell As Range
    Dim dict As Object, outputRow As Long

    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("الرئيسية")
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("استثناءات")

    Set rngA = ws.Range("A1:A" & ws.Cells(Rows.Count, "A").End(xlUp).Row)
    Set rngB = ws2.Range("A1:A" & ws2.Cells(Rows.Count, "A").End(xlUp).Row)
    Set dict = CreateObject("Scripting.Dictionary")

    For Each cell In rngB
        dict(cell.Value) = 1
    Next cell

    outputRow = 1
    For Each cell In rngA
        If Not dict.exists(cell.Value) Then
            ws.Cells(outputRow, "A").Value = cell.Value
            outputRow = outputRow + 1
        End If
    Next cell

    ws.Range("A" & outputRow & ":A" & ws.Cells(Rows.Count, "A").End(xlUp).Row).ClearContents
MsgBox "Done by mr-mas.com",,"M.A.S"
End Sub

بالتوفيق للجميع

  • 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