معرفی تابع TAKE
تابع TAKE یکی از توابع جدید اکسل (در خانواده Dynamic Array) است که به شما اجازه میدهد تعدادی سطر یا ستون مشخص را از یک محدوده/آرایه بردارید. یعنی بهجای اینکه با روشهای دستی (مثل کپی، فیلتر، یا انتخاب محدوده ثابت) بخش کوچکی از داده را جدا کنید، با یک فرمول ساده همیشه «اولینها» یا «آخرینها» را بهصورت پویا استخراج میکنید.
مزیت مهم TAKE این است که وقتی دادهها تغییر کنند (سطر اضافه/کم شود)، خروجی TAKE هم خودکار آپدیت میشود.
مثال ساده: فرض کنید لیست ۲۰ ردیفی از فروش دارید و میخواهید فقط ۵ ردیف اول نمایش داده شود.
=TAKE(A2:C21;5)
این فرمول ۵ سطر اول از محدوده A2:C21 را برمیگرداند (همه ستونهای داخل محدوده هم همراه آن میآید).
کاربردهای اصلی تابع TAKE
- برداشتن N سطر اول یا N سطر آخر از یک جدول
- برداشتن N ستون اول یا N ستون آخر از یک دیتاست
- ساخت گزارشهای خلاصه مثل «آخرین ۱۰ تراکنش» یا «۵ محصول پرفروش»
- آمادهسازی داده برای نمودار (مثلاً فقط ۱۲ ماه اخیر)
- ترکیب با توابعی مثل SORT و FILTER برای ساخت خروجیهای پویا
- استخراج بخش مشخصی از خروجی XLOOKUP یا FILTER برای نمایش در داشبورد
ساختار (Syntax)
فرم انگلیسی:
=TAKE(array, [rows], [columns])
فرم فارسی (با جداکننده ; ):
=TAKE(آرایه; [تعداد_سطر]; [تعداد_ستون])
آرگومانها
array (آرایه) / محدوده داده
محدودهای که میخواهید از آن سطر/ستون بردارید. میتواند یک محدوده مثل A2:D100 یا خروجی یک تابع دیگر مثل FILTER/SORT باشد.
rows (سطرها) / تعداد سطر قابل برداشت
اختیاری است. تعداد سطرهایی که میخواهید بردارید:
- اگر عدد مثبت بدهید: از بالا به تعداد مشخص سطر برمیدارد.
- اگر عدد منفی بدهید: از پایین (آخر داده) به تعداد مشخص سطر برمیدارد.
- اگر این آرگومان را ندهید، اکسل بهصورت پیشفرض همه سطرها را در نظر میگیرد (و شما معمولاً با columns محدودش میکنید).
columns (ستونها) / تعداد ستون قابل برداشت
اختیاری است. تعداد ستونهایی که میخواهید بردارید:
- اگر عدد مثبت بدهید: از چپ به تعداد مشخص ستون برمیدارد.
- اگر عدد منفی بدهید: از راست (آخر ستونها) به تعداد مشخص ستون برمیدارد.
- اگر این آرگومان را ندهید، اکسل همه ستونها را در نظر میگیرد (و شما معمولاً با rows محدودش میکنید).
مثالهای ساده و پایه
مثال ۱: برداشتن ۳ سطر اول از یک جدول
فرض کنید دادهها در محدوده A2:D20 هستند و میخواهید فقط ۳ ردیف اول نمایش داده شود.
=TAKE(A2:D20;3)
خروجی: سطرهای ۱ تا ۳ از این محدوده (یعنی A2:D4).
مثال ۲: برداشتن ۵ سطر آخر (آخرین رکوردها)
برای نمایش آخرین ۵ ردیف از جدول:
=TAKE(A2:D20;-5)
خروجی: ۵ سطر انتهایی محدوده (برای گزارشهای «آخرین تراکنشها» عالی است).
مثال ۳: برداشتن ۲ ستون اول
اگر فقط دو ستون اول جدول برایتان مهم است:
=TAKE(A2:D20;;2)
نکته: چون rows را نمیخواهید، جای آن را خالی گذاشتهاید و فقط columns را مشخص کردهاید.
مثال ۴: برداشتن ۱ ستون آخر (ستون سمت راست)
=TAKE(A2:D20;;-1)
خروجی: فقط آخرین ستون از محدوده (مثلاً ستون D).
مثالهای کاربردی و واقعی
مثال ۱: جمع فروش ۱۰ ردیف آخر با SUM
فرض کنید مبلغ فروش در ستون C است و دادهها از C2 تا C200 قرار دارد. میخواهید جمع ۱۰ فروش آخر را حساب کنید:
=SUM(TAKE(C2:C200;-10))
نتیجه: مجموع ۱۰ مقدار آخر ستون فروش.
مثال ۲: آخرین ۱۲ ماه (برای نمودار) با TAKE و SORT
فرض کنید تاریخها در ستون A و مقدار فروش در ستون B است. اگر دادهها را بر اساس تاریخ مرتب کردهاید یا میخواهید مطمئن شوید مرتب است، میتوانید اول SORT کنید و بعد ۱۲ ردیف آخر را بردارید:
=TAKE(SORT(A2:B200;1;1);-12)
نتیجه: ۱۲ ردیف آخر پس از مرتبسازی صعودی تاریخ (مناسب نمودار ۱۲ ماه اخیر).
مثال ۳: بررسی شرط روی «آخرین رکورد» با AND/OR
فرض کنید ستون B وضعیت پرداخت است (مثلاً “Paid” یا “Unpaid”) و ستون C مبلغ است. میخواهید بررسی کنید آیا آخرین رکورد هم Paid است و هم مبلغش بیشتر از 100000 است:
=AND(TAKE(B2:B200;-1)="Paid";TAKE(C2:C200;-1)>100000)
نتیجه: TRUE یا FALSE بر اساس آخرین ردیف داده.
مثال ۴: شمارش رخداد در ۲۰ ردیف آخر با COUNTIF
میخواهید ببینید در ۲۰ تراکنش آخر چند بار کلمه “Error” در ستون D آمده است:
=COUNTIF(TAKE(D2:D500;-20);"Error")
نتیجه: تعداد خطاها در ۲۰ ردیف آخر.
مثال ۵: استخراج آخرین قیمت یک محصول بعد از XLOOKUP (سناریوی واقعی)
فرض کنید جدول شما شامل ستون A=کد محصول، ستون B=تاریخ، ستون C=قیمت است. میخواهید آخرین قیمت ثبتشده یک کد محصول را پیدا کنید. یک روش رایج: ابتدا ردیفهای همان محصول را FILTER کنید، سپس بر اساس تاریخ SORT کنید و بعد TAKE آخرین ردیف را بردارید.
=TAKE(SORT(FILTER(A2:C500;A2:A500=E2);2;1);-1)
اگر بخواهید فقط «قیمت» (ستون سوم از خروجی) را بگیرید:
=TAKE(TAKE(SORT(FILTER(A2:C500;A2:A500=E2);2;1);-1);; -1)
نتیجه: آخرین قیمت محصولی که کد آن در سلول E2 است.
ترکیب تابع TAKE با فرمولهای دیگر
- TAKE + SUM برای جمع چند ردیف/ستون اول یا آخر
=SUM(TAKE(C2:C200;10))
- TAKE + AVERAGE برای میانگین آخرین N مقدار
=AVERAGE(TAKE(C2:C200;-30))
- TAKE + SORT برای «N مورد اول/آخر» بعد از مرتبسازی
=TAKE(SORT(A2:D200;4;-1);10)
- TAKE + FILTER برای خروجی محدود شده (مثلاً ۵ مورد اول از نتایج فیلتر)
=TAKE(FILTER(A2:D200;D2:D200="تهران");5)
- TAKE + COUNTIF برای شمارش در «بازه اخیر»
=COUNTIF(TAKE(B2:B1000;-50);"OK")
خطاهای رایج و روش رفع آنها
1) خطای #VALUE!
اگر آرگومان rows یا columns مقدار نامعتبر داشته باشد (مثلاً متن بهجای عدد) ممکن است #VALUE! بگیرید. مطمئن شوید rows و columns عدد هستند یا از سلولی میآیند که عدد دارد.
2) خطای #CALC!
گاهی وقتی TAKE روی خروجی توابع پویا استفاده میشود و نتیجه نهایی قابل محاسبه نباشد (مثلاً FILTER هیچ نتیجهای ندهد و ادامه فرمول به مشکل بخورد) ممکن است #CALC! ببینید. راهحل: خروجی میانی را بررسی کنید و در صورت نیاز از IFERROR استفاده کنید.
=IFERROR(TAKE(FILTER(A2:D200;D2:D200="شیراز");5);"یافت نشد")
3) خطای #SPILL!
چون TAKE خروجی «ریزشی» (Spill) میدهد، اگر فضای کافی در سلولهای اطراف برای نمایش نتیجه نباشد خطای #SPILL! میگیرید. سلولهای جلوی خروجی را خالی کنید یا فرمول را به جایی منتقل کنید که فضای کافی دارد.
4) نتیجه اشتباه به خاطر انتخاب محدوده نادرست
اگر محدوده array را کم یا زیاد انتخاب کنید، TAKE هم همان را برمیدارد و ممکن است فکر کنید تابع اشتباه کار میکند. راهحل: محدوده را دقیق انتخاب کنید یا از Table (لیستهای اکسل) استفاده کنید تا محدوده خودکار بزرگ شود.
نکات حرفهای و ترفندهای مهم
- برای گزارشهای «آخرین رکوردها»، از rows منفی استفاده کنید (مثلاً -10) تا از انتهای داده بردارد.
- برای خروجیهای مدیریتی، TAKE را بعد از SORT یا FILTER قرار دهید تا «اول/آخر» بر اساس منطق شما باشد، نه صرفاً ترتیب خام داده.
- اگر دادههای شما دائم بزرگ میشود، بهتر است داده را به Table تبدیل کنید و بهجای A2:D200 از ساختار جدولی استفاده کنید تا محدوده پویا باشد.
- برای خوانایی بهتر، فرمولهای چندمرحلهای را با LET ساده کنید (بهخصوص وقتی SORT و FILTER و TAKE را با هم دارید).
=LET(x;SORT(A2:B200;1;1);TAKE(x;-12))
تفاوت تابع TAKE با توابع مشابه
- TAKE vs INDEX: تابع INDEX معمولاً یک سلول/سطر/ستون مشخص را برمیگرداند، اما TAKE یک «بخش» از آرایه را (چند سطر/چند ستون) بهصورت Spill برمیگرداند.
- TAKE vs FILTER: FILTER بر اساس شرط ردیفها را جدا میکند؛ TAKE بر اساس «تعداد» از ابتدا/انتها جدا میکند. اغلب بهترین نتیجه ترکیب FILTER و TAKE است.
- TAKE vs LEFT/RIGHT/MID: آنها برای متن هستند، TAKE برای آرایه/جدول.
- TAKE vs OFFSET: OFFSET قدیمیتر و ناپایدارتر (volatile) است و میتواند فایل را سنگین کند؛ TAKE مدرنتر و مناسب Dynamic Array است.
سازگاری با نسخههای مختلف اکسل
تابع TAKE جزو توابع جدید Dynamic Array است و در Microsoft 365 و نسخههای جدیدی که این توابع را دریافت کردهاند قابل استفاده است. در اکسلهای قدیمیتر (مثل 2016 و 2019 معمولی) معمولاً در دسترس نیست.
- اگر فایل را برای کاربران نسخههای قدیمی میسازید، باید جایگزینهایی مثل ترکیب INDEX و SEQUENCE یا روشهای قدیمیتر را در نظر بگیرید.
- اگر TAKE را در فایل استفاده کنید و آن را در نسخه ناسازگار باز کنند، احتمالاً فرمول شناخته نمیشود.
سؤالات پرتکرار درباره تابع TAKE
TAKE دقیقاً چه کاری میکند؟
تعدادی سطر/ستون مشخص را از یک آرایه یا محدوده برمیدارد (از ابتدا یا انتها).
چطور «آخرین ۱ ردیف» را بگیرم؟
=TAKE(A2:D200;-1)
چطور فقط ۳ ستون آخر را بردارم؟
=TAKE(A2:H50;;-3)
آیا TAKE میتواند روی خروجی FILTER هم کار کند؟
بله، یکی از بهترین کاربردهای TAKE همین است که بعد از FILTER فقط چند نتیجه اول/آخر را نمایش دهید.
جمعبندی و پیشنهاد یادگیری بعدی
تابع TAKE یک راه سریع و حرفهای برای استخراج «چند سطر/ستون اول یا آخر» از دادههاست و برای گزارشگیری، داشبورد، نمودار و تحلیلهای پویا بسیار کاربردی است. با ترکیب TAKE با SORT و FILTER میتوانید خروجیهای دقیق و کاملاً خودکار بسازید.
برای یادگیری بعدی، پیشنهاد میکنم این توابع را هم دنبال کنید چون مکمل TAKE هستند: DROP (حذف N سطر/ستون از ابتدا/انتها)، FILTER، SORT، LET و CHOOSECOLS/CHOOSEROWS.
