文章目录
- 可以这样写公式: =COLUMN(A:D) COLUMN(A:D) 返回列号数组 {1,2,3,4}(A列=1, D列=4) 继续完善公式: =COLUMN(A:D)*50 乘以50后得到:{50,100,150,200}。这代表可能的累积装箱点(每50个一箱),最多4箱(200个),覆盖了最大数量117的需求。
- 我们继续完善公式: =DDB(COLUMN(A:D)*50,B2:B5,1,1) 这里使用了DDB折旧函数,但被巧妙转化为了装箱计算。计算每个型号在每箱的“剩余量”。 DDB参数解析: cost: {50,100,150,200}(每个可能箱子的累积值) salvage: B2:B5,即 {39;72;117;21}(每个型号的总数量) life: 1(表示资产寿命只有1期) period: 1(计算第1期的折旧) factor: 省略(默认为2) DDB函数在life=1时的运算原理: 当life=1时,DDB直接返回 cost – salvage(如果cost > salvage),否则返回0(因为折旧不能为负)。 实际计算过程举例: 型号A(salvage=39): cost=50:DDB=50-39=11 cost=100:DDB=100-39=61 型号B(salvage=72): cost=50:50<72,DDB=0 cost=100:100-72=28 继续完善公式: =50-DDB(COLUMN(A:D)*50,B2:B5,1,1) 这部分计算每个箱子的实际数量。 运算过程举例: 型号A,cost=50:50 – 11 = 39(第一个箱子数量) 型号A,cost=100:50 – 61 = -11(无效,后续会处理) 型号B,cost=50:50 – 0 = 50(第一个满箱) 型号B,cost=100:50 – 28 = 22(第二个箱子剩余) 继续完善公式: =0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1) 用文本连接符 & 处理: 例如:50-DDB=39→0&39="039"(文本) 负数如:-11→0&-11="0-11"(文本,后续会转换为错误值) 继续完善公式: =–(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)) –:作用是将文本转为数字 "039"→39(有效) "0-11"→错误值(#VALUE!,因为不是合法数字) 目的: 确保数字以三位形式出现(如39→039),但实际转换后仍是数字39。负数产生的错误将会在后续步骤中被过滤。
- 我们输入公式: =""&A2:A5&";;"&–(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)) 构建型号字符串:""&A2:A5&";;" ""表示双引号字符,Excel中转义写法。 例如型号A:""&"A"&";;" → "A;;"(字符串内容为双引号+A+两个分号)。 与数量连接:"A;;" & 39 → "A;;39"(表示型号A和数量39的组合)。 分隔符 ;; 用于后续TEXT函数拆分数据。
- 我们外面嵌套TOCOL函数: =TOCOL(""&A2:A5&";;"&–(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)),3) 使用TOCOL转换和过滤,TOCOL将数组矩阵转为单列,忽略无效项。将上述生成的4行×4列矩阵转换为单列,并忽略空值和错误(第2参数设置为3)。 转换过程: 有效值(如A;;39、B;;50)保留。 错误值(如负数转换结果)被跳过。 结果按行扫描:先处理型号A所有箱子,再B、C、D。
- 最外面嵌套TEXT函数: =TEXT({1,0},TOCOL(""&A2:A5&";;"&–(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)),3)) 用 TEXT 分割型号和数量,TEXT按分隔符;;分割为两列。 {1,0}表示提取第1部分(型号)和第0部分(数量)。 比如 "A;;39": {1}提取 ;; 前的部分 → "A" {0}提取 ;; 后的部分 → "39" 最终输出两列:D列为型号,E列为数量。 TEXT({1,0}, …) 固定结构: 不是真正的文本格式化函数,而是被用来按分隔符拆分字符串的巧妙技巧。就像用剪刀沿着缝线剪开布料,;; 是缝线,{1,0} 是指挥剪刀裁剪的位置指令。 推荐阅读:lookup加座啥意思? wps中lookup+sumifs搞定有合并单元格的多条件求和
粉丝求助SOS:如何实现动态[装箱]计算?将不同型号的产品按50个一箱进行分装。

微软Office LTSC 2021专业增强版 简体中文批量许可版 2024年09月更新
- 类型:办公软件
- 大小:2.2GB
- 语言:简体中文
- 时间:2024-09-12
查看详情

WPS Office 2025 V12.1.0.21915 官方最新正式版
- 类型:办公软件
- 大小:260MB
- 语言:简体中文
- 时间:2025-07-03
查看详情
如下图所示:
- A列是型号:A、B、C、D
- B列是数量:39、72、117、21
装箱要求是:
每个型号50个装一箱,不能混装。多出50个的部分需要装在下一箱中,以此类推。最终结果显示在在D1:E8区域。
下面显示了每个箱子的明细:
- A型号:1箱39个
- B型号:1箱50个和1箱22个
- C型号:2箱各50个和1箱17个
- D型号:1箱21个

这个问题差点让我崩溃:ddb+text函数组合,双剑合璧,实现动态[装箱]计算。
可以这样写公式:
=COLUMN(A:D)
COLUMN(A:D) 返回列号数组 {1,2,3,4}(A列=1, D列=4)

继续完善公式:
=COLUMN(A:D)*50
乘以50后得到:{50,100,150,200}。这代表可能的累积装箱点(每50个一箱),最多4箱(200个),覆盖了最大数量117的需求。

我们继续完善公式:
=DDB(COLUMN(A:D)*50,B2:B5,1,1)
这里使用了DDB折旧函数,但被巧妙转化为了装箱计算。计算每个型号在每箱的“剩余量”。
DDB参数解析:
- cost: {50,100,150,200}(每个可能箱子的累积值)
- salvage: B2:B5,即 {39;72;117;21}(每个型号的总数量)
- life: 1(表示资产寿命只有1期)
- period: 1(计算第1期的折旧)
- factor: 省略(默认为2)
DDB函数在life=1时的运算原理:
当life=1时,DDB直接返回 cost – salvage(如果cost > salvage),否则返回0(因为折旧不能为负)。
实际计算过程举例:
型号A(salvage=39):
- cost=50:DDB=50-39=11
- cost=100:DDB=100-39=61
型号B(salvage=72):
- cost=50:50<72,DDB=0
- cost=100:100-72=28

继续完善公式:
=50-DDB(COLUMN(A:D)*50,B2:B5,1,1)
这部分计算每个箱子的实际数量。
运算过程举例:
- 型号A,cost=50:50 – 11 = 39(第一个箱子数量)
- 型号A,cost=100:50 – 61 = -11(无效,后续会处理)
- 型号B,cost=50:50 – 0 = 50(第一个满箱)
- 型号B,cost=100:50 – 28 = 22(第二个箱子剩余)

继续完善公式:
=0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)
用文本连接符 & 处理:
例如:50-DDB=39→0&39="039"(文本)
负数如:-11→0&-11="0-11"(文本,后续会转换为错误值)

继续完善公式:
=--(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1))
- –:作用是将文本转为数字
- "039"→39(有效)
- "0-11"→错误值(#VALUE!,因为不是合法数字)
目的:
确保数字以三位形式出现(如39→039),但实际转换后仍是数字39。负数产生的错误将会在后续步骤中被过滤。

我们输入公式:
=""&A2:A5&";;"&--(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1))
- 构建型号字符串:""&A2:A5&";;"
""表示双引号字符,Excel中转义写法。
- 例如型号A:""&"A"&";;" → "A;;"(字符串内容为双引号+A+两个分号)。
- 与数量连接:"A;;" & 39 → "A;;39"(表示型号A和数量39的组合)。
分隔符 ;; 用于后续TEXT函数拆分数据。

我们外面嵌套TOCOL函数:
=TOCOL(""&A2:A5&";;"&--(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)),3)
使用TOCOL转换和过滤,TOCOL将数组矩阵转为单列,忽略无效项。将上述生成的4行×4列矩阵转换为单列,并忽略空值和错误(第2参数设置为3)。
转换过程:
- 有效值(如A;;39、B;;50)保留。
- 错误值(如负数转换结果)被跳过。
结果按行扫描:先处理型号A所有箱子,再B、C、D。

最外面嵌套TEXT函数:
=TEXT({1,0},TOCOL(""&A2:A5&";;"&--(0&50-DDB(COLUMN(A:D)*50,B2:B5,1,1)),3))
用 TEXT 分割型号和数量,TEXT按分隔符;;分割为两列。
{1,0}表示提取第1部分(型号)和第0部分(数量)。
比如 "A;;39":
- {1}提取 ;; 前的部分 → "A"
- {0}提取 ;; 后的部分 → "39"
最终输出两列:D列为型号,E列为数量。

TEXT({1,0}, …) 固定结构:
不是真正的文本格式化函数,而是被用来按分隔符拆分字符串的巧妙技巧。就像用剪刀沿着缝线剪开布料,;; 是缝线,{1,0} 是指挥剪刀裁剪的位置指令。
推荐阅读:lookup加座啥意思? wps中lookup+sumifs搞定有合并单元格的多条件求和