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

تعديل أو تغير لكود معادلة SUMIF


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

أخي العزيز / samycalls

أضف هذا الأسطر في بدايةالكود

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual

ثم هذه الأسطر في نهاية الكود لإلغاء عمل الأسطر السابقة 

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True

ليصبح الكود أسرع  وهي طريقة تتناسب مع أغلب الأكواد  وشكل الكود سكون هكذا 


Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
r = ActiveCell.Row
c = ActiveCell.Column
If r > 11 And c = 9 Then
Sheets("2").Range("d8:e8") = Sheets("2").Range("d1:e1").Formula
Sheets("2").Range("d8:e8").AutoFill Destination:=Sheets("2").Range("d8:e65"), Type:=xlFillDefault
Sheets("2").Range("C8:E65") = Sheets("2").Range("C8:E65").Value

Sheets("2").Range("d77:e77") = Sheets("2").Range("d2:e2").Formula
Sheets("2").Range("d77:e77").AutoFill Destination:=Sheets("2").Range("d77:e113"), Type:=xlFillDefault
Sheets("2").Range("d113:e113").Copy
Sheets("2").Range("d115").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

Sheets("2").Range("d77:e113") = Sheets("2").Range("d77:e113").Value
Sheets("2").Range("d115:e115").AutoFill Destination:=Sheets("2").Range("d115:e119"), Type:=xlFillDefault
Sheets("2").Range("d115:e119") = Sheets("2").Range("d115:e119").Value
Else
End If
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

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

لايأس مع الحياة ولا حياة مع اليأس ..

ربما يحدث صدى هذة الكلمات دوى فيعلم أصدقائنا واساتذتنا أننا فى انتظار

ردودكم التى تنير لنا الطريق وتفتح لنا آفاق للمعرفة.. فنتعلم ونمتن ونشكر ..

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

أخي الفاضل .إذا لم تجد رد على موضوعك فمعنى هذا أن الطلب مبهم وغير واااااااااضح للجميع ولذلك لا يوجد ردود .. المشكلة ليست في رفع الموضوع ..

حاول مرة أخرى توضح الطلب وارفق شكل النتائج المرجوة ..

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

أخى الكريم .. ياسر

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

للمراجعة بالمجامبع وبالأرصدة ..

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

حوالى ثلاثة آلاف واربعمائة صف حالياً  مما جعل استخدام المعادلة يستنفذ وقت طويل 

وقد طرحت الموضوع سابقاً لإستبدال المعادلة بكود وقد تكرم الأخ الفاضل أبو عيد بالحل ..

ولكن مع مرور الوقت وزيادة التسجيلات سيتم زيادة عدد الصفوف الى عشرين ألف صف

وهذا معناه بطئ يتزايد تدريجياً مع زيادة التسجيلات ..

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

السرعة المنشودة .. أرجو أن أكون قد أوضحت .. كل الشكر ..

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

الأخ الفاضل / أحمد عبد الناصر ..

قبل كل شيئ أشكرك على استجابتك الكريمة والمشاركة القيمة ..

الحل المقدم منكم طرح سابقاً من أحد الزملاء ولكنه ليس هو بيت القصيد 

والمراد هو تنفيذ الكود لمهامه تلقائياً وبشكل يحقق السرعة و الدقة فى نتائج الميزان .

أخى .. أكرمك الله كما أكرمتنى بمشاركتك .. كل التحية ..

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

السلام عليكم

 

مع كثرة البيانات و المعادلات لا اعلم شخصيا كود يجعل المهمة سريعة تلقائية ....

 

 

اعتقد من الممكن ان نجعل كود يعمل بعد تغير قيمة الخلية بأن يذهب فقط امام الحساب المعدل ليضع معادلاته و ينسخه و يلصقه كقيم ....

سوف تظهر مشكلة و هي تغير ايضا الحساب السابق (اي بعد ان يعدل الي الحساب الجديد) في حالة التعديل و ليس اضافة سطر جديد , اعتقد ان لهذه الحالة حل ايضا ....

لست متأكد 100% من دقة و فاعلية هذه الطريقة(لا افضلها صراحة اذن فيها مجال للخطأ) و هي هل تتناسب مع ما تريد ؟؟؟

 

 

تحياتي

---------

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

وعليكم السلام .. أخى الكريم ..

فكرة الكود التى ذكرتها جيدة بقدر ما فهمت من شرحك .. ولكن المهم قدرة هذا

الكود على تحقيـق المراد منه وهو الدقة والسرعة وهذا فقط كل مانتطلع إليه.. 

مع العلم أن أحياناً كثيرة نعود الى قيود سابقة لتعديل القيد نفسه أولتعديل القيمة

ولا نلجأ الى قيود التسوية ..

أنا لا أريد أخى الكريم أن اثقل عليك .. ولكن إن أردت أن تكمل معى حتى نصل الى

الحل المنشود فجزاك الله كل خير .. وهذا سوف يثرى ولو بقدر ما المنتدى ويستفيد

منه كثيراً من الأعضاء .

تحياتى ..

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

السلام عليكم

 

جرب هذه ......

Dim x

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 7 Or Target.Column = 9 Then
    If Target.Cells.Count = 1 Then
    y = ""
    y = Target.Value
        If x = y Then GoTo 1
'''''''''''''''''''''''''''
Application.ScreenUpdating = False
r = Application.WorksheetFunction.Match(x, Sheets("2").Range("c:c"), 0)
Sheets("2").Cells(r, 4).FormulaR1C1 = "=SUMIF(ÇáÎÒíäÉ!C7,RC[-1],ÇáÎÒíäÉ!C6)"
Sheets("2").Cells(r, 4) = Sheets("2").Cells(r, 4).Value

Sheets("2").Cells(r, 5).FormulaR1C1 = "=SUMIF(ÇáÎÒíäÉ!C9,RC[-2],ÇáÎÒíäÉ!C8)"
Sheets("2").Cells(r, 5) = Sheets("2").Cells(r, 5).Value
'+++++
r = Application.WorksheetFunction.Match(y, Sheets("2").Range("c:c"), 0)
Sheets("2").Cells(r, 4).FormulaR1C1 = "=SUMIF(ÇáÎÒíäÉ!C7,RC[-1],ÇáÎÒíäÉ!C6)"
Sheets("2").Cells(r, 4) = Sheets("2").Cells(r, 4).Value

Sheets("2").Cells(r, 5).FormulaR1C1 = "=SUMIF(ÇáÎÒíäÉ!C9,RC[-2],ÇáÎÒíäÉ!C8)"
Sheets("2").Cells(r, 5) = Sheets("2").Cells(r, 5).Value

Application.ScreenUpdating = True

'''''''''''''''''''''''''''
    End If
End If
1
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column = 7 Or Target.Column = 9 Then
    If Target.Cells.Count = 1 Then
        x = ""
        x = Target.Value
    End If
End If

End Sub

--لست متأكد من دقة هذه الطريقة صراحة :]

 

ملحوظة: اعتقد انه من الممكن استخدام Application.Evaluate Method لتكون المعادلات  اسرع و الله اعلم

 

تحياتي

 

 

sumif+-+.rar

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

السلام عليكم ..

أقوم الأن بتجريب الكود ..

والملاحظ حتى الأن أن النتائج فى الميزان لايحدث لها تحديث قيم بتعديل كود سابق وغير

ذلك .. هناك خلل ما .. كلما وضعت قيود أو عدلتها فإن النتيجة غير صحيحة .. 

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

تحياتى

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information