INDEX MATCH في Excel: الصيغة والأمثلة والأخطاء الشائعة
By Mirko Peters ·
شرح INDEX MATCH في Excel: الصيغة، وطريقة عمل كل دالة، والبحث نحو اليسار والبحث ثنائي الاتجاه، والبحث بمعايير متعددة، والأخطاء الشائعة، مع مقارنة بدالة VLOOKUP.
Automatically translated with AI from the original post. Read the English original
INDEX MATCH في Excel صيغة بحث مكوّنة من دالتين: =INDEX(return_range, MATCH(lookup_value, lookup_range, 0)). تحدد MATCH موقع قيمتك في قائمة، وتُرجع INDEX العنصر الموجود في الموقع نفسه ضمن قائمة أخرى. تستهدف هذه المقالة مستخدمي Excel الذين يكتبون صيغ VLOOKUP ويصطدمون بقيودها، أو الذين ورثوا مصنفاً مليئاً بصيغ INDEX MATCH ويريدون فهمها. ستتعرّف على كل دالة على حدة، وكيفية عملهما معاً، وطريقة البحث نحو اليسار، والبحث ثنائي الاتجاه، واستخدام معيارين، ومعنى الأخطاء.
النقاط الرئيسية
- INDEX MATCH تتكون من دالتين في صيغة واحدة: =INDEX(return_range, MATCH(lookup_value, lookup_range, 0)). تحدد MATCH الموقع، وتُرجع INDEX العنصر الموجود في ذلك الموقع.
- استخدم القيمة 0 كوسيطة ثالثة في MATCH للحصول على تطابق تام. فإذا تُرك على قيمته الافتراضية 1، تفترض MATCH أن البيانات مرتبة تصاعدياً.
- لأن نطاق البحث ونطاق الإرجاع منفصلان، تستطيع INDEX MATCH البحث نحو يسار عمود البحث، وهو ما لا تستطيع VLOOKUP فعله.
- لشرطين، إما أن تدمج الأعمدة في عمود مساعد، أو أن تستخدم صيغة تضرب مقارنتين داخل MATCH.
- لف الصيغة بالدالة IFNA لاستبدال الخطأ #N/A برسالة، مع بقاء الأخطاء الأخرى ظاهرة، حتى لا تُخفى الأخطاء الحقيقية.
ستجد INDEX MATCH في كثير من المصنفات القديمة، لأنها كانت تعمل في كل إصدار من Excel قبل ظهور XLOOKUP بزمن طويل. وما زالت تعمل، وهذا هو السبب الرئيسي لتعلمها. التفاصيل الواردة أدناه مستقاة من صفحات Microsoft عن MATCH وINDEX وVLOOKUP.
ما تفعله INDEX
تُرجع INDEX قيمة من موقع محدد داخل نطاق. تعرض صفحة Microsoft الشكل المصفوفي بالصيغة INDEX(array, row_num, [column_num]).
arrayهو النطاق الذي تُؤخذ منه القيمة.row_numهو رقم الصف داخل ذلك النطاق.column_numهو رقم العمود داخل ذلك النطاق. يمكنك حذفه إذا كان النطاق عموداً واحداً.
تُحسب الأرقام من الخلية العلوية اليسرى للنطاق، لا من بداية الورقة. يستخدم مثال Microsoft كتلة تحتوي على Apples وBananas في العمود الأول، وLemons وPears في العمود الثاني. تُرجع =INDEX(A2:B3,2,2) القيمة Pears، وتُرجع =INDEX(A2:B3,2,1) القيمة Bananas.
تستحق قاعدتان من الصفحة نفسها التذكر. إذا أشار row_num أو column_num إلى خارج النطاق، تُرجع INDEX الخطأ #REF!. وإذا ضبطت row_num أو column_num على 0، تُرجع INDEX العمود أو الصف بأكمله. في Microsoft 365 الحالية تضغط Enter كالمعتاد. أما في الإصدارات الأقدم فتُدخلها كصيغة مصفوفة باستخدام Ctrl+Shift+Enter.
تحتاج INDEX وحدها إلى معرفة الموقع مسبقاً، ومن هنا تأتي الحاجة إلى MATCH.
ما تفعله MATCH
تبحث MATCH في نطاق وتُرجع موقعاً. تعرض Microsoft بناءها بالصيغة MATCH(lookup_value, lookup_array, [match_type]). وهي لا تُرجع العنصر نفسه، بل موقعه النسبي داخل النطاق فقط.
تحدد الوسيطة الثالثة طريقة المطابقة:
0يبحث عن أول تطابق تام. يمكن أن يكون النطاق بأي ترتيب. وهذا هو الخيار الذي ستستخدمه في معظم الأحيان.1، وهو أيضاً القيمة الافتراضية إذا تركت الوسيطة فارغة، يبحث عن أكبر قيمة أصغر من قيمة البحث أو تساويها. يجب أن يكون النطاق مرتباً تصاعدياً.-1يبحث عن أصغر قيمة أكبر من قيمة البحث أو تساويها. يجب أن يكون النطاق مرتباً تنازلياً.
تستخدم أمثلة Microsoft القيم 25 و38 و40 و41 في النطاق B2:B5. تُرجع =MATCH(39,B2:B5,1) القيمة 2، وهي موقع 38، أي القيمة الأدنى التالية. وتُرجع =MATCH(41,B2:B5,0) القيمة 4. أما =MATCH(40,B2:B5,-1) فتُرجع #N/A، لأن هذه القيم ليست مرتبة تنازلياً.
بعض السلوكيات الأخرى الواردة في الصفحة: تتجاهل مطابقة النص حالة الأحرف، لذا فإن "apple" و"APPLE" متطابقان. مع نوع المطابقة 0 وقيمة بحث نصية، يطابق ? أي حرف مفرد، ويطابق * أي سلسلة من الأحرف، ويبحث الرمز ~ الذي يسبق أياً منهما عن الحرف الحرفي نفسه. وإذا لم تعثر الدالة MATCH على أي نتيجة، فإنها تُرجع #N/A.
القيمة الافتراضية 1 توقع كثيرين في الخطأ. فإذا نسيت الوسيطة الثالثة، تفترض MATCH بصمت أن البيانات مرتبة، وقد تُرجع موقعاً خاطئاً دون أي رسالة خطأ. وفي معظم عمليات البحث عن المعرّفات أو الأسماء أو الرموز، اكتب 0.
اجمعها معاً
النمط ثابت دائماً: تُوضع MATCH داخل INDEX وتزوّدها برقم الصف.
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
لنفترض ورقة عمل تحتوي على معرّفات الموظفين في A2:A100، والأسماء في B2:B100، والأقسام في C2:C100. تكتب معرّفاً في الخلية F2 وتريد القسم المرتبط به.
- انقر على الخلية التي ستظهر فيها النتيجة، على سبيل المثال G2.
- اكتب
=INDEX(C2:C100,لتحديد المصدر الذي ستأتي منه الإجابة. - أضف
MATCH(F2,A2:A100,0))لتحديد مكان البحث عن المعرّف. - اضغط على Enter.
الصيغة النهائية هي =INDEX(C2:C100,MATCH(F2,A2:A100,0)). تعثر MATCH على F2 داخل A2:A100 وتُرجع، على سبيل المثال، الرقم 14. ثم تُرجع INDEX العنصر الرابع عشر في C2:C100.
حافظ على تساوي طول النطاقات وصف البداية. إذا بحثت MATCH في A2:A100 وقرأت INDEX القيم من C3:C101، فسيشير الموقع إلى صف خاطئ وتكون النتيجة خاطئة دون أي تنبيه. استخدم صف البداية والنهاية نفسهما لكلتا الدالتين، وثبّتهما بعلامات الدولار، $A$2:$A$100، إذا كنت تنوي نسخ الصيغة إلى الأسفل.
البحث إلى اليسار، وما الذي يختلف عن VLOOKUP
تعرض صفحة VLOOKUP من Microsoft الصيغة على النحو التالي: VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]). وتوضح أن قيمة البحث يجب أن تكون في العمود الأول من النطاق، وأن حذف range_lookup يعني تطابقاً تقريبياً يفترض أن البيانات مرتبة. كما تقترح الصفحة تجربة XLOOKUP.
هذا هو المطلوب نفسه بطريقتين، مع وجود المعرّفات في العمود A والأسماء في العمود B:
=VLOOKUP(F2,A2:B100,2,FALSE)=INDEX(B2:B100,MATCH(F2,A2:A100,0))
تتميز INDEX MATCH بميزتين حقيقيتين. الأولى أنها تستطيع البحث إلى اليسار. فإذا كانت الأسماء في العمود B وتريد المعرّف من العمود A، فما عليك سوى تبديل النطاقات: =INDEX(A2:A100,MATCH(F2,B2:B100,0)). أما VLOOKUP فلا تستطيع ذلك، لأن قيمة البحث يجب أن تكون في العمود الأول. والثانية أنها تشير مباشرة إلى عمود الإرجاع بدلاً من العد. ففي VLOOKUP، يعني الرقم 2 في الصيغة "العمود الثاني من النطاق". وإذا أدرجت عموداً داخل النطاق، فسيشير الرقم إلى عمود مختلف. أما مع INDEX MATCH فيتم تعديل المرجع تلقائياً مثل أي مرجع آخر.
ستقرأ أيضاً أن INDEX MATCH أسرع. صفحات Microsoft لا تقدم مثل هذا الادعاء، وأي فرق في السرعة لا يظهر إلا في المصنفات الكبيرة جداً، لذا لا تختره من أجل السرعة. اخترْه من أجل المرونة.
عمليات البحث ثنائية الاتجاه
يبحث البحث ثنائي الاتجاه عن القيمة عند تقاطع صف وعمود، مثل مبيعات منتج واحد في شهر واحد. استخدم دالتي MATCH، واحدة للصف وأخرى للعمود:
=INDEX(B2:M20,MATCH(P1,A2:A20,0),MATCH(Q1,B1:M1,0))
هنا يحتوي B2:M20 على الأرقام، وA2:A20 على أسماء المنتجات، وB1:M1 على عناوين الأشهر، وتحتوي P1 وQ1 على المنتج والشهر المطلوبين. تعطي الدالة MATCH الأولى الصف، والثانية العمود، وتعيد INDEX الرقم عند تقاطعهما. لاحظ أن نطاق الإرجاع يبدأ من B2 وليس A1، حتى تتطابق المواضع مع نطاقات التسميات: فنطاقا MATCH يبدآن أيضًا من الصف نفسه أو العمود نفسه الذي تبدأ منه الأرقام.
المطابقة وفق معيارين
تأخذ MATCH قيمة بحث واحدة. إذا كان السجل يُعرَّف بحقلين فقط، مثل الفئة والحالة، فأمامك خياران.
عمود مساعد. أضف عمودًا يدمج الحقلين، مثلًا =A2&"|"&B2 في D2، ثم انسخه إلى الأسفل. بعد ذلك ابحث عن النص المدموج:
=INDEX(C2:C100,MATCH(F2&"|"&G2,D2:D100,0))
للفاصل أهميته. فبدونه يصبح الناتج من "AB" و"C" ومن "A" و"BC" كلاهما "ABC". والعمود المساعد سهل القراءة والتحقق، ويعمل في كل الإصدارات.
صيغة مصفوفة. إذا لم ترغب في عمود مساعد، يمكنك ضرب مقارنتين:
=INDEX(C2:C100,MATCH(1,(A2:A100=F2)*(B2:B100=G2),0))
تعطي كل مقارنة TRUE أو FALSE. ويحولها الضرب إلى 1 فقط حين يتحقق الشرطان، فتبحث MATCH عن أول 1. هذه الصيغة غير واردة في صفحتي INDEX وMATCH لدى Microsoft، لذا اختبرها على نطاق صغير. في الإصدارات القديمة من Excel قد تحتاج إلى إدخالها بالضغط على Ctrl+Shift+Enter، بالطريقة نفسها التي تصفها Microsoft لنتائج المصفوفات في INDEX. أما في Microsoft 365 الحالي فيكفي Enter.
أحرف البدل والقيم الأقرب
مع نوع المطابقة 0 والنص، تقبل MATCH أحرف البدل. تُعيد =INDEX(B2:B100,MATCH("Jan*",A2:A100,0)) العنصر المجاور لأول مدخل يبدأ بـ "Jan". وهذا مفيد للرموز الجزئية. اجعل النمط محددًا، لأن MATCH تتوقف عند أول تطابق.
أما للشرائح مثل شرائح الضريبة أو نطاقات العمولة، فاستخدم نوع المطابقة الافتراضي 1 عن قصد، مع ترتيب الحدود تصاعديًا. ضع 0 و1000 و5000 في A2:A4 والنسب في B2:B4، فتعيد =INDEX(B2:B4,MATCH(E2,A2:A4,1)) نسبة أكبر حد لا يتجاوز E2. وهذه من الحالات القليلة التي يكون فيها الترتيب الافتراضي هو الخيار الصحيح.
إصلاح الأخطاء
- #N/A. لم تجد MATCH أي نتيجة. ابحث عن الأخطاء الإملائية والمسافات الزائدة في نهاية النص والأرقام المخزنة كنص، لأن "100" و100 قيمتان مختلفتان. وتحقق من أن نوع المطابقة هو 0، وأن البيانات مرتبة فعلًا إذا استخدمت نوع المطابقة 1 أو -1.
- #REF!. طلبت INDEX صفًا أو عمودًا خارج النطاق. ويحدث هذا أيضًا عند حذف صف أو عمود تستخدمه الصيغة. تحقق من أن نطاق MATCH ونطاق INDEX بالحجم نفسه.
- نتيجة خاطئة دون أي خطأ. غالبًا بسبب نسيان 0 في MATCH، أو لأن النطاقات تبدأ من صفوف مختلفة.
- نتيجة خاطئة بعد النسخ إلى الأسفل. تحركت النطاقات لأنها لم تُثبَّت. أضف
$إلى النطاقات.
لاستبدال الخطأ برسالة، تعيد الدالة IFNA من Microsoft القيمة التي تختارها عندما تعطي الصيغة #N/A، وتمرر أي خطأ آخر دون تغيير:
=IFNA(INDEX(C2:C100,MATCH(F2,A2:A100,0)),"Not found")
فضّل IFNA على IFERROR في عمليات البحث. فـ IFERROR يخفي كل الأخطاء، بما في ذلك #REF! الناتج عن نطاق مكسور، فيبدو العطل الحقيقي كأنه "Not found" عادية. أما IFNA فيغطي الحالة المتوقعة فقط. وتدرج Microsoft الدالة IFNA ضمن Excel 2016 وما بعده.
INDEX MATCH أم XLOOKUP
إذا كان الجميع الذين يفتحون ملفك يستخدمون Microsoft 365 الحالي، فإن XLOOKUP يؤدي المهمة نفسها بدالة واحدة ورسالة جاهزة عند عدم العثور على النتيجة. وقد تناولناها في دليلنا عن XLOOKUP في Excel. لكن صفحة XLOOKUP لدى Microsoft غير واضحة بشأن Excel 2016 وExcel 2019، ولا تذكر Excel للويب. أما INDEX MATCH فيعمل في جميعها. لذا فالاختيار عملي: استخدم XLOOKUP في الملفات الموجهة إلى الإصدارات الحديثة، واستخدم INDEX MATCH عندما ينتقل الملف إلى أشخاص يستخدمون إصدارات أقدم، أو عند صيانة مصنف يستخدمها أصلًا.
الأخطاء الشائعة
- ترك الصفر
0في MATCH والاعتماد على القيمة الافتراضية. - استخدام نطاقات بأحجام مختلفة أو تبدأ من صفوف مختلفة في INDEX وMATCH.
- نسيان تثبيت النطاقات بـ
$قبل نسخ الصيغة إلى الأسفل. - دمج المعايير دون فاصل في عمود مساعد.
- لف كل شيء بـ IFERROR، فتبدو الصيغ المعطوبة كأنها بيانات مفقودة.
- توقّع أن تعيد INDEX MATCH جميع التطابقات، لكنها تعيد الأول فقط.
موضوعات ذات صلة للاستكشاف
- XLOOKUP. دالة البحث الأحدث، وتتضمن اتجاه البحث ووسيطة لحالة عدم العثور على القيمة.
- عدّة نتائج دفعة واحدة. تعيد INDEX MATCH التطابق الأول فقط. دالة FILTER هي الأداة المناسبة لإعادة كل التطابقات في الإصدارات التي تتوفر فيها.
- الجداول والنطاقات المسماة. تجعل المراجع المنظّمة والأسماء عمليات البحث أسهل في القراءة، وتسمح بتوسّع النطاق مع نمو بياناتك.
- الأداء في الجداول الكبيرة. استخدم نطاقات محدّدة بدلًا من الأعمدة الكاملة، وحافظ على إحكام النطاقات.
- عمليات البحث الحسّاسة لحالة الأحرف. تتجاهل MATCH حالة الأحرف، لذلك يحتاج البحث الحسّاس لحالة الأحرف إلى نهج مختلف. اختبر أي حل بديل قبل الاعتماد عليه.
الخطوة التالية
أعِد كتابة إحدى صيغ VLOOKUP لديك باستخدام INDEX MATCH، وقارن النتيجة على عدد من القيم المعروفة. ثم جرّب الصيغة نفسها مع بحث نحو اليسار. وبعد أن تنجز الأمرين، ستعرف متى تكون INDEX MATCH في Excel هي الأداة الأفضل للمهمة.