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

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

قام بنشر

السلام عليكم تحيه طيبه للجميع

بإختصار بيانات يتم تصفيتها باسماء العملاء ويتم استخراج اعلى قيمة للعميل بعد التصفيه بإستخدام دالة SUBTOTAL وتعمل بشكل جيد

المطلوب استخراج تاريخ اعلى قيمة

مرفق المثال وشرح المطلوب بشكل واضح وشرح داخل الماكرو لطريقة عمله

مع الشكر

مثال.rar

قام بنشر

أخي الكريم ماذا لو كان هناك أكبر القيم لعميل واحد بنفس القيمة ..أقصد مثلاً إذا قمنا بتصفية العميل وحصلنا على القيمة 10 مرتين .. ما الحل في هذه الحالة؟

 

قام بنشر

أخي الكريم جرب الكود التالي

Sub Test()
    Dim A, I As Long, II As Long

    A = Sheets("ALL").Cells(1).CurrentRegion.Value

    With CreateObject("Scripting.Dictionary")
        For I = 1 To UBound(A, 1)
            If Not .exists(A(I, 1)) Then
                .Item(A(I, 1)) = .Count + 1
                For II = 1 To UBound(A, 2)
                    A(.Count, II) = A(I, II)
                Next
            Else
                If A(I, 3) > A(.Item(A(I, 1)), 3) Then
                    For II = 2 To UBound(A, 2)
                        A(.Item(A(I, 1)), II) = A(I, II)
                    Next II
                ElseIf A(I, 3) = A(.Item(A(I, 1)), 3) Then
                    A(.Item(A(I, 1)), 2) = Application.Min(A(.Item(A(I, 1)), 2), A(I, 2))
                End If
            End If
        Next
        I = .Count
    End With

    Sheets("DATA").Cells(1).Resize(I, UBound(A, 2)).Value = A
End Sub

تقبل تحياتي

 

  • Like 1
قام بنشر

صراحة أخي الكريم الكود يحتاج لوقت طويل جداً لشرحه ووقتي للأسف لا يسمح بذلك ..

إن شاء الله يتدخل أحد الأخوة ويقوم بشرحه .. ولكن لماذا تريد الشرح .. إذا كنت تريد تعديل على الكود بحيث يناسب ملفك عدلناه لك إن شاء الله

فقط وضح ما تريد فعله ليسهل التعديل

قام بنشر

للرفع المطلوب شرح كود الاستاذ ياسر بعد فهم الكود ممكن تشكيله باي طريقه

في ١٠‏/٦‏/١٤٣٧ هـ at 17:36, ياسر خليل أبو البراء said:

 


Sub Test()
    Dim A, I As Long, II As Long

    A = Sheets("ALL").Cells(1).CurrentRegion.Value

    With CreateObject("Scripting.Dictionary")
        For I = 1 To UBound(A, 1)
            If Not .exists(A(I, 1)) Then
                .Item(A(I, 1)) = .Count + 1
                For II = 1 To UBound(A, 2)
                    A(.Count, II) = A(I, II)
                Next
            Else
                If A(I, 3) > A(.Item(A(I, 1)), 3) Then
                    For II = 2 To UBound(A, 2)
                        A(.Item(A(I, 1)), II) = A(I, II)
                    Next II
                ElseIf A(I, 3) = A(.Item(A(I, 1)), 3) Then
                    A(.Item(A(I, 1)), 2) = Application.Min(A(.Item(A(I, 1)), 2), A(I, 2))
                End If
            End If
        Next
        I = .Count
    End With

    Sheets("DATA").Cells(1).Resize(I, UBound(A, 2)).Value = A
End Sub

 

 

 

  • 1 year later...

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