ویژگی تصویر

تابع REDUCE در اکسل — معرفی و کاربردهای عملی

  /  اکسل   /  تابع REDUCE در اکسل
بنر تبلیغاتی الف

تابع REDUCE یکی از توابع جدید اکسل (Microsoft 365) است که امکان تجمیع (aggregate) یا کاهش یک مجموعه داده به یک مقدار نهایی را با استفاده از یک تابع LAMBDA دلخواه فراهم می‌کند. این تابع برای مسائلی که نیاز به محاسبه‌ای مرحله‌ای و وابسته به وضعیت قبلی دارند بسیار مناسب است؛ مواردی که توابع استاندارد مثل SUM یا PRODUCT به‌راحتی پوشش نمی‌دهند.

ساختار و پارامترها

پارامترتوضیح
initial_valueمقدار آغازین برای تجمع (مثلاً 0 یا “”)
arrayآرایه‌ای که می‌خواهیم روی آن کاهش اعمال شود
lambda(accumulator, current)تابع LAMBDA که دو ورودی می‌گیرد: accumulator (حالت تجمع فعلی) و current (مقدار جاری از آرایه)

سینتکس کلی:

=REDUCE(initial_value, array, LAMBDA(accumulator, current, ...expression...))

توجه داشته باشید که REDUCE همیشه یک مقدار خروجی نهایی برمی‌گرداند و اگر نیاز به خروجی مرحله‌ای (running totals) داشته باشید باید از SCAN استفاده کنید.

مثال‌های عملی

1) جمع شرطی ساده (مثال آموزشی)

=REDUCE(0, A1:A5, LAMBDA(acc, x, IF(x>0, acc + x, acc)))

در این فرمول مقدار آغازین 0 است. برای هر عنصر x در محدوده A1:A5، اگر x بزرگ‌تر از صفر باشد آن را به acc اضافه کن؛ در غیر این صورت acc را بدون تغییر برگردان. نتیجه مجموع مقادیر مثبت است. این روش با SUMIFS قابل انجام است، اما REDUCE اجازه منطق پیچیده‌تر بین مراحل را می‌دهد.

2) ساخت رشته با جداکننده (Concatenate با جداکننده دلخواه)

=REDUCE("", B2:B6, LAMBDA(acc, x, IF(acc="", x, acc & ", " & x)))

این فرمول مقادیر محدوده B2:B6 را به هم متصل کرده و با “, ” از هم جدا می‌کند. مقدار شروعی یک رشته خالی است. در هر مرحله اگر accumulator خالی باشد فقط مقدار جاری را قرار می‌دهد، در غیر این صورت یک جداکننده اضافه می‌شود.

3) محاسبه حاصل‌ضرب مقادیر غیرصفر با LET برای بهینه‌سازی

=LET(arr, C2:C10,
   REDUCE(1, arr, LAMBDA(acc, x, IF(x=0, acc, acc * x))))

در این نسخه از LET استفاده شده تا ارزیابی آرایه فقط یک‌بار انجام شود. فرمول حاصل‌ضرب همه مقادیر غیرصفر در محدوده C2:C10 را برمی‌گرداند. استفاده از LET می‌تواند عملکرد را بهبود بخشد و خوانایی فرمول را افزایش دهد.

4) ساخت یک ساختار JSON ساده از سطرها

