Hi,我是偏爱函数公式,爱用 Excel 图表管理仓库的大叔 Mr 赵~在日常工作中,我们经常会碰到按指定的条件重复数据的问题,比如按指定数量重复标签的个数,根据箱规拆分数量等等。今天,我们就来看看在 Office365 中,它的各种神奇做法。本文重在扩展思路,大家跟着我的步伐,往下看看吧。如下图,按 C3 单元格的打印份数重复 B3 单元格的标签名称,效果如 E 列:对于单个标签,我们可以使用 Row 函数下拉扩展,从而进行判断。=IF(ROW(A1)<=$C$3,$B$3,'') 如果你是 Office365 版本,扩展只需要一个 EXPAND 函数。EXPAND 函数的作用,是将原来的区域按指定的行数和列数进行扩充。=EXPAND(区域,扩充的总行数,扩充的总列数,原区域以外显示的值) 第 2 参数获取 C3 单元格的数值,表示扩充的总行数,是 6 行,第 4 参数,获取 B3 单元格的文本,用'A'填充原区域以外的位置,从而达到重复的效果。 如果想为这组结果添加标题,可以用 VSTACK 函数拼接,这个函数的作用是把各个参数纵向堆叠在一起。=VSTACK(参数 1,参数 2,参数 3……)=VSTACK(B2,EXPAND(B3,C3,,B3)) 上面使用的新函数,Expand 函数和 Vstack 函数,目前 WPS 还没更新。不过,使用 WPS 的小伙伴(更新到新版本),可以用 SEQUENCE 函数,同样能达到填充的目的:PS : 由于 WPS 目前还没有更新动态数组,所以使用 WPS 还需要使用数组三键哦~ ,Excel2021 及以上版本直接回车就行。首先用 SEQUENCE 函数根据 C3 单元格的数值生成一组数字序列。=SEQUENCE(行数,[列数],[开始数],[增量])=SEQUENCE(C3) =SEQUENCE(6) 也就是该函数公式生成为 6 行 1 列,开始值为 1,增值为 1 的序列。然后以这组序列作为 IF 函数的判断条件,返回 B3 单元格的内容。PS : 非 0 的值都为真(true),所以 if 函数判断的时候,SEQUENCE 函数生成的序列都为 true。但是在实际操作指定重复次数的时候,不会只对单个标签进行重复,一般是多个标签一起。如下图,根据 C 列的打印份数,重复 B 列多个标签名称,效果如 E 列:从上图 E 列的效果可以看出,我们需要用 VSTACK 函数对每个标签名称依次循环拼接。=REDUCE(初始值,遍历的数组,LAMBDA(x,y,计算表达式))第 3 个参数是 LAMBDA 函数运算的表达式,它有两个参数,x 指向初始累加值,y 指向第 2 参数即被遍历的区域。 =REDUCE(B2,B3:B5,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,,1),,y)))) 第 2 个参数为 B3:B5 单元格区域,需要遍历的数据;第 3 个参数是一个 LAMBDA 函数,它有两个变量 x 和 y,用来计算表达式:=VSTACK(x,EXPAND(y,OFFSET(y,,1),,y)))) x 作为累加值,指向 REDUCE 的第 1 参数为 B2,也就是「标签名称」。y 指向 REDUCE 的第 2 参数 B3:B5 区域。LAMBDA 遍历 B3:B5 每一个单元格,第 1 次运行表达式:=VSTACK(B2,EXPAND(B3,OFFSET(B3,,1),,B3)))) 然后将上面的结果 E2:E5 作为 LAMBDA 新的第 1 参数,B4 为第 2 参数,继续第 2 次执行 LAMDA 表达式:=VSTACK(E2:E5,EXPAND(B4,OFFSET(B4,,1),,B4)) 依次类推,直至遍历完 B3:B5 的所有单元格,将 LAMBDA 第 1 参数不断拼接,结果如下图 I 列:REDUCE 函数虽然是一个比较难的函数,但是,由于有了它的存在,给我们提供了更加灵活的处理方案。今天我们通过指定的次数重复数据的案例,切实感受到了 365 版新函数的神奇用法!重在扩展大家思路~本文,我们主要涉及了三个比较常用的新函数。(目前它们还没在 WPS 中出现。)❶ EXPAND 函数可以按指定的行数和列数自动扩充区域;❷ VSTACK 函数将对多个区域自由垂直拼接,比如添加标题;❸ REDUCE 函数通过遍历,循环调用 LAMBDA 函数表达式生成最终结果,比如对多个数据标签完成数量的复制。Excel 里的函数有 400 多个,但我们常用的其实只有几十个。如果本篇文章对你有帮助或有所启发,欢迎「点赞」、「评论」和「转发」哦,你们的支持是我分享的动力~
|