再说Excel按指定次数复制数据,不用PQ不用辅助列
编按:
再介绍一个直接用Excel的老函数就可以实现按指定次数复制数据的方法。不用PQ ,不用辅助列!
昨日晚间听部落窝老师说帮一位学员解决按指定次数复制数据的问题,如下图。小窝当时有点显摆,说了三种方法:用PQ、用辅助列+老函数、用辅助列+新函数。结果老师说,用不着PQ,也用不着辅助列,一个普通公式就搞定。=IFERROR(INDEX($A$2:$A$7,SMALL(IF($B$2:$B$7>=COLUMN(A:Z),ROW($B$2:$B$7)-1),ROW(A1)),),"")如果复制次数是相同的,譬如每个姓名复制3次,那么只要能生成如“1;1;1;2;2;2;3;3;3;4;4;4;…”的每个数重复3次的序列,就可以用INDEX函数按序列依次把每个姓名复制3次。但现在复制次数不等,如果继续用INDEX函数引用姓名,则需要生成如“1;1;1;2;2;2;2;3;3;4;4;4;4;4;4;…”的序列,序列中每个数的重复次数等于复制次数,=SMALL(IF($B$2:$B$7>=COLUMN(A:Z),ROW($B$2:$B$7)-1),ROW(A1))这里面最关键的是$B$2:$B$7>=COLUMN(A:Z)COLUMN(A:Z),可以生成1到26的序列{1,2,3,4,5,…26}。该序列是单行数组,1行26列。$B$2:$B$7,是单列数组,1列 6行{3;4;2;6;2;4}。比较运算后,根据数组运算规则(不懂的请查看文前或者文后的推荐教程《IF函数{1,0}结构原理和用法》中的数组逻辑)自动扩展数组,会生成6行26列的数组。然后是用IF函数赋值。上方数组中的TRUE都从6行1列序列{1;2;3;4;5;6}(由ROW($B$2:$B$7)-1)生成)中取值。最后用SMALL函数逐个提取数组中的数,得到需要的“1;1;1;2;2;2;2;3;3;4;4;4;4;4;4;…”的序列。哎,打脸!小窝还专门做过按指定次数复制数据的教程,都没有想到利用单列和单行来比较生成需要的数组。=TEXTSPLIT(CONCAT(REPT(A2:A7&"/",B2:B7)),,"/",1)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。