=REDUCE("{""items"":[", D2:D6,
  LAMBDA(acc,x, IF(acc="", """" & x & """", acc & "," & """" & x & """"))
) & "]}"

مثال بالا فرض می‌کند D2:D6 مقادیر متنی دارد. REDUCE لیستی شبیه JSON می‌سازد: {“items”:[“a”,”b”,”c”]}. توجه داشته باشید که برای تولید JSON واقعی بهتر است موارد طولانی‌تر و escape کردن کاراکترها را هم در نظر بگیرید.

تفاوت REDUCE با SCAN و توابع استاندارد

  • REDUCE خروجی نهایی واحد برمی‌گرداند (یک مقدار که از آرایه حاصل شده).
  • SCAN مشابه REDUCE است اما خروجی آرایه‌ای از حالت تجمع در هر مرحله را برمی‌گرداند (running totals).
  • توابع ساده مثل SUM یا PRODUCT سریع‌تر و خواناترند برای عملیات استاندارد؛ REDUCE برای منطق سفارشی و حالت‌دار مناسب است.

نکات فنی و بهترین شیوه‌ها

  • REDUCE بخشی از مجموعه توابع تابع‌نویسی LAMBDA است و در Excel for Microsoft 365 و نسخه‌های وب مرتبط پشتیبانی می‌شود. در نسخه‌های قدیمی‌تر اکسل قابل استفاده نیست.
  • تابعی مانند REDUCE بازگشتی یا حلقه‌ای نیست؛ اما با LAMBDA می‌توانید منطق پیچیده‌ای را به‌صورت مرحله‌ای اجرا کنید.
  • به دلیل ارزیابی برای هر عنصر آرایه، معادلات پیچیده ممکن است روی داده‌های بسیار بزرگ کند شوند. استفاده از LET برای ذخیره میانی-محاسبات و کوچک کردن محدوده‌ها کمک می‌کند.
  • REDUCE قابلیت Short-circuit (قطع اجرای زودهنگام) ندارد؛ یعنی باید همه عناصر آرایه پردازش شوند مگر اینکه در LAMBDA به گونه‌ای شرطی کار کنید که خروجی نهایی ثابت بماند اما مجدداً محاسبات انجام می‌شود.

مثال بهینه‌سازی: جلوگیری از دسترسی‌های تکراری

=LET(
  arr, FILTER(E2:E1000, F2:F1000="Active"),
  REDUCE(0, arr, LAMBDA(acc,x, acc + VALUE(x)))
)

در این مثال ابتدا با FILTER فقط عناصر فعال انتخاب می‌شوند و در متغیر arr ذخیره می‌گردند. سپس REDUCE روی arr اجرا می‌شود. این ترکیب از اجرای غیرضروری روی کل محدوده جلوگیری می‌کند و کارایی را افزایش می‌دهد.

موارد کاربرد حرفه‌ای

  • پیاده‌سازی الگوریتم‌هایی که نیاز به حالت داخلی دارند؛ مثلاً تشخیص اولین یا آخرین شرط خاص، یا logic پیچیده ترتیب‌دار.
  • تبدیل ردیف‌ها به ساختارهای متنی سفارشی یا تولید رشته برای گزارش‌نویسی.
  • پیاده‌سازی الگوریتم‌های مالی مرحله‌ای که حالت قبلی را به حالت بعدی منتقل می‌کنند (مثلاً محاسبات قسط و مانده).

محدودیت‌ها و جایگزین‌ها

اگر اکسل شما از توابع LAMBDA و REDUCE پشتیبانی نمی‌کند باید از روش‌های جایگزین استفاده کنید: ستون‌های کمکی، توابع آرایه‌ای سنتی، SUMPRODUCT، یا کدنویسی VBA/Office Scripts برای پیاده‌سازی همان منطق. همچنین برای خروجی مرحله‌ای گزینه بهتر SCAN است.

خلاصه و جمع‌بندی

تابع REDUCE ابزار قدرتمندی است برای زمانی که می‌خواهید آرایه‌ای از داده را با حالتی که در طول پردازش تغییر می‌کند به یک مقدار نهایی تبدیل کنید. با ترکیب LAMBDA و LET می‌توانید محاسبات پیچیده و قابل خوانایی بنویسید که قبلاً فقط با VBA یا ستون‌های میانی ممکن بود. در عین حال باید به عملکرد و سازگاری نسخه‌ها توجه کنید و در صورت نیاز از SCAN یا روش‌های دیگر استفاده کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: