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

شرح VLOOKUP وMATCH وINDEX وكيفية الربط بينهما


الصـقر

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

 للامانة العملية هذا العمل منقول من موقع office نقلته لكم وقمت بالعمل على تنسيقه فقط

اولاً : استخدام VLOOKUP

تبحث VLOOKUP عن قيمة في العمود في أقصى يسار الجدول، ثم تُرجع قيمة في الصف نفسه من عمود تحدده في الجدول. (يشير الحرف V في VLOOKUP إلى عمودي).

لتوضيح ما تقوم به VLOOKUP، سنلقي نظرة على مهمة نستخدم فيها البيانات الموجودة في النطاق B3:C11 — يظهر في الصورة التالية — لإرجاع المعدلات بالساعة في النطاق F3:F11، للأسماء المدرجة في النطاق E3:E11. تجدر الإشارة إلى أن الأسماء في E3:E11 مدرجة بترتيب مختلف عن الأسماء في B3:B11.

ZA001154961.gif

المنطق البسيط المستخدم هنا هو: البحث عن اسم مدرج في النطاق E3:E11، ضمن النطاق B3:B11. ثم إرجاع المعدل بالساعة لذلك الاسم، المدرج في النطاق C3:C11، ووضع المعدل في النطاق F3:F11.

الصيغة المطلوبة لتنفيذ ذلك هي:

‎=VLOOKUP(E3,$B$3:$C$11,2,FALSE)‎

لفهم هذه الصيغة، يجب مراعاة بناء جملة الدالة VLOOKUP:

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)‎

سنقسّم الآن الوسيطات في بناء الجملة لهذا المثال المحدد:

  • lookup_value    الإشارة إلى الخلية التي تحتوي على القيمة التي تريد البحث عنها. وبالتالي، بالنسبة إلى الخلية F3 تكون قيمة lookup_value هي E3.
  • table_array     تشير table_array هنا إلى النطاق الذي يحتوي على كل من البيانات التي تبحث عنها والبيانات التي تريد إرجاعها. في هذا المثال، النطاق B3:C11 هو القائمة التي سيتم منها إرجاع المعدل بالساعة.
  • col_index_num    الإشارة إلى رقم العمود ضمن النطاق $B$3:$C$11 الذي يضم البيانات التي تريد إرجاعها. في المثال الذي قدمناه، يقع المعدل بالساعة في العمود 2.
  • range_lookup    تحدد هذه القيمة إن كنت تريد أن تبحث الدالة VLOOKUP عن تطابق تام أو تطابق تقريبي. إذا كانت قيمتها تساوي TRUE أو إذا تم حذفها، فيمكن إرجاع تطابق تام أو تقريبي. لكي تعمل هذه الوسيطة بشكل صحيح، يجب وضع القيم في العمود الأول من table_array بترتيب فرز تصاعدي. وإذا كانت قيمتها تساوي FALSE، كما في هذا المثال، فستعثر الدالة VLOOKUP على التطابق التام فقط. وفي هذه الحالة، لا حاجة إلى فرز القيم في العمود الأول من table_array.
الأخطاء التي قد تنتج من إدراج البيانات أو حذفها

سنعالج الآن بعض التعقيدات التي تبرز في الصيغة.

استخدام ISERROR للتعامل مع اسم مفقود

إذا حذفنا الاسم Sue P من الخلية B9، فسنحصل على النتيجة ‎#N/A في الخلية F5 نظرًا لعدم تمكّن الصيغة من العثور على الاسم في النطاق B3:C11 في الخلية F5. لإخفاء قيمة الخطأ، تكون الصيغة على الشكل التالي:

‎‎‎‎‎=IF‎(ISERROR(VLOOKUP(E3,$B$3:$C$11,2,FALSE))‎,"",VLOOKUP‎(E3,$B$3:$C$11,2,FALSE))‎

المنطق الأساسي المستخدم هنا هو: إذا كانت الصيغة ترجع قيمة خطأ، فيجب إظهار قيمة فارغة في هذه الخلية؛ أو إظهار المعدل بالساعة.

استخدام MATCH للتعامل مع الأعمدة المدرجة

كما رأيت في الدالة VLOOKUP أعلاه، تم إدخال col_index_name كـ 2، وبالتالي فإن الصيغة غير ديناميكية. أي، إذا تم إدراج عمود فارغ بين العمودين B وC من هذا النطاق، فستُرجع الصيغة القيمة 0 لأن العمود 2 لم يعد يتضمّن أي بيانات. ولذلك، فإن مهمتنا الآن هي جعل col_index_name ديناميكية بما فيه الكفاية لتحديد رقم العمود للخلية التي تحتوي على العنوانالمعدل بالساعة. لتنفيذ ذلك، سنستخدم الدالة MATCH.

ثانياً : بناء جملة الدالة MATCH هو:

MATCH(lookup_value,lookup_array,match_type)‎

سنقسّم الآن الوسيطات في بناء الجملة لهذا المثال المحدد:

  • Lookup_value    المرجع للخلية التي تحتوي على المعدل بالساعة. في هذه الحالة، يمكننا إدخال $F$1 أو تحديد "المعدل بالساعة" كـ lookup_value.
  • lookup_array    هذا هو العمود حيث تتوقع أن يكون المعدل بالساعة فيه — هذا هو البحث الديناميكي. وتجدر الملاحظة إلى وجوب وجود صف واحد فقط لـ lookup_array. أي، لا تُدخل النطاق $B$1:$D$2؛ عليك إدخال $B$1:$D$1.
  • match_type    أدخل 0 للعثور على تطابق تام أو 1 للعثور على تطابق تقريبي. في هذه الحالة، سنُدخل 0.

