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

تحويل دالة SUMPRODUCT الى كود VBA


zxzxzxz

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

السلام عليكم

لدي معادلة تعمل بشكل صحيح

واريد تحويلها الى كود VBA

هل هذا ممكن

اريد تطبيق هذه المعادلة على الخلايا من E2 الى E100


=SUMPRODUCT((DATA!B:B<$A2)*(DATA!M:M="MOHAMMED")*(DATA!A:A=$B2)*(DATA!W:W))

تحياتي لكم

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

Sub testo()

Sheets("result").Select

Range("e2:e100").Formula = "=SUMPRODUCT((DATA!B:B<A2)*(DATA!M:M=$h$1)*(DATA!A:A=B2)*(DATA!W:W))"


End Sub

الخلية h1 فى الشيت result

بها القيمة

MOHAMMED

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

السلام عليكم

اضافة الى كود الاخ Kemas

بارك الله فيه

والذي ممكن تعدل فيه ليشمل نطاق الخلايا الماخوذ من الورقة DATA

صفوف معينة مثلا من 1:1500

Sub testo()

Sheets("result").Select

Range("e2:e100").Formula = "=SUMPRODUCT((DATA!B1:B1500<A2)*(DATA!M1:M1500=$h$1)*(DATA!A1:A1500=B2)*(DATA!W1:W1500))"

Range("e2:e100").Cells = Range("e2:e100").Value

End Sub

==================================== طريقة اخرى الاسم MYRNG هو نطاق الخلايا DATA!A1:W1500
Sub kh_Evaluate()

Dim Rng As Range, N As Range

Set Rng = Sheets("Result").Range("E2:E100")

Rng.ClearContents

For Each N In Rng

    N = Application.Evaluate("SUMPRODUCT((INDEX(MYRNG,0,13)=" & Range("H1").Address & ")*(INDEX(MYRNG,0,1)=" & Cells(N.Row, 2).Address & ")*(INDEX(MYRNG,0,2)<" & Cells(N.Row, 1).Address & ")*INDEX(MYRNG,0,23))")

Next

End Sub
===================================== طريقة اخرى بدون استخدام الدالة SUMPRODUCT بالكود مباشرة:
Option Explicit


Sub Kh_SumRange()

Dim i As Integer

Range("E2:E100").ClearContents

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

With Sheets("Result")

    For i = 2 To 100

        .Cells(i, "E") = Kh_Sum(.Cells(i, "A"), .Cells(i, "B"))

    Next i

End With

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

End Sub


---------------------------------------

Function Kh_Sum(Colmn_A As Range, Colmn_B As Range)

Dim Z As Double

Dim R As Long, Last As Long

With Sheets("DATA")

    Last = .Range("A" & .Rows.Count).End(xlUp).Row

    For R = 1 To Last

        If .Cells(R, "M") = "MOHAMMED" Then

            If .Cells(R, "A") = Colmn_B Then

                If .Cells(R, "B") < Colmn_A Then

                    Z = Z + .Cells(R, "W")

                End If

            End If

        End If

    Next R

End With

Kh_Sum = Z

End Function


شاهد المرفق

خبور خير

تحويل معادلة الى كود.rar

  • Like 1
رابط هذا التعليق
شارك

معذرة

يبدو أننا و الأستاذ خبور كتبنا بوقت واحد

لعل هذا من الفأل الحسن

الأستاذ خبور فى رد واحد

قدم لنا كتابا

نذاكر فيه إن شاء الله بقية الصيف

و مع هذه المذاكرة فالنتائج غير مضمونة

زادك الله علما

مؤقتا

وكدفعة بسيطة لتلميذك

ما فائدة هذا السطر المزيد على الكود الذى قدمته للأخ

Range("e2:e100").Cells = Range("e2:e100").Value

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

رابط هذا التعليق
شارك

السلام عليكم

بارك الله فيك اخي Kemas

ما فائدة هذا السطر المزيد على الكود الذى قدمته للأخ

Range("e2:e100").Cells = Range("e2:e100").Value

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

هذا لتحويل الصيغة الى قيمة

يعني نستغني عن وجود الصيغة لتخفيف حجم الملف

خبور خير

رابط هذا التعليق
شارك

اخي خبور خير

واخي kemas

شكرا لكم على الملفات والاكواد وهي تعمل بشكل سليم لكن واجهتني مشكلة

وهي حجم البيانات التي استخدمها

صراحة اريد تطبيق الكود على الخلايا e2:e54000

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

Run-time error 6

Overflow

وانا اريد تطبيق معادلة VBA بدلا من دالة الاكسل حتى اسرع عملية الحساب ... ولكن تفاجاة برسالة الاررروررر

هل هناك حل اخر او اضافة على الاكود اعلاه ؟ وهل هناك عملية تحسب المعادلة بشكل اسرع مع حجم هذه البيانات؟

تحياتي للجميع

رابط هذا التعليق
شارك

السلام عليكم

صراحة اريد تطبيق الكود على الخلايا e2:e54000

اي كود او معادلة ستتعامل مع 54000 صف

وبالشروط التي تريدها

اكيد ستاخذ الكثير من الوقت

ايه الداعي لحساب هذه الكم في آن واحد ؟؟

بامكانك تحجيم ما تريده حسب طلبك

خبور خير

رابط هذا التعليق
شارك

السلام عليكم ماشاء الله عليكم حلول اكثر من رائعة

لكن استاذي الفاضل خبور خير هل إذا اردنا استخراج النتائج من ورقة DATA للجميع وليس MOHAMMED فقط فهل هذه المسألة صعبة أومعقدة،،،، يعني التجميع على

حسب كل اسم وكما هو موجود بالجدول تماماً قرين كل منتج واسمه وتاريخ انتاجه،،، ياريت تتفضلوا بالحل اكون ممون لكم جداً جداً

رابط هذا التعليق
شارك

هلا فيك اخي خبور خير

صراحة واقع بالمشكلة هذه لي شهر...

البيانات عارف ان حجمها كبير جدا

لكن ماذا تقترح؟

هل تعتقد ان الاكسس راح يكون اسرع من الاكسل بمعالجة هذا النوع من البيانات؟

تحياتي لك

رابط هذا التعليق
شارك

  • 4 years 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