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

تحديد أكبر قيمة بشرط


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

السلام عليكم ، كل التحية لك أخ محمد و لجميع أعضاء المنتدى ،شاكرا لك اهتمامك و سرعة ردك ،

1-لقد أقتربنا كثيرا من المطلوب ، أتمنى أن نستطيع بجهود الجميع التوصل للمطلوب .

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

بارك الله في جهودك المخلصة :fff:

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

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

نزولاً عند طلب الأخ فلسطيني سوف أشرح الصيغة التالية :

=INDIRECT(ADDRESS(1;MAX(IF(LARGE(C3:M3;COLUMN()-13)=C3:M3;COLUMN(C3:M3);0))))
الصيغة السابقة هي صيغة صفيف (أي يجب عند الإدخال الضغط على Ctrl+Shift+Enter) سوف أشرح أولاً الدوال المستخدمة في صيغة الصفيف هذه : - الدالة INDIRECT : تقوم بإرجاع المرجع المحدد بسلسة نصية تمثل عنوانه. - الدالة ADDRESS : تقوم بإنشاء عنوان لمرجع محدد بالاعتماد على رقم صف وعامود المرجع. - الدالة MAX : تقوم بإرجاع أكبر قيمة من مجموعة قيم عددية. - الدالة LARGE : تحدد أكبر قيمة من مجموعة قيم عددية وذلك مع تحديد الرتبة (أول أكبر قيمة ، أو ثاني أكبر قيمة ، أو....الخ). - الدالة COLUMN : ترجع ترتيب العامود لمرجع محدد ، وإذا كان القوسين بعدها فارغين () فترجع ترتيب العامود للخلية التي تحتوي على الصيغة الحالية. - الدالة IF الغنية عن التعريف. شرح الأجزاء :
IF(LARGE(C3:M3;COLUMN()-13)=C3:M3;COLUMN(C3:M3);0)

فحص كل خلية من المجال C3:M3 فإذا كانت أول أكبر قيمة (في حالة الصيغة الموجودة في العامود N) مساوية لقيمة الخلية فيتمم هنا إرجاع ترتيب عامود هذه الخلية وإلا فيتم إرجاع الرقم 0

الجزء السابق سوف ينتج عنه سلسة من الأصفار ورقم عامود أكبر خلية ، وبالتعليمة MAX نستخلص رقم عامود أكبر خلية .

بعدها تقوم التعليمة ADDRESS بإرجاع عنوان الخلية الموجودة في الصف الأول (الموجود فيه الأشهر) و العامود صاحب الرقم الناتج عن الجزء السابق ، أي يتم إرجاع عنوان الخلية التي تحتوي على الشهر المقابل لأول أكبر قيمة من المجال C3:M3 (هذا طبعاً إذا كانت الصيغة موجودة في العامود N).

تقوم التعليمة INDIRECT بعرض محتويات الخلية ذات العنوان الناتج عن الجزء السابق.

هذا ولفهم صيغة الصفيف بشكل جيد أنصحك باستخدام الخيار Evaluate Formula من القائمة Tools القائمة الفرعية Formula Auditing.

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

  • 3 weeks later...

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

آسف على التأخر بسبب نسياني للموضوع ! :)

جرب الدالة التالية التي كتبتها في عجالة :

Function ARRAYING(MyRange As Range, Rank As Byte, NumberRow As Long)
For i = 1 To Rank
If Application.WorksheetFunction.Large(MyRange, i) = Application.WorksheetFunction.Large(MyRange, Rank) Then
n = n + 1
End If
Next i
For Each MyCell In MyRange.Cells
If MyCell.Value = Application.WorksheetFunction.Large(MyRange, Rank) Then
n1 = n1 + 1
If n1 = n Then
ARRAYING = Cells(NumberRow, MyCell.Column).Value
Exit Function
End If
End If
Next MyCell
End Function

Electricity1.zip

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

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

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

Important Information