مشکل تابع VLOOKUP در پیدا کردن مقادیر تکراری در اکسل – جستجوی مقادیر تکراری در اکسل
خانه » آموزش اکسل »سلام همراه گرامی
احتمالا شما هم مثل خیلی از کاربرای اکسل زمانیکه جدولی شامل داده های تکراری دارید و میخواهید از تابع Vlookup برای یافتن نتایج استفاده کنید، با مشکل مواجه شدید. بله؛ مشکل اینجاست که وقتی یک عبارت جستجو به تابع Vlookup میدیم و در ازای اون نتیجه متناظرش رو میخوایم، تابع Vlookup فقط اولین نتیجه رو برای برمیگردونه. تابع VLOOKUP در جستجوی مقادیر تکراری درست عمل نمیکنه.
مثلاً فرض کنید یک شرکت پخش هستیم و مشتریان ما فروشگاه هایی هستند که به تعداد دفعات مختلف ازمون خرید کردن و میزان خریدشون رو در جدول زیر ثبت کردیم. حالا میخوایم در جدول کناری نام هر فروشگاه رو که وارد میکنیم، تمام خربدهای اون (توجه کنید تمام خرید ها نه اولین خرید) مقابلش لیست بشن. خوب این چیزی که میخوایم مشابه کارکرد Vlookup هستش. اما بیاید با هم فرمول Vlookup رو براش بنویسیم.
در عکس بالا فرمول با تابع ویلوکاپ رو میبینید که اگر Enter رو بزنیم، نتیجه فرمول میشه 1200000؛ در نگاه اول میگیم اوکی شد اما وقتی به سمت پایین فرمول رو تعمیم میدیم تا خریدهای دیگه فروشگاه کوروش رو لیست کنیم، میبینیم که همون 1200000 تکرار میشه و اینجوری میشه که متوجه میشیم تابع ویلوکاپ در تشخیص نتایج بعدی مربوط به یک عبارت جستجوی تکراری عمل نمیکنه. (عکس زیر)
برای حل این مشکل باید از یک ستون کمکی و ترکیب تابع های Index و Small استفاده کنیم.
ایجاد سلول کمکی با استفاده از تابع IF
ابتدا در کنار ستون میزان خرید یک ستون کمکی ایجاد میکنیم. میخواهیم اگر مقدار جستجوی ما (سلول E3) برابر با هر سلول ستون B بود، شماره ردیف آن سلول در ستون کمکی درج شود و اگر برابر نبود سلول کمکی آن خالی بماند (چرا؟! در ادامه میفهمیم). مثلا در عکس پایین عبارت جستجو کوروش است. پس باید در ستون D، سلول های D5، D3 و D9 به ترتیب برابر 1، 3 و 7 باشند و بقیه سلول ها خالی. به این نحوه ما داریم سلول های موردنظرمان را نشانه گذاری میکنیم. احتمالاً میپرسید شماره ردیف D3 که 3 است پس چرا باید 1 قرار گیرد؟ چون جدول از ردیف 3 شروع شده ما از شماره ردیف ها 2 تا کم میکنیم. پس به صورت زیر با استفاده از تابع IF در اکسل فرمول نویسی میکنیم:
IF($E$3=B3,ROW()-2,””)
در فرمول زیر تابع ROW بدون آرگومان است. این تابع زمانیکه آرگومانی وارد نشود، سطری که در آن قرار گرفته است را برمیگرداند.
نتیجه این فرمول در ستون کمکی به صورت زیر است:
تشریح فرمول اصلی (ترکیب INDEX و SMALL)
خب! حالا نوبت فرمول نویسی اصلی رسیده. در سلول F3 فرمول زیر رو مینویسیم و در ادامه تشریحش میکنیم:
=INDEX($C$3:$C$10,SMALL($D$3:$D$10,ROW()-2)
در فرمول بالا با استفاده از تابع INDEX به اکسل گفتیم برو داخل سلول های C3 تا C10 بگرد و اون ردیفی که تابع SMALL میگه رو برگردون. در تابع SMALL هم گفتیم برو از بین سلول های D3 تا D10 که همون سلول های کمکی ما بودن، ROW()-2 امین سلول کوچک رو پیدا کن. بعد هم این فرمول رو تا پایین (اینجا تا سلول F5) تعمیم دادیم.
بیاید با هم نحوه عملکرد فرمول در اولین سلول که مربوط به اولین خرید فروشگاه کوروش هست رو بررسی کنیم.
جواب فرمول بالا میشه: 1. حالا ما در فرمول کلی همین فرمول بالا رو به عنوان آرگومان دوم تابع index قرار دادیم که تشریحش رو در عکس زیر میبینید:
حالا اگر همین فرمول رو برای سلول های پایینتر (F4، F5 و …) بررسی کنیم، میبینیم که به درستی نتیجه مطلوب ما رو برمیگردونه.
دوست عزیز؛ شما برای آموزش مطالب بیشتر در زمینه نرم افزار اکسل میتونید در دوره های اکسل مقدماتی و اکسل پیشرفته در آموزشگاه پویش پایدار شرکت کنید و علاوه بر استفاده از خدمات دوره، مدرک معتبر و بین المللی برای نرم افزار اکسل دریافت کنید.
دستتون درد نکنه واقعا
چالش شده بود برام مدت زیادی
ممنون از همراهی و حسن توجه شما
سلام
ممنون از آموزش خوبتون
من دقیقا این مشکل رو داشتم اما از این هم پیچیده تر
چون نمیخوام دونه دونه نام مشتری رو تایپ کنم و خروجی بگیرم. میخوام در لیست اسامی نوشته شده ای که دارم ، بیاد و تمام خروجی هار و پشت سرهم بده!!
یعنی برای A سه خروجی بده، برای B یک خروجی و برای C دو خروجی
بدهی نام ______>>>>> نام
12 A A ?
B B 1 ?
C C 18 ?
C 202
A 50
A 25
سلام و عرض ادب
ممنون از توجه شما
اگر دقیق متوجه سوالتون شده باشم میتونید از جدولتون یک کپی تهیه کنید و اون رو بر اساس نام محصول SORT کنید.
اگر با این روش مشکلتون حل نمیشه لطفا سوالتون رو با جزییات بیشتری مطرح کنید.
خیلی ممنون
اما این راهکار فقط برای داده های محدود جواب می ده که بخوای یکی یکی موارد رو تو سلول E3 بنویسی
اگر بخوایم در سلول کناری E3 (نام فروشگاه) که در اینجا می شه F3 اولین خریدش رو بیاریم، در G3 دومین خرید، در H3 سومین خرید رو و به همین ترتیب…
راهکاری داره؟
هدف اینه که نام همه فروشگاه ها رو تو ستون E زیر هم بیاریم و در ستون های بعدی، هر کدوم از خریدهای همون فروشگاه درج بشه
خیلی عالی مهندس ممنون
استاد عزیزم سلام ، ضمن عرض تشکر از شما ، اگر مقادیری که توسط تابع پیدا شد رو بخواهیم فقط در یک سلول نمایش بده و با عبارتی مثل کاما یا فاصله یا هرچیز دیگه ای جدا کنه امکانپذیره ؟یعنی در همون سلول F3 تمام خریدهای کوروش رو کنار هم با کاما جدا کنه و نمایش بده . از این منظر میگم که من محدودیت فضا برای محاسبه نتایج داده های تکراری دارم . به عبارتی یک جلسه با موضوع ثابت در تاریخ های متعدد برگزار شده و باید تاریخ های برگزاری جلسه فقط و فقط در ستون سوابق و سلول مقابل موضوع جلسه نمایش داده بشه
سلام و عرض ادب
برای تابع small ارور ref میده چون محدوده arrey من بیشتر از ۱۰۰۰ تا ردیف هست این ارور میده …. ممنون میشم راهنماییم کنید
سلام و عرض احترام
تابع small محدودیت تعداد سلول در آرگومان array ندارد و احتمالا مشکل دیگری در فرمول نویسی شما وجود دارد.
ممنون بابت آموزش خوبتون
فقط یه سوال آیا امکان این هست حل محدودیت تابع VLOOKUP در مقادیر جستجوی تکراری یه لیست کشویی درست کرد که یکیشو انتخاب کرد
عالی