تعرّف =LAMBDA(price,price*1.2)(B2) دالة صغيرة لها مدخل واحد، price، وتستدعيها فورًا على B2: يصبح سعر القلم 2.5 القيمة 3. وحدها ليست سوى نسخة أطول من =B2*1.2. الغاية من LAMBDA أن تعطي الدالة اسمًا في إدارة الأسماء، فتصبح الصيغة الطويلة =ADDVAT(B2)، وأن تمررها إلى MAP وBYROW والدوال الأخرى أدناه.
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | With VAT |
| 2 | Pen | 2.5 | 3 |
| 3 | Bag | 120 | 144 |
| 4 | Lamp | 35 | 42 |
| 5 | Mug | 8 | 9.6 |
| 6 | Desk | 150 | 180 |
صيغة دالة LAMBDA
=LAMBDA([parameter1, parameter2, ...], calculation)
- كل
parameterاسم لمدخل، مثل الأسماء في LET. ويُسمح بحتى 253 منها. - الوسيط الأخير هو
calculation، الذي يستخدم المعاملات. - توضع قيم المعاملات بين قوسين مباشرة بعد القوس الختامي: تعيد
=LAMBDA(x,y,x*y)(3,4)القيمة 12.
تحتاج LAMBDA وMAP وBYROW وBYCOL وSCAN وREDUCE وMAKEARRAY إلى Microsoft 365 أو Excel 2024 أو Excel للويب. ويحتوي Excel 2021 على LET لكن ليس على هذه الدوال. وتحتوي Google Sheets على LAMBDA أيضًا، وتحفظها باسم من بيانات > الدوال المسماة.
حفظ LAMBDA كدالة مخصصة
تصبح LAMBDA قابلة لإعادة الاستخدام عندما تعطيها اسمًا. ولا يحتاج الاكسل إلى VBA ولا إلى وظيفة إضافية لذلك:
- اذهب إلى صيغ > إدارة الأسماء وانقر جديد (أو صيغ > تعريف الاسم).
- في الاسم، اكتب اسم الدالة، مثل
ADDVAT. - في يشير إلى، أدخل LAMBDA دون مدخلات:
=LAMBDA(price,price*1.2). - انقر موافق. الآن اكتب
=ADDVAT(B2)في أي خلية من المصنف.
Name: ADDVAT
Refers to: =LAMBDA(price,price*1.2)
In a cell: =ADDVAT(B2) returns 3 when B2 is 2.5
تعيش الدالة في ذلك المصنف فقط. انسخ ورقة تستخدمها إلى مصنف آخر فينتقل الاسم معها. غيّر LAMBDA مرة واحدة في إدارة الأسماء فتتحدث كل خلية تستدعيها. واختبر LAMBDA في خلية مع مدخلات بين قوسين قبل حفظها؛ فالخطأ أسهل رؤية هناك.
دالة MAP: تطبيق LAMBDA على كل خلية
تستدعي MAP دالة LAMBDA مرة لكل خلية في نطاق وتعيد نطاقًا بالشكل نفسه. هنا يحصل كل سعر يتجاوز 100 على خصم 10%:
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | Price to pay |
| 2 | Pen | 2.5 | 2.5 |
| 3 | Bag | 120 | 108 |
| 4 | Lamp | 35 | 35 |
| 5 | Mug | 8 | 8 |
| 6 | Desk | 150 | 135 |
تصبح الحقيبة (120) بالقيمة 108 والمكتب (150) بالقيمة 135؛ وتمر الأسعار الأخرى كما هي. صيغة واحدة في C2 تغطي العمود كله. ويمكن لـ MAP أيضًا أن تمشي في نطاقين بالحجم نفسه جنبًا إلى جنب: مع الكميات في D2:D6، تضرب =MAP(B2:B6,D2:D6,LAMBDA(p,q,p*q)) كل سعر في كميته.
دالة BYROW: نتيجة واحدة لكل صف
تسلّم BYROW دالة LAMBDA صفًا كاملًا في كل مرة، فتستطيع LAMBDA استخدام MAX أو SUM أو AVERAGE عليه. أفضل درجة ومتوسط الدرجات لكل طالب:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Student | Test 1 | Test 2 | Test 3 | Best | Average |
| 2 | Ann | 72 | 85 | 90 | 90 | 82.3 |
| 3 | Ben | 64 | 70 | 58 | 70 | 64 |
| 4 | Cara | 88 | 92 | 95 | 95 | 91.7 |
| 5 | Dan | 75 | 60 | 81 | 81 | 72 |
تعيد E2 القيم 90 و70 و95 و81؛ وتعيد F2 القيم 82.3 و64 و91.7 و72. أما =MAX(B2:D5) العادية فتعطي رقمًا واحدًا للجدول كله؛ وBYROW هي التي تُبقي الصفوف منفصلة في صيغة واحدة. وتفعل BYCOL الشيء نفسه لكل عمود: تعيد =BYCOL(B2:D5,LAMBDA(c,AVERAGE(c))) متوسط كل اختبار.
دالتا SCAN وREDUCE: المجاميع التراكمية
تمشي REDUCE في نطاق وتحمل قيمة معها، وتعيد النتيجة النهائية فقط. وتفعل SCAN الشيء نفسه لكنها تعيد كل خطوة، فتصبح مجموعًا تراكميًا بصيغة واحدة:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Item | Price | Running total | Total |
| 2 | Pen | 2.5 | 2.5 | 315.5 |
| 3 | Bag | 120 | 122.5 | |
| 4 | Lamp | 35 | 157.5 | |
| 5 | Mug | 8 | 165.5 | |
| 6 | Desk | 150 | 315.5 |
الوسيط الأول، 0، هو قيمة البداية. لكل سعر، تتلقى LAMBDA المجموع حتى الآن والسعر، وتعيد المجموع الجديد. تمر C2 بالقيم 2.5 و122.5 و157.5 و165.5 و315.5، ولا تعرض D2 إلا القيمة النهائية 315.5. وللمجموع العادي تكون SUM أبسط، لكن REDUCE تستطيع حمل أي شيء، مثل نص يكبر أو عدد لا يرتفع إلا في بعض الصفوف.
تسمية LAMBDA داخل صيغة واحدة بالدالة LET
لا تحتاج LAMBDA إلى إدارة الأسماء إذا كانت صيغة واحدة فقط تستخدمها. سمّها بالدالة LET ومرر الاسم إلى MAP أو BYROW:
| A | B | C | |
|---|---|---|---|
| 1 | Item | Price | Sale price |
| 2 | Pen | 2.5 | 2.25 |
| 3 | Bag | 120 | 108 |
| 4 | Lamp | 35 | 31.5 |
| 5 | Mug | 8 | 7.2 |
| 6 | Desk | 150 | 135 |
يحصل كل سعر على خصم 10%: 2.25 و108 و31.5 و7.2 و135. وفي الاكسل يمكنك أيضًا استدعاء LAMBDA المسمّاة مباشرة داخل LET، =LET(f,LAMBDA(x,x*2),f(5))، التي تعيد 10.
تمرين: مجموع لكل صف بالدالة BYROW
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Student | Test 1 | Test 2 | Test 3 | Total |
| 2 | Ann | 72 | 85 | 90 | |
| 3 | Ben | 64 | 70 | 58 | |
| 4 | Cara | 88 | 92 | 95 | |
| 5 | Dan | 75 | 60 | 81 |
دورك: في E2، أعد مجموع الاختبارات الثلاثة لكل طالب، رقمًا واحدًا لكل صف، بصيغة واحدة.
أخطاء LAMBDA الشائعة
=LAMBDA(x,x*2) #CALC! defined but never called
=LAMBDA(x,x*2)(5) 10
=LAMBDA(x,y,x*y)(3) #VALUE! two parameters, one value
=LAMBDA(x,x*2)(3,4) #VALUE! one parameter, two values
- #CALC! يعني أن LAMBDA موجودة في خلية دون أن تُستدعى. أضف المدخلات بين قوسين، أو احفظها في إدارة الأسماء واستدعها باسمها.
- #VALUE! يعني أن عدد القيم لا يطابق عدد المعاملات. عُدّها في الجانبين.
- #NAME? يعني أن إصدار الاكسل لا يحتوي على LAMBDA، أو أن اسمًا محفوظًا مكتوب بشكل خاطئ. ويتبع اسم المعامل قواعد LET: لا مسافات، ولا اسم يشبه عنوان خلية.
- LAMBDA داخل BYROW تعيد عدة قيم لكل صف تعطي #CALC!. يجب أن ينتج كل صف قيمة واحدة؛ ولإرجاع صف من النتائج، استخدم MAKEARRAY أو صيغة صفيف عادية بدلًا من ذلك.
الأسئلة الشائعة
ما دالة LAMBDA في الاكسل؟
تحوّل صيغة إلى دالة لها مدخلات مسمّاة. تأخذ =LAMBDA(price,price*1.2) مدخلًا واحدًا اسمه price وتعيد price مضروبًا في 1.2. استدعها بإضافة المدخل بين قوسين، =LAMBDA(price,price*1.2)(B2)، أو احفظها باسم في إدارة الأسماء.
كيف أنشئ دالة مخصصة في الاكسل بدون VBA؟
افتح صيغ > إدارة الأسماء > جديد، واكتب اسمًا مثل ADDVAT، وفي يشير إلى أدخل =LAMBDA(price,price*1.2). انقر موافق، فتعمل =ADDVAT(B2) في أي خلية من ذلك المصنف.
لماذا تعيد LAMBDA الخطأ #CALC!؟
لأن LAMBDA المكتوبة في خلية دون مدخلات، مثل =LAMBDA(x,x*2)، دالة لم تُستدعَ أبدًا، فيعرض الاكسل #CALC!. أضف المدخل بين قوسين بعدها، =LAMBDA(x,x*2)(5)، أو احفظها في إدارة الأسماء.
ما إصدارات الاكسل التي تحتوي على LAMBDA؟
Microsoft 365 وExcel 2024 وExcel للويب، ومعها MAP وBYROW وBYCOL وSCAN وREDUCE وMAKEARRAY. ويحتوي Excel 2021 على LET لكن ليس على LAMBDA.
ماذا تفعل BYROW في الاكسل؟
تشغّل LAMBDA مرة واحدة لكل صف من نطاق وتعيد نتيجة واحدة لكل صف: تعيد =BYROW(B2:D5,LAMBDA(r,MAX(r))) أكبر قيمة في كل صف، ممتدة إلى الأسفل.