جدول المحتويات
يوضح البرنامج التعليمي كيفية استخدام وظيفة VLOOKUP لنسخ البيانات من ورقة عمل أو مصنف آخر ، و Vlookup في أوراق متعددة ، والبحث ديناميكيًا لإرجاع القيم من أوراق مختلفة إلى خلايا مختلفة.
عند البحث عن بعض المعلومات في Excel ، تكون هذه حالة نادرة عندما تكون جميع البيانات في نفس الورقة. في كثير من الأحيان ، سيتعين عليك البحث عبر أوراق متعددة أو حتى في مصنفات مختلفة. والخبر السار هو أن Microsoft Excel يوفر أكثر من طريقة للقيام بذلك ، والأخبار السيئة هي أن جميع الطرق أكثر تعقيدًا قليلاً من صيغة VLOOKUP القياسية. ولكن مع القليل من الصبر ، سنكتشفها :)
كيفية VLOOKUP بين ورقتين
بالنسبة للمبتدئين ، دعنا نتحرى أبسط حالة - باستخدام VLOOKUP نسخ البيانات من ورقة عمل أخرى. إنه مشابه جدًا لصيغة VLOOKUP العادية التي تبحث في نفس ورقة العمل. الاختلاف هو أنك تقوم بتضمين اسم الورقة في الوسيطة table_array لإخبار الصيغة الخاصة بك حيث يوجد نطاق البحث في ورقة العمل.
الصيغة العامة لـ VLOOKUP من ورقة أخرى هي كما يلي:
VLOOKUP (lookup_value، Sheet! range، col_index_num، [range_lookup])كمثال ، دعنا نسحب أرقام المبيعات من تقرير يناير إلى ملخص ورقة. لهذا ، نحدد الوسيطات التالية:
- Lookup_values موجودة في العمود A في الورقة الملخص ، ونحنVLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
أخيرًا ، تبحث صيغة VLOOKUP القياسية جدًا عن قيمة A2 في العمود الأول من النطاق A2: C6 في الورقة الغرب وترجع قيمة مباراة من العمود الثاني. هذا كل شيء!
Dynamic VLOOKUP لإرجاع البيانات من أوراق متعددة إلى خلايا مختلفة
أولاً ، دعنا نحدد بالضبط ما تعنيه كلمة "ديناميكي" في هذا السياق وكيف ستكون هذه الصيغة مختلفة عن سابقاتها.
في حالة وجود أجزاء كبيرة من البيانات بنفس التنسيق والتي تم تقسيمها على جداول بيانات متعددة ، فقد ترغب في استخراج المعلومات من أوراق مختلفة إلى خلايا مختلفة. توضح الصورة أدناه المفهوم:
على عكس الصيغ السابقة التي استردت قيمة من ورقة معينة بناءً على معرف فريد ، هذه المرة نتطلع لاستخراج القيم من عدة أوراق في الوقت.
هناك حلان مختلفان لهذه المهمة. في كلتا الحالتين ، تحتاج إلى القيام ببعض الأعمال التحضيرية وإنشاء نطاقات مسماة لخلايا البيانات في كل ورقة بحث. في هذا المثال ، حددنا النطاقات التالية:
- East_Sales - A2: B6 على الورقة الشرقية
- North_Sales - A2: B6 على الورقة الشمالية
- South_Sales - A2: B6 على الورقة الجنوبية
- West_Sales - A2: B6 على الورقة الغربية
VLOOKUP و IFs المتداخلة
إذا كان لديك عدد معقول من الأوراق للبحث عنها ، فيمكنك استخدام دالات IF المتداخلةلتحديد الورقة استنادًا إلى الكلمات الأساسية في الخلايا المحددة مسبقًا (الخلايا من B1 إلى D1 في حالتنا).
مع قيمة البحث في A2 ، تكون الصيغة كما يلي:
=VLOOKUP($A2, IF(B$1="east", East_Sales, IF(B$1="north", North_Sales, IF(B$1="south", South_Sales, IF(B$1="west", West_Sales)))), 2, FALSE)
مترجم إلى الإنجليزية ، يقرأ جزء IF:
إذا كان B1 هو شرق ، فابحث في النطاق المسمى East_Sales ؛ إذا كانت B1 هي شمال ، فابحث في النطاق المسمى North_Sales ؛ إذا كانت B1 هي جنوب ، فابحث في النطاق المسمى South_Sales ؛ وإذا كانت B1 هي West ، فابحث في النطاق المسمى West_Sales .
ينتقل النطاق الذي تم إرجاعه بواسطة IF إلى table_array من VLOOKUP ، والذي يسحب قيمة مطابقة من العمود الثاني في الورقة المقابلة.
أنظر أيضا: وأوضح مرجع خلية Excelالاستخدام الذكي للمراجع المختلطة لقيمة البحث ($ A2 - العمود المطلق والصف النسبي) والاختبار المنطقي لـ IF (B $ 1 - العمود النسبي والصف المطلق) يسمح بنسخ الصيغة إلى خلايا أخرى دون أي تغييرات - يقوم Excel بضبط المراجع تلقائيًا بناءً على الموضع النسبي للصف والعمود.
لذلك ، نقوم بإدخال الصيغة في B2 ، ونسخها بشكل صحيح و وصولاً إلى العديد من الأعمدة والصفوف حسب الحاجة ، واحصل على النتيجة التالية:
INDIRECT VLOOKUP
عند العمل مع العديد من الأوراق ، يمكن أن تجعل المستويات المتداخلة المتعددة الصيغة أيضًا مطولة وصعبة القراءة. هناك طريقة أفضل بكثير وهي إنشاء نطاق بحث ديناميكي بمساعدة INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
هنا ، نقوم بتوصيل المرجع إلى الخلية التي تحتوي علىجزء فريد من النطاق المسمى (B1) والجزء المشترك (_المبيعات). ينتج عن ذلك سلسلة نصية مثل "East_Sales" ، والتي تحولها INDIRECT إلى اسم النطاق الذي يمكن فهمه بواسطة Excel.
ونتيجة لذلك ، تحصل على صيغة مضغوطة تعمل بشكل جميل على أي عدد من الأوراق:
هذه هي طريقة البحث بين الأوراق والملفات في Excel. أشكرك على القراءة وآمل أن أراك على مدونتنا الأسبوع المقبل!
تدرب على المصنف للتنزيل
نماذج أوراق متعددة Vlookup (ملف .xlsx)
أشر إلى خلية البيانات الأولى ، وهي A2. - Table_array هو النطاق A2: B6 في ورقة يناير. للإشارة إليه ، ابدأ مرجع النطاق باسم الورقة متبوعًا بعلامة التعجب: Jan! $ A $ 2: $ B $ 6.
يرجى الانتباه إلى أننا نغلق النطاق بمراجع الخلايا المطلقة لمنعه من التغيير عند نسخ الصيغة إلى خلايا أخرى.
Col_index_num هي 2 لأننا نريد نسخ قيمة من العمود B ، وهو العمود الثاني في مصفوفة الجدول. تم تعيين
- Range_lookup على FALSE للبحث عن تطابق تام.
بتجميع الوسيطات معًا ، نحصل على هذه الصيغة:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
اسحب الصيغة إلى أسفل العمود وستحصل على هذه النتيجة:
في بطريقة مماثلة ، يمكنك Vlookup البيانات من أوراق فبراير و مارس :
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
تلميحات وملاحظات:
- إذا كان اسم الورقة يحتوي على مسافات أو أحرف غير أبجدية ، فيجب أن يكون محاطًا بعلامات اقتباس مفردة ، مثل "مبيعات يناير"! $ A $ 2: $ B $ 6 . لمزيد من المعلومات ، يرجى الاطلاع على كيفية الرجوع إلى ورقة أخرى في Excel.
- بدلاً من كتابة اسم ورقة مباشرة في صيغة ، يمكنك التبديل إلى ورقة عمل البحث وتحديد النطاق هناك. سيقوم Excel بإدراج مرجع مع بناء الجملة الصحيح تلقائيًا ، مما يجنبك عناء التحقق من الاسم واستكشاف الأخطاء وإصلاحها.
Vlookup من مصنف مختلف
إلى VLOOKUP بين اثنينفي المصنفات ، قم بتضمين اسم الملف بين قوسين مربعين ، متبوعًا باسم الورقة وعلامة التعجب.
على سبيل المثال ، للبحث عن قيمة A2 في النطاق A2: B6 في ورقة يناير في Sales_reports.xlsx المصنف ، استخدم هذه الصيغة:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
للحصول على التفاصيل الكاملة ، يرجى الاطلاع على VLOOKUP من مصنف آخر في Excel.
Vlookup عبر أوراق متعددة مع IFERROR
عندما تحتاج إلى البحث بين أكثر من ورقتين ، فإن الحل الأسهل هو استخدام VLOOKUP مع IFERROR. الفكرة هي تداخل العديد من وظائف IFERROR للتحقق من أوراق عمل متعددة واحدة تلو الأخرى: إذا لم تجد VLOOKUP الأولى تطابقًا في الورقة الأولى ، فابحث في الورقة التالية ، وهكذا.
IFERROR (VLOOKUP (...) ، IFERROR (VLOOKUP (…)، ...، " غير موجود "))لمعرفة كيفية عمل هذا الأسلوب على بيانات الحياة الواقعية ، دعنا نفكر في المثال التالي. يوجد أدناه جدول ملخص الذي نريد ملؤه بأسماء العناصر والمبالغ من خلال البحث عن رقم الطلب في صحائف الغرب و الشرق :
أولاً ، سنقوم بسحب العناصر. لهذا ، نوجه صيغة VLOOKUP للبحث عن رقم الطلب في A2 على الورقة الشرق وإرجاع القيمة من العمود B (العمود الثاني في table_array A2: C6). إذا لم يتم العثور على تطابق تام ، فابحث في ورقة West . إذا فشل كل من Vlookups ، فقم بإرجاع "غير موجود".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
لإرجاع المبلغ ،ما عليك سوى تغيير رقم فهرس العمود إلى 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
نصيحة. إذا لزم الأمر ، يمكنك تحديد مصفوفات جدول مختلفة لوظائف VLOOKUP المختلفة. في هذا المثال ، تحتوي كلتا ورقتي البحث على نفس عدد الصفوف (A2: C6) ، ولكن قد تختلف أوراق العمل في الحجم.
Vlookup في مصنفات متعددة
لبحث بين اثنين أو أكثر من المصنفات ، قم بتضمين اسم المصنف بين قوسين مربعين ووضعه قبل اسم الورقة. على سبيل المثال ، إليك كيف يمكنك البحث في ملفين مختلفين ( Book1 و Book2 ) بصيغة واحدة:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE),"Not found"))
جعل رقم فهرس العمود ديناميكيًا لأعمدة Vlookup المتعددة
في الحالة التي تحتاج فيها إلى إرجاع البيانات من عدة أعمدة ، فإن جعل col_index_num ديناميكيًا قد يوفر لك بعض الوقت. هناك نوعان من التعديلات التي يجب إجراؤها:
- بالنسبة للوسيطة col_index_num ، استخدم الدالة COLUMNS التي تُرجع عدد الأعمدة في مصفوفة محددة: COLUMNS ($ A $ 1 : ب 1 دولار). (إحداثي الصف لا يهم حقًا ، يمكن أن يكون أي صف فقط.)
- في الوسيطة lookup_value ، قم بتأمين مرجع العمود بعلامة $ ($ A2) ، لذلك يبقى ثابت عند نسخ الصيغة إلى أعمدة أخرى.
كنتيجة لذلك ، تحصل على نوع من الصيغة الديناميكية التي تستخرج القيم المتطابقة من أعمدة مختلفة ، اعتمادًا على العمود الذي يتم نسخ الصيغة إليه:
=IFERROR(VLOOKUP($A2, East!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, West!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "Not found"))
عند الإدخال في العمود B ، الأعمدة ($ A $ 1: B $ 1)يقيّم إلى 2 لإخبار VLOOKUP بإرجاع قيمة من العمود الثاني في صفيف الجدول.
عند النسخ إلى العمود C (أي أنك قمت بسحب الصيغة من B2 إلى C2) ، يتغير B $ 1 إلى C $ 1 لأن مرجع العمود نسبي. وبالتالي ، يتم تقييم COLUMNS ($ A $ 1: C $ 1) إلى 3 إجبار VLOOKUP على إرجاع قيمة من العمود الثالث.
تعمل هذه الصيغة بشكل رائع مع أوراق بحث 2-3. إذا كان لديك المزيد ، فإن IFERRORs المتكررة تصبح مرهقة للغاية. يوضح المثال التالي أسلوبًا أكثر تعقيدًا ولكنه أكثر أناقة.
ابحث عن أوراق متعددة مع INDIRECT
هناك طريقة أخرى للبحث بين أوراق متعددة في Excel وهي استخدام مزيج من VLOOKUP و وظائف غير مباشرة. تتطلب هذه الطريقة القليل من التحضير ، ولكن في النهاية ، سيكون لديك صيغة أكثر إحكاما لـ Vlookup في أي عدد من جداول البيانات.
الصيغة العامة لـ Vlookup عبر الأوراق هي كما يلي:
VLOOKUP ( lookup_value ، INDIRECT ("" "& amp؛ INDEX ( Lookup_sheets ، MATCH (1، - (COUNTIF (INDIRECT (" "" & amp؛ Lookup_sheets & amp؛ "" '! lookup_range ")، lookup_value ) & gt؛ 0)، 0)) & amp؛"'! table_array ")، col_index_num ، FALSE)حيث:
- Lookup_sheets - نطاق مسمى يتكون من أسماء ورقة البحث.
- Lookup_value - قيمة للبحث عنها.
- Lookup_range - نطاق العمود في أوراق البحث حيث يتم البحث عن البحثvalue.
- Table_array - نطاق البيانات في أوراق البحث.
- Col_index_num - رقم العمود في مصفوفة الجدول الذي يتم من خلاله إرجاع قيمة.
لكي تعمل الصيغة بشكل صحيح ، يرجى مراعاة التحذيرات التالية:
- إنها صيغة صفيف ، يجب إكمالها بالضغط على Ctrl + Shift + Enter معًا.
- يجب أن تحتوي جميع الأوراق على نفس ترتيب الأعمدة .
- نظرًا لأننا نستخدم مصفوفة جدول واحدة لجميع أوراق البحث ، حدد أكبر نطاق إذا كانت أوراقك تحتوي على أعداد مختلفة من الصفوف.
كيفية استخدام الصيغة لـ Vlookup عبر الأوراق
إلى Vlookup أوراق متعددة في وقت واحد ، قم بتنفيذ هذه الخطوات:
- اكتب جميع أسماء ورقة البحث في مكان ما في المصنف الخاص بك وقم بتسمية هذا النطاق ( أوراق_البحث في حالتنا).
- البحث عن قيمة A2 ( lookup_value )
- في النطاق A2: A6 ( lookup_range ) في أربع أوراق عمل ( الشرق ، الشمال ، الجنوب و الغرب ) ، و
- سحب القيم المطابقة من العمود B ، وهو العمود 2 ( col_index_num ) في نطاق البيانات A2: C6 ( table_array ).
باستخدام الوسيطات أعلاه ، تأخذ الصيغة هذا الشكل:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
يرجى ملاحظة أننا نغلق كلا النطاقين ($ A $ 2: $ A $ 6 و $ A $ 2: $ C $ 6) بمراجع خلية مطلقة.
باسم نتيجة لذلك ، لدينا الصيغة للبحث عن رقم الطلب في 4 أوراق واسترداد العنصر المقابل. إذا لم يتم العثور على رقم طلب معين ، فسيتم عرض خطأ # N / A كما في الصف 14:
لإرجاع المبلغ ، ما عليك سوى استبدال 2 بـ 3 في col_index_num الوسيطة كمبالغ موجودة في العمود الثالث من صفيف الجدول:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)
إذا كنت ترغب في استبدال تدوين الخطأ القياسي # N / A بالنص الخاص بك ، فالتفاف الصيغة في دالة IFNA:
=IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "Not found")
Vlookup أوراق متعددة بين المصنفات
يمكن أيضًا استخدام هذه الصيغة العامة (أو أي شكل من أشكالها) إلى Vlookup أوراق متعددة في مصنف مختلف . لهذا ، قم بتوصيل اسم المصنف داخل INDIRECT كما هو موضح في الصيغة أدناه:
=IFNA(VLOOKUP($A2, INDIRECT("'[Book1.xlsx]" & INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'[Book1.xlsx]" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "Not found")
Vlookup بين الأوراق وإرجاع أعمدة متعددة
إذا كنت تريد سحب البيانات من عدة الأعمدة ، يمكن لصيغة مصفوفة متعددة الخلايا القيام بذلك دفعة واحدة. لإنشاء مثل هذه الصيغة ، قم بتوفير ثابت صفيف للوسيطة col_index_num .
في هذا المثال ، نرغب في إرجاع أسماء العناصر (العمود B) والمبالغ (العمود C) ، والتي هما العمودان الثاني والثالث في صفيف الجدول ، على التوالي. لذا ، فإن المصفوفة المطلوبة هي{2،3}.
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets &"'!$A$2:$C$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), {2,3}, FALSE)
لإدخال الصيغة بشكل صحيح في خلايا متعددة ، هذا ما عليك القيام به:
- في الصف الأول ، حدد جميع الخلايا المراد ملؤها (B2: C2 في مثالنا).
- اكتب الصيغة واضغط على Ctrl + Shift + Enter. يؤدي هذا إلى إدخال نفس الصيغة في الخلايا المحددة ، والتي ستُرجع قيمة مختلفة في كل عمود.
- اسحب الصيغة لأسفل إلى الصفوف المتبقية.
كيف تعمل هذه الصيغة
لفهم المنطق بشكل أفضل ، دعنا نقسم هذه الصيغة الأساسية إلى الوظائف الفردية:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
العمل من الداخل إلى الخارج ، إليك ما تفعله الصيغة:
COUNTIF و INDIRECT
باختصار ، يبني INDIRECT المراجع لجميع أوراق البحث ، وتحسب COUNTIF تكرارات البحث القيمة (A2) في كل ورقة:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
بمزيد من التفاصيل:
أولاً ، تقوم بربط اسم النطاق (Lookup_sheets) ومرجع النطاق ($ A $ 2: $ A $ 6) ، إضافة الفواصل العليا وعلامة التعجب في الأماكن الصحيحة لعمل مرجع خارجي ، وتغذية السلسلة النصية الناتجة إلى الدالة INDIRECT للإشارة ديناميكيًا إلى أوراق البحث:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF يتحقق من كل خلية في النطاق A2: A6 في كل ورقة بحث مقابل القيمة الموجودة في A2 على الرئيسي ورقة وإرجاع عدد المطابقات لكل ورقة. في مجموعة البيانات الخاصة بنا ، يوجد رقم الطلب في A2 (101) في الورقة West ، وهي الرابعة فيالنطاق المسمى ، لذا تُرجع COUNTIF هذه المصفوفة:
{0;0;0;1}
بعد ذلك ، تقارن كل عنصر من المصفوفة أعلاه مع 0:
--({0; 0; 0; 1}>0)
ينتج عن هذا مصفوفة من قيم TRUE (أكبر من 0) و FALSE (تساوي 0) ، والتي تقوم بإجبارها على القيم 1 و 0 باستخدام أحادي مزدوج (-) ، والحصول على المصفوفة التالية كنتيجة:
{0; 0; 0; 1}
هذه العملية هي إجراء احترازي إضافي للتعامل مع الموقف عندما تحتوي ورقة البحث على عدة تكرارات لقيمة البحث ، وفي هذه الحالة ، ستُرجع COUNTIF عددًا أكبر من 1 ، بينما نريد فقط 1 و 0 في المصفوفة النهائية (في لحظة ، ستفهم السبب).
بعد كل هذه التحولات ، تبدو صيغتنا كما يلي:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEX and MATCH
في هذه المرحلة ، تقوم مجموعة INDEX MATCH الكلاسيكية بخطوات:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
تبحث وظيفة MATCH التي تم تكوينها للمطابقة التامة (0 في الوسيطة الأخيرة) عن القيمة 1 في المصفوفة { 0؛ 0؛ 0؛ 1} وإرجاع موضعه ، وهو 4:
INDEX(Lookup_sheets, 4)
تستخدم الدالة INDEX الرقم الذي تم إرجاعه بواسطة MATCH كوسيطة رقم الصف (row_num) ، وإرجاع القيمة الرابعة في النطاق المسمى Lookup_sheets ، وهو West .
لذا ، تقلل الصيغة بشكل أكبر إلى:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP و INDIRECT
تعالج الدالة غير المباشرة السلسلة النصية بداخلها:
INDIRECT("'"&"West"&"'!$A$2:$C$6")
وتحولها في مرجع ينتقل إلى الوسيطة table_array لـ