فصل ۴: جست‌وجو و آرایه‌های پویا — از VLOOKUP تا LAMBDA

VLOOKUP و دام‌هایش؛ INDEX/MATCH برای همه‌ی نسخه‌ها

پرکاربردترین تابع، پرخطاترین تابع

VLOOKUP یک مقدار را در ستون اول یک جدول پیدا می‌کند و مقدار ستون n ام همان سطر را برمی‌گرداند. میلیون‌ها فایل اداری با آن ساخته شده‌اند و باید آن را کامل بشناسید، حتی اگر در فایل‌های جدید XLOOKUP بنویسید.

=VLOOKUP(مقدار_جست‌وجو, جدول, شماره_ستون, [نوع_تطبیق])

قیمت کالای کد G2 از جدول کالا (A=کد، B=نام، C=واحد، D=قیمت):
=VLOOKUP(G2, $A$2:$D$500, 4, FALSE)

پنج دام VLOOKUP

دامنتیجهپیشگیری
آرگومان چهارم فراموش شودپیش‌فرض TRUE (تقریبی) است؛ روی داده‌ی نامرتب نتیجه‌ی غلط بدون خطاهمیشه FALSE یا 0 بنویسید
شماره‌ی ستون ثابت (4)درج یک ستون در جدول، ستون اشتباه برمی‌گرداندMATCH برای شماره‌ی ستون، یا Table
ستون کلید باید اول باشدجست‌وجو به سمت «چپ» ممکن نیستINDEX/MATCH یا XLOOKUP
نوع داده‌ی ناهمسانکد 1001 (عدد) با "1001" (متن) برابر نیست ← #N/Aیکدست‌سازی نوع، یا G2&"" و ‎--G2
سلول نتیجه خالی باشد0 برمی‌گرداند نه خالیVLOOKUP(…)&"" برای متن

INDEX/MATCH: جایگزین قابل‌اعتماد در همه‌ی نسخه‌ها

MATCH جای یک مقدار را در یک ستون پیدا می‌کند (شماره‌ی سطر) و INDEX از یک ستون دیگر، عنصر همان سطر را برمی‌گرداند. چون ستون جست‌وجو و ستون نتیجه جدا هستند، درج ستون چیزی را خراب نمی‌کند و جهت هم مهم نیست.

یک‌طرفه:
=INDEX($D$2:$D$500, MATCH(G2, $A$2:$A$500, 0))

جست‌وجوی دوطرفه (سطر = نماینده، ستون = ماه):
=INDEX($B$2:$M$50, MATCH(G2, $A$2:$A$50, 0), MATCH(H2, $B$1:$M$1, 0))

چند شرط (در 2016/2019 با Ctrl+Shift+Enter وارد شود):
=INDEX(E2:E500, MATCH(1, (A2:A500=G2)*(C2:C500=H2), 0))

VLOOKUP با شماره‌ی ستون پویا:
=VLOOKUP(G2, $A$1:$M$50, MATCH(H2, $A$1:$M$1, 0), FALSE)

تطبیق تقریبی؛ وقتی درست به کار رود

حالت تقریبی برای جدول‌های پلکانی است: نرخ پورسانت، ضریب تخفیف یا مالیات پلکانی. جدول باید بر اساس ستون اول صعودی مرتب باشد؛ آن‌گاه تابع بزرگ‌ترین مقداری را که از مقدار جست‌وجو کوچک‌تر یا برابر است پیدا می‌کند. =VLOOKUP(C2, $K$2:$L$5, 2, TRUE) با جدولی شامل 0، 2E9 و 5E9 در ستون K و نرخ‌ها در ستون L، همان پورسانت پلکانی درس ۱۱ است بدون IF.

نکته‌هایی که کمتر کسی می‌داند

  • VLOOKUP و MATCH در حالت دقیق wildcard می‌پذیرند: VLOOKUP("*ماهی*", …) اولین طرحی را که «ماهی» دارد پیدا می‌کند؛ اگر مقدار شما خودش * یا ? دارد، باید با ~ خنثی شود.
  • جست‌وجوی تقریبی روی داده‌ی مرتب با الگوریتم دودویی انجام می‌شود و روی صدها هزار سطر هزاران برابر سریع‌تر از حالت دقیق است. ترفند حرفه‌ای‌ها: یک VLOOKUP تقریبی برای گرفتن مقدار، و یک IF که بررسی کند کلید پیداشده واقعاً برابر است.
  • MATCH با آرگومان سوم 0 اولین تطابق را برمی‌گرداند؛ برای یافتن آخرین تطابق در نسخه‌های قدیمی از LOOKUP(2, 1/(A2:A500=G2), D2:D500) استفاده کنید — یک ترفند قدیمی که بدون Ctrl+Shift+Enter کار می‌کند.
  • اگر VLOOKUP با جدولی در فایل دیگر کار می‌کند و آن فایل بسته باشد، فقط مقادیر ذخیره‌شده‌ی آخرین بار را می‌بیند؛ INDIRECT در همین حالت اصلاً کار نمی‌کند و #REF! می‌دهد.
  • برای جست‌وجوی حساس به حروف بزرگ و کوچک (کدهای لاتین مثل ab12 و AB12) از MATCH(TRUE, EXACT(A2:A500, G2), 0) استفاده کنید.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.