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

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

قام بنشر

المطلوب كود يستدعي الأصناف الناقصة في المجموعات

لدينا مجموعات من 1إلى 96 مثلا  وكل مجموع تحتوي على 100 صنف اريد معرفة الأصناف الناقصة في كل مجموع على الترتيب 

ولكن في هذا المثال عدد المجموعات من 1 إلى 3 فقط لكي يكون الكود سريع 

الملف

الأرقام الناقصة.xlsx

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

تفضل اخي الكريم جرب هدا

Sub Find_MissingNumbers()
    Dim WS As Worksheet
    Dim CodeArr() As Variant, NumArr() As Variant, code As Variant
    Dim tmp As Object, ling As Long, cnt As Boolean, n As Boolean
    Dim lastRow As Long, i As Long, j As Long, maxNum As Long
    

    Set WS = Sheets("Sheet1")
    lastRow = WS.Cells(WS.Rows.Count, 1).End(xlUp).Row
    maxNum = 100  '(عدد الأصناف) ' تحديد الحد الاقصى للقيم المفقودة

    n = False
    For i = 3 To lastRow
        If Not IsEmpty(WS.Cells(i, 1).Value) And Not IsEmpty(WS.Cells(i, 2).Value) Then
            n = True
            Exit For
        End If
    Next i
    
    If Not n Then
        MsgBox "الرجاء التحقق من البيانات والمحاولة مرة أخرى", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False
    On Error Resume Next
    WS.Range("F3:G" & WS.Rows.Count).ClearContents
    CodeArr = WS.Range("A3:A" & lastRow).Value
    NumArr = WS.Range("B3:B" & lastRow).Value
    
    Set tmp = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(CodeArr, 1)
        If Not tmp.Exists(CodeArr(i, 1)) Then
            tmp.Add CodeArr(i, 1), New Collection
        End If
        tmp(CodeArr(i, 1)).Add NumArr(i, 1)
    Next i
    On Error GoTo 0
    
    ling = 3
    For Each code In tmp.Keys
        For j = 1 To maxNum
            cnt = False
            For i = 1 To tmp(code).Count
                If tmp(code)(i) = j Then
                    cnt = True
                    Exit For
                End If
            Next i
            If Not cnt Then
                WS.Cells(ling, 6).Value = code
                WS.Cells(ling, 7).Value = j
                ling = ling + 1
            End If
        Next j
    Next code

    Application.ScreenUpdating = True
End Sub

 

 

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

Capture.JPG.7bfe1133d2d47a27ccff278e78df792b.JPG

ling = 3
    Dim msg As String, KyCount As Long
    msg = ": ملخص الأرقام المفقودة" & vbCrLf & vbCrLf
    For Each code In tmp.Keys
        KyCount = 0
        For j = 1 To maxNum
            cnt = False
            For i = 1 To tmp(code).Count
                If tmp(code)(i) = j Then
                    cnt = True
                    Exit For
                End If
            Next i
            If Not cnt Then
                WS.Cells(ling, 6).Value = code
                WS.Cells(ling, 7).Value = j
                ling = ling + 1
                KyCount = KyCount + 1
            End If
        Next j
        msg = msg & "كود الصنف: " & code & " - عدد الأرقام المفقودة: " & KyCount & vbCrLf
    Next code

    Application.ScreenUpdating = True
    MsgBox msg, vbInformation, "نتيجة الأرقام المفقودة"
End Sub

 

الأرقام الناقصة v1.xlsb

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

اخي هشام  ممكن الملخص يكون في الورقة 2 بدل ما يكون في الميساج بوكس احسن 

 

  • أفضل إجابة
قام بنشر

تفضل أخي  

Sub Find_MissingNumbers3()
    Dim WS As Worksheet, dest As Worksheet
    Dim CodeArr() As Variant, NumArr() As Variant, code As Variant
    Dim tmp As Object, ling As Long, cnt As Boolean, n As Boolean
    Dim lastRow As Long, i As Long, j As Long, maxNum As Long
    Dim msg As String, KyCount As Long

    Set WS = Sheets("Sheet1")
    Set dest = Sheets("Sheet2")

    lastRow = WS.Cells(WS.Rows.Count, 1).End(xlUp).Row
    maxNum = 100  ' تحديد الحد الاقصى للقيم المفقودة

    n = False
    For i = 3 To lastRow
        If Not IsEmpty(WS.Cells(i, 1).Value) And Not IsEmpty(WS.Cells(i, 2).Value) Then
            n = True
            Exit For
        End If
    Next i
    
    If Not n Then
        MsgBox "الرجاء التحقق من البيانات والمحاولة مرة أخرى", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False
   
    dest.Range("a2:b" & dest.Rows.Count).ClearContents
    WS.Range("F3:G" & WS.Rows.Count).ClearContents
    CodeArr = WS.Range("A3:A" & lastRow).Value
    NumArr = WS.Range("B3:B" & lastRow).Value
    
    Set tmp = CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(CodeArr, 1)
        If Not tmp.Exists(CodeArr(i, 1)) Then
            tmp.Add CodeArr(i, 1), New Collection
        End If
        tmp(CodeArr(i, 1)).Add NumArr(i, 1)
    Next i
    
    dest.Cells(2, 1).Value = "كود الصنف"
    dest.Cells(2, 2).Value = "عدد الأرقام المفقودة"

    ling = 3
    Dim a As Long
    a = 3
    
    For Each code In tmp.Keys
        KyCount = 0
        For j = 1 To maxNum
            cnt = False
            For i = 1 To tmp(code).Count
                If tmp(code)(i) = j Then
                    cnt = True
                    Exit For
                End If
            Next i
            If Not cnt Then
                WS.Cells(ling, 6).Value = code
                WS.Cells(ling, 7).Value = j
                ling = ling + 1
                KyCount = KyCount + 1
            End If
        Next j
        dest.Cells(a, 1).Value = code
        dest.Cells(a, 2).Value = KyCount
        a = a + 1
    Next code

    Application.ScreenUpdating = True
    MsgBox dest.Name & " تم ترحيل ملخص الأرقام المفقودة إلى", vbInformation

End Sub

 

الأرقام الناقصة v2.xlsb

  • Like 2
قام بنشر

شكرا  استاذ هشام  وهو المطلوب 

اعذرني هناك  طلب اخر هل نسطيع تطبيق  نفس الفكرة  على جلب الأرقام المكرر بدل الناقصة 

قام بنشر
منذ ساعه, sof17 said:

هناك  طلب اخر هل نسطيع تطبيق  نفس الفكرة  على جلب الأرقام المكرر بدل الناقصة 

نعم اخي يمكننا فعل دالك حاول فتح موضوع جديد بطلبك مع ارفاق عينة للنتائج المطلوبة  وان شاء الله سوف نحاول مساعدتك 

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