صيغة MATCH هي الآن على الشكل التالي: MATCH($F$1,$B$1:$D$1,0)‎ وناتج الصيغة هو 2.

إذا تم الآن إدراج عمود في النطاق B3:C11، فسيكون عائد الصيغة 3. يمكن الآن إدخال الصيغة VLOOKUP في الخلية F3 على الشكل التالي:

‎=VLOOKUP(E3,$B$3:$D$11,MATCH($F$1,$B$1:$D$1,0),FALSE)‎

 تلميح   لمنع ظهور قيم الخطأ، يمكنك أيضًا تضمين الدالة ISERROR، كما هو موضح أعلاه.

ثالثاً: اكتساب المرونة باستخدام الدالة INDEX

في حين تقوم الدالة VLOOKUP بالبحث عن إحدى القيم في العمود إلى أقصى اليسار في الجدول، ثم تُرجع قيمة في الصف نفسه من عمود تحدده في الجدول، فإن الدالة INDEX أكثر ديناميكية. إذ يمكنها البحث عن قيمة في أي عمود في الجدول وإرجاع القيمة من عمود آخر في الصف نفسه. على سبيل المثال، إذا كان المعدل بالساعة في النطاق A3:A11 بدلاً من النطاق C3:C11، فستفشل صيغة VLOOKUP الأصلية، لأن القيمة المطلوب البحث عنها (الاسم) غير موجودة في العمود إلى أقصى اليسار في الجدول (النطاق A3:B11).

الحل الذي توفره INDEX هو:

  1. البحث عن الصف (في النطاق A3:B11) حيث يظهر الاسم في النطاق D3:D11.
  2. البحث عن العمود حيث يظهر المعدل بالساعة.
  3. إرجاع القيمة عند تقاطع الصف والعمود.

بناء جملة الدالة INDEX هو:

INDEX(array,row_num,column_num)‎

يمكن تفسير بناء جملة الأمر كما يلي:

  • Array    التطابق مع table_array في الدالة VLOOKUP. في المثال المعروض في الصورة التالية، الصفيف هو A1:B11.
  • Row_num    الإشارة إلى رقم صف الاسم، الذي يظهر في النطاق D3:D11، في النطاق B1:B11. كما هو موضح سابقًا، تم استخدام الدالة MATCH لتحديد رقم الصف.
  • Column_num    الإشارة إلى رقم العمود في النطاق A1:B11 الذي نريد الحصول على البيانات منه. مرة أخرى، تم استخدام الدالة MATCH لتحديد رقم العمود.

ZA001154962.gif

ولذلك، فإن INDEX تنفّذ هذه العملية الأساسية: في النطاق A1:B11، البحث عن القيمة عند تقاطع صف مع عمود محدد.

الصيغة المطلوبة لتنفيذ ذلك، كما هو موضح في الصورة أعلاه، هي:

‎=INDEX($A$1:$B$11,MATCH(D3,$B$1:$B$11,0),MATCH($E$1,$1:$1,0))‎
تم تعديل بواسطه حسام عيسى
  • Like 3
رابط هذا التعليق
شارك

 للامانة العملية هذا العمل منقول من موقع office نقلته لكم وقمت بالعمل على تنسيقه فقط

شكراً أستاذ حسام على هذه المعلومات القيمة.

وشيء جميل أن تقوم بتسهيل وصول المعلومة لمن لا يعرفون من أين يحصلون عليها.

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

جزاكم الله خيراً أخي الحبيب حسام

أنا قاعد لك للساقطة واللاقطة

إنت قلت (إذا حذفنا الاسم Sue P من الخلية B9، فسنحصل على النتيجة ‎#N/A في الخلية F5 نظرًا لعدم تمكّن الصيغة من العثور على الاسم في النطاق B3:C11 في الخلية F5.)

مين الأخ ده Sue P؟؟ اللي موجود في B9 (وليد حلو) يا حسام يا حلو ..

وبلاش التعقيد في الشرح .. فهم الكلام واشرحه بأسلوبك (خلي ليك أسلوب مستقل )

اعذرني للانتقاد ..بس أتمنى يكون بناء مش هدام ..

بارك الله فيك على المجهود المبذول أخي الحبيب Sue P أقصد حسام حبيبي

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

 استاذى الفاضل / ياسر

شكرا على مرورك اما موضوع الشرح انا تلميذ لسة بتعلم  مليش في الشرح يعنى  يدوب اقدر اقدم شئ منقول فقط الشرح بقى للاستاذ اللى زيك يا كبير 

تقبل منى وافر الاحترام والتقدير

تم تعديل بواسطه حسام عيسى
  • Like 1
رابط هذا التعليق
شارك

أنا مجرد تلميذ يا مستر حسام ، وبردو بنقل ، كل الفكرة إني بهضم المعلومة وأنقلها بأسلوبي ..ودا اللي أنا عايزك تعمله :smile2:

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

ما هو المشكله انى مش بعرف افهمها اقصد ( اهضمها ) فبكتفى بنقلها ممكن اللى مهضمتهوش انا يهضمه غيرى ويستفيد منه 

تم تعديل بواسطه حسام عيسى
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information