📊 Excel公式详解:动态任务分配系统

📋 数据概览

📊 Excel公式详解:动态任务分配系统

订单数据(A1:C7)

订单号零件数量
PO-1C2
PO-2C3
PO-3A5
PO-4C7
PO-5A2
PO-6A4

任务数据(E1:G4)

任务号零件数量
WK-001C3
WK-002C25
WK-003A20

🔧 公式结构图

📊 Excel公式详解:动态任务分配系统
  1. flowchart TD
  2. A[开始] –> B[REDUCE函数迭代]
  3. B –> C[遍历订单B2:B7]
  4. C –> D[LET函数处理每个零件]
  5. D –> E[定义变量]
  6. E –> F[“Y: 当前零件”]
  7. E –> G[“G: 任务数量G2:G4”]
  8. E –> H[“D: 累计已分配量”]
  9. E –> I[“T: 当前订单数量”]
  10. H –> J[“SUMIF计算历史用量”]
  11. I –> K[“OFFSET获取订单数量”]
  12. D –> L[核心分配逻辑]
  13. L –> M[“FILTER筛选匹配任务”]
  14. M –> N[“IF重复任务号”]
  15. N –> O[“TOCOL转换为一维数组”]
  16. O –> P[“DROP跳过已分配部分”]
  17. P –> Q[“TAKE取当前需求数量”]
  18. Q –> R[UNIQUE去重<br>实际未使用]
  19. R –> S[返回分配结果]
  20. S –> T[VSTACK堆叠结果]
  21. T –> U{是否遍历完成?}
  22. U — 否 –> C
  23. U — 是 –> V[DROP删除首行空值]
  24. V –> W[🎯 最终分配结果]

🧩 公式逐层解析

1. 外层框架:DROP(REDUCE(...), 1)

excel

=DROP(

REDUCE(“”, B2:B7, LAMBDA(X, Y, …)),

1

)

函数作用说明
REDUCE迭代累加器遍历B2:B7每个零件,累积结果
LAMBDA自定义函数定义每次迭代的处理逻辑
VSTACK垂直堆叠将每次结果堆叠起来
DROP删除行删除第一行空字符串占位符

2. LET函数变量定义

excel

LET(

Y, Y, # 📍 当前处理的零件

G, G2:G4, # 🔢 任务数量数组 [3, 25, 20]

D, SUMIF(OFFSET(Y,-1,):B1, Y, C1), # 📊 历史累计分配量

T, OFFSET(Y,,1), # 🎯 当前订单需求数量

F, TAKE(DROP(TOCOL(FILTER(…)), D), T), # 🎪 核心分配逻辑

U, UNIQUE(F), # 🔄 去重(实际未使用)

F # 📤 返回分配结果

)

🔍 核心分配逻辑详解

3. 任务号展开机制

excel

IF(G >= SEQUENCE(,SUM(G)), E2:E4, \)

示例转换过程:

步骤说明结果示例
原始任务WK-001(3), WK-002(25), WK-003(20)3个独立任务
数量展开按数量重复任务号WK-001×3, WK-002×25, WK-003×20
一维数组转换为单列48行的任务列表

展开结果矩阵:

text

列1 列2 列3 … 列48

WK-001 WK-001 WK-001 … 空

WK-002 WK-002 WK-002 … WK-002

WK-003 WK-003 WK-003 … WK-003

4. 零件筛选与分配

excel

FILTER(展开数组, F2:F4=Y)

按零件筛选:

  • 零件C:筛选出WK-001和WK-002
  • 零件A:筛选出WK-003

5. 分配流程示例

📦 处理订单 PO-1 (C, 2)

步骤计算结果
历史累计DSUMIF(空范围, “C”, C列) = 00
任务池所有C零件任务展开[WK-001, WK-001, WK-001, WK-002×25,…]
跳过D行DROP(任务池, 0)不跳过
取T个TAKE(…, 2)[WK-001, WK-001]

📦 处理订单 PO-2 (C, 3)

步骤计算结果
历史累计D前面C零件共2+0=22
跳过D行从第3个开始[WK-001, WK-002, WK-002,…]
取T个取3个[WK-001, WK-002, WK-002]

📊 完整分配过程

任务池初始化

text

C零件池: [WK-001, WK-001, WK-001, WK-002×25]

A零件池: [WK-003×20]

分配过程记录表

订单零件需求累计D分配结果剩余池
PO-1C20WK-001×2C池: [WK-001, WK-002×25]
PO-2C32WK-001, WK-002×2C池: [WK-002×23]
PO-3A50WK-003×5A池: [WK-003×15]
PO-4C75WK-002×7C池: [WK-002×16]
PO-5A25WK-003×2A池: [WK-003×13]
PO-6A47WK-003×4A池: [WK-003×9]

🎯 最终输出结果

text

WK-001 ← PO-1分配

WK-001 ← PO-1分配

WK-001 ← PO-2分配

WK-002 ← PO-2分配

WK-002 ← PO-2分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-003 ← PO-3分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-002 ← PO-4分配

WK-003 ← PO-5分配

WK-003 ← PO-5分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

WK-003 ← PO-6分配

公式优化建议

  1. 性能优化:在大数据量时,每次迭代重新生成任务池效率较低
  2. 错误处理:添加IFERROR处理任务不足的情况
  3. 去重优化UNIQUE(F)变量未使用,可移除
  4. 范围引用:使用结构化引用提高可读性

💡 应用场景

此公式适用于:

  • 🏭 生产任务分配系统
  • 📦 库存先进先出(FIFO)管理
  • 🚚 物流配送路线分配
  • 📊 资源调度与优化

这是一个典型的按需分配、先到先得的动态分配系统,巧妙运用了Excel 365的新函数功能。

相关新闻

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

立即咨询 企业版试用 上门服务

请您留言

感谢您的关注,你可留下联系方式,我们将第一时间与您联系。