分享

扒出一个Excel神技巧:按指定的条件重复数据!

 互利互读一辈子 2023-07-29 发布于北京

本文作者:赵骄阳
本文编辑:竺兰


Hi,我是偏爱函数公式,爱用 Excel 图表管理仓库的大叔 Mr 赵~

在日常工作中,我们经常会碰到按指定的条件重复数据的问题,比如按指定数量重复标签的个数,根据箱规拆分数量等等。

昨天的文章,我们介绍过它的传统函数做法:别再 Ctrl V!我用函数 1 分钟帮你干完 1 小时的工作!

今天,我们就来看看在 Office365 中,它的各种神奇做法。本文重在扩展思路,大家跟着我的步伐,往下看看吧。

图片
图片
重复单个标签


如下图,按 C3 单元格的打印份数重复 B3 单元格的标签名称,效果如 E 列:

图片

对于单个标签,我们可以使用 Row 函数下拉扩展,从而进行判断。
=IF(ROW(A1)<=$C$3,$B$3,'')

图片

如果你是 Office365 版本,扩展只需要一个 EXPAND 函数。

EXPAND 函数的作用,是将原来的区域按指定的行数和列数进行扩充。

它有 4 个参数:
=EXPAND(区域,扩充的总行数,扩充的总列数,原区域以外显示的值) 

在 E3 单元格输入公式:
=EXPAND(B3,C3,,B3)

图片

公式解析:

第 1 参数是 B3 单元格,表示待扩充的区域;

第 2 参数获取 C3 单元格的数值,表示扩充的总行数,是 6 行,

第 3 参数,省略未写,默认扩充为 1 列;

第 4 参数,获取 B3 单元格的文本,用'A'填充原区域以外的位置,从而达到重复的效果。

如果想为这组结果添加标题,可以用 VSTACK 函数拼接,这个函数的作用是把各个参数纵向堆叠在一起。

VSTACK 函数语法为:
=VSTACK(参数 1,参数 2,参数 3……)

在 E2 单元格写入公式:
=VSTACK(B2,EXPAND(B3,C3,,B3))

图片
图片
SEQUENCE


上面使用的新函数,Expand 函数和 Vstack 函数,目前 WPS 还没更新。

不过,使用 WPS 的小伙伴更新到新版本,可以用 SEQUENCE 函数,同样能达到填充的目的:

PS : 由于 WPS 目前还没有更新动态数组,所以使用 WPS 还需要使用数组三键哦~ ,Excel2021 及以上版本直接回车就行。

图片

下面就来看看操作:

首先用 SEQUENCE 函数根据 C3 单元格的数值生成一组数字序列。

=SEQUENCE(行数,[列数],[开始数],[增量])

可选参数,不输入默认为 1。

=SEQUENCE(C3)=SEQUENCE(6)

也就是该函数公式生成为 6 行 1 列,开始值为 1,增值为 1 的序列。

图片

然后以这组序列作为 IF 函数的判断条件,返回 B3 单元格的内容。

在 E3 单元格输入公式:
=IF(SEQUENCE(C3),B3)

PS : 非 0 的值都为真(true),所以 if 函数判断的时候,SEQUENCE 函数生成的序列都为 true。

图片

但是在实际操作指定重复次数的时候,不会只对单个标签进行重复,一般是多个标签一起。

这应该怎么做呢 ?

图片
图片
重复多个标签


如下图,根据 C 列的打印份数,重复 B 列多个标签名称,效果如 E 列:

图片

从上图 E 列的效果可以看出,我们需要用 VSTACK 函数对每个标签名称依次循环拼接。

这里就需要一个 REDUCE 函数,

它有 3 个参数,语法为:
=REDUCE(初始值,遍历的数组,LAMBDA(x,y,计算表达式))

第 1 个参数是初始累加值;

第 2 个参数是循环遍历的区域;

第 3 个参数是 LAMBDA 函数运算的表达式,它有两个参数,x 指向初始累加值,y 指向第 2 参数即被遍历的区域。

在 E2 单元格输入公式:
=REDUCE(B2,B3:B5,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,,1),,y))))

图片

公式解析:

REDUCE 函数

第 1 个参数为 B2 单元格,是初始值;

第 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))))

返回结果如下图 E 列:

图片

然后将上面的结果 E2:E5 作为 LAMBDA 新的第 1 参数,B4 为第 2 参数,继续第 2 次执行 LAMDA 表达式:

=VSTACK(E2:E5,EXPAND(B4,OFFSET(B4,,1),,B4))

结果如下图 G 列:

图片

……

依次类推,直至遍历完 B3:B5 的所有单元格,将 LAMBDA 第 1 参数不断拼接,结果如下图 I 列:

图片

REDUCE 函数虽然是一个比较难的函数,但是,由于有了它的存在,给我们提供了更加灵活的处理方案。
图片
总结一下


今天我们通过指定的次数重复数据的案例,切实感受到了 365 版新函数的神奇用法!重在扩展大家思路~

本文,我们主要涉及了三个比较常用的新函数。(目前它们还没在 WPS 中出现。)

❶ EXPAND 函数可以按指定的行数和列数自动扩充区域;

❷ VSTACK 函数将对多个区域自由垂直拼接,比如添加标题;

❸ REDUCE 函数通过遍历,循环调用 LAMBDA 函数表达式生成最终结果,比如对多个数据标签完成数量的复制。

Excel 里的函数有 400 多个,但我们常用的其实只有几十个。

图片


好了,今天就说到这里结束啦~

如果本篇文章对你有帮助或有所启发,欢迎「点赞」、「评论」和「转发」哦,你们的支持是我分享的动力~

图片

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多