بسم الله والحمد لله والصلاة والسلام على رسول الله
أهلا ومرحبا بكم إخوانى الكرام من جديد
اليوم أقدم لكم دالة تعد تطوير وتحسين لدالة IFERROR
من المعروف أن دالة IFERROR تقوم باسترجاع قيمه يحددها المستخدم فى حالة حدوث خطأ
ولكن ماذا لو أردنا ارجاع قيم فى حالة تساوى قيم أخرى غير حدوث خطأ
فى الغالب نلجأ لدالة IF كالتالى
CODE
=IF(A1=1,5,A1)<br />
هنا فى حالة تساوى الخلية A1 برقم 1 تعود النتيحة 5 غير ذلك تعود الخلية نفسها
سيكون الامر مرهق فى حالة كانت تلك الخلية معادلة طويله أو معادلة صفيف حيث سيتم تكرارها فى عدة اماكن اضافة لانخفاض سرعة المعالجة
لذلك تم برمجة الدالة IfEqual والتى تجلب نتيجة وفقا تساويها لنتيجة أخرى
ويمكن استخدام الدالة مع الصفيف وايضا نتائج الدالة كصفيف لا يشترط الضغط على Ctrl+Shift+Enter
الا فى حالة ادخلت الدالة مع صيغ اخرى تستعمل فيها المصفوفات
الان بناء الدالة كالتالى
CODE
=IFEqual(value,[test],[default])<br />
أول باراميتر اجبارى الادخال وهو القيمة أو الصيغة
ثانى باراميتر اختيارى الادخال وهو القيمة الذى تريد تساويها من اجل استبدالها وفى حالة تجاهل تلك الخانه افتراضيا يتم اختبار وجود اى من الاخطاء
ثالث باراميتر اختيارى الادخال وهو النتيجة التى تريد استرجاعها فى حالة تساوى القيمة فى الباراميتر الثانى بالقيمة بالباراميتر الاول
ومن مميزات الدالة عند تحديد نطاق به خطا لن يسبب هذا خطا لباقى القيم داخل المصفوفه
هذا واكثر له امثله عملية داخل ملف العمل
الان ناتى لمثال عملى بسيط كالتالى
اكتب رقم 5 فى الخلية A1 ثم اكتب الصيغة التالية
CODE
=IFEqual(A1,5,"Done")
هنا فى حالة كانت الخلية A1 برقم 5 ستكون النتيجة هى الكلمة Done خلاف ذلك ستعود قيمة A1 نفسها
ذلك مثال بسيط (ومرفق ملف العمل) ببعض الأمثلة المتنوعة
وكود الدالة كالتالى
CODE
Function IfEqual(v As Variant, Optional test As Variant, Optional default As Variant = "")
'Programming by Eslam Abdullah
Dim arr, arr2, c, rw&, col&, x&, y&
On Error Resume Next
arr2 = v
rw = UBound(arr2, 1) - 1: col = UBound(arr2, 2) - 1
ReDim arr(rw, col)
If rw + col = 0 Then c = v: GoTo 1
For Each c In arr2
1: If IsMissing(test) Then
If IsError(c) Then arr(x, y) = default Else arr(x, y) = c
Else
If c = test Then arr(x, y) = default Else arr(x, y) = c
End If
x = IIf(x = rw, 0, x + 1)
y = IIf(x = 0, y + 1, y)
Next c
If Err.Number Then IfEqual = Application.Transpose(arr) Else IfEqual = arr
End Function
ملاحظة: تم تحديث الدالة بتاريخ 26/10/2018
كان معكم ومعنا ومعاهم برضوا 
أخوكم فى الله اسلام عبدالله
دمتم فى حفظ الله ورعايته