السلام عليكم ورحمة الله
أخي الكريم إن التغيير الذي قمت به في الكود هو تغيير بسيط بإضافة بعض الأسطر لتغيير وضعية Criterea ووضعية ناتج عملية Sumif ولتوضيح هذه التغييرات نقوم بمقارنة الكودين :
الكود خاصتك:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wrk As Worksheet
Dim aa As Range, bb As Range, cc As Range, dd As Range
Set wrk = Sheet1
Set aa = wrk.Range("myRange")
Set bb = wrk.Range("myCriteria")
Set cc = wrk.Range("mysumif")
Set dd = wrk.Range("SumIfRange")
cc = Application.SumIf(aa, bb, dd)
End Sub
الكود الذي تم فيه التغيير:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wrk As Worksheet
Dim aa As Range, bb As Range, cc As Range, dd As Range
For i = 13 To 100
If Cells(9, i) = "" Then Exit Sub
Set wrk = Sheet1
Set aa = wrk.Range("myRange")
Set bb = wrk.Cells(9, i)
Set cc = wrk.Cells(10, i)
Set dd = wrk.Range("SumIfRange")
cc = Application.SumIf(aa, bb, dd)
Next i
End Sub
في الكود الأول وضعت Critera و ناتج Sumif في الخليتين (الثابتتين) E2 و K2 على الترتيب وفي الكود الثاني وضعتهما في خلايا السطرين 9 و 10 بالعبارتين (Cells(9, i و (Cells(10, i حيث i يمثل رقم العمود وجعلته في الكود متغيرا من 13 إلى 100 والرقم 13 (مثلا) هو العمود M ...
والكود يفي بمطلوبك الأخير "اظافة مواد اخرى قد تصل الى 30 مادة" باعتبار أن i (أرقام الأعمدة) تتغير من 13 إلى 100 ما يجعل الكود يقبل أكثر من 80 شرطا (مادة) لأن 100-13 = 87 عمودا (وكل عمود يمثل شرطا أو مادة)
وأتمنى أني وفقت في شرح الكود...
أخوك بن علية