sof17 قام بنشر أكتوبر 12 مشاركة قام بنشر أكتوبر 12 المطلوب كود يستدعي الأصناف الناقصة في المجموعات لدينا مجموعات من 1إلى 96 مثلا وكل مجموع تحتوي على 100 صنف اريد معرفة الأصناف الناقصة في كل مجموع على الترتيب ولكن في هذا المثال عدد المجموعات من 1 إلى 3 فقط لكي يكون الكود سريع الملف الأرقام الناقصة.xlsx رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 12 مشاركة قام بنشر أكتوبر 12 وعليكم السلام ورحمة الله تعالى وبركاته لمزيدا من التوضيح يرجى ارفاق عينة لشكل النتائج المتوقعة رابط هذا التعليق شارك More sharing options...
sof17 قام بنشر أكتوبر 12 الكاتب مشاركة قام بنشر أكتوبر 12 النتائج المتوقعة والصحيحة الأرقام الناقصة.xlsx رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 12 مشاركة قام بنشر أكتوبر 12 (معدل) تفضل اخي الكريم جرب هدا 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 في حالة الرغبة بالحصول على رسالة تعرض "كود الصنف" وعدد "الأرقام المفقودة" لكل صنف بعد تنفيد الكود قم بتعديل الجزء الأخير من الكود كالتالي 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 تم تعديل أكتوبر 13 بواسطه محمد هشام. 2 رابط هذا التعليق شارك More sharing options...
sof17 قام بنشر أكتوبر 13 الكاتب مشاركة قام بنشر أكتوبر 13 شكرا هذا هو المطلوب كود ممتاز رابط هذا التعليق شارك More sharing options...
sof17 قام بنشر أكتوبر 13 الكاتب مشاركة قام بنشر أكتوبر 13 اخي هشام ممكن الملخص يكون في الورقة 2 بدل ما يكون في الميساج بوكس احسن رابط هذا التعليق شارك More sharing options...
أفضل إجابة محمد هشام. قام بنشر أكتوبر 13 أفضل إجابة مشاركة قام بنشر أكتوبر 13 تفضل أخي 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 2 رابط هذا التعليق شارك More sharing options...
sof17 قام بنشر أكتوبر 13 الكاتب مشاركة قام بنشر أكتوبر 13 شكرا استاذ هشام وهو المطلوب اعذرني هناك طلب اخر هل نسطيع تطبيق نفس الفكرة على جلب الأرقام المكرر بدل الناقصة رابط هذا التعليق شارك More sharing options...
محمد هشام. قام بنشر أكتوبر 13 مشاركة قام بنشر أكتوبر 13 منذ ساعه, sof17 said: هناك طلب اخر هل نسطيع تطبيق نفس الفكرة على جلب الأرقام المكرر بدل الناقصة نعم اخي يمكننا فعل دالك حاول فتح موضوع جديد بطلبك مع ارفاق عينة للنتائج المطلوبة وان شاء الله سوف نحاول مساعدتك رابط هذا التعليق شارك More sharing options...
sof17 قام بنشر أكتوبر 13 الكاتب مشاركة قام بنشر أكتوبر 13 شكررررررررا اخي هشام رابط هذا التعليق شارك More sharing options...
الردود الموصى بها
من فضلك سجل دخول لتتمكن من التعليق
ستتمكن من اضافه تعليقات بعد التسجيل
سجل دخولك الان