在Excel中按指定的重复次数填充数据到一列

2022-08-18发布者:ylm大小: 下载:0

文件大小:

软件介绍

image.png


公式1:

    =OFFSET(A$1,MIN(IF(COUNTIF($D$1:D1,A$2:A$21)<B$2:B$21,ROW(A$1:A$20))),)

      说明:COUNTIF函数统计公式所在单元格以上区域中所产生的各个“编号”数量,将其与B列对应次数进行对比,如果未达到B列对应次数,则返回“编号” 相对A1单元格的偏移量,否则返回“FALSE”,这将得到一个包含“FALSE”和偏移量的数组。MIN函数取得最小值,即“编号”的偏移量,最后用 OFFSET函数返回“编号”。

      公式2:

    =INDEX(A$1:A$21,SMALL(IF($B$2:$B$21>=COLUMN($A:$J),ROW($B$2:$B$21)),ROW(A1)))

      说明:“IF($B$2:$B$21>=COLUMN($A:$J),ROW($B$2:$B$21))”产生一个20行10列由FALSE和数字组成的数组(本例A列共 有20个数据,最大重复次数为10),其中的数字为各“编号”对应的行号,且各数字的数量与B列的重复次数相同。如16行“BXQ763”对应的“重复次 数”为3,数组中即包含3个“16”。“COLUMN($A:$J)”需根据B列的最大值进行修改,例如“重复次数”中最大值为26,则改为 “COLUMN($A:$Z)”。

      公式3:

    =INDEX(A$2:A$21,MATCH(ROW(A1)-1,SUBTOTAL(9,OFFSET(B$1,,,ROW($1:$21))),1))

      说明:MATCH函数的第二个参数“SUBTOTAL(9,OFFSET(B$1,,,ROW($1:$21)))”,在本例中产生一个对B列数字进行累 加的内存数组“{0;2;3;8;10;13;22;29;31;37;44;46;56;59;69;72;75;85;94;97;99}”,第三个 参数为“1”,MATCH函数会查找小于或等于第一个参数的最大值,并返回其在数组中的相对位置,即A2:A21区域中的相对行号。例如对于D17单元 格,MATCH函数的第一个参数“ROW(A16)-1”返回15,数组中小于等于15的最大值为13,13处于数组中的第6个位置,MATCH函数返回 6,公式返回A2:A21区域中的第6行数据,即编号“JGN347”。

      如果数据量较大,用下面的VBA代码较为快捷。按Alt+F11,打开VBA编辑器,在代码窗口中粘贴下列代码并运行即可。

Sub 按指定次数重复数据()
Dim Rng, Arr()
Dim i As Integer, j As Integer, k   As Integer
Dim LastRow As Integer, Total As Integer
LastRow = [A65536].End(xlUp).Row
Total = Application.WorksheetFunction.Sum(Range("B2:B" & LastRow))
Rng = Range("A1:B" & LastRow)
ReDim Arr(1 To Total, 1 To 1)
For i = 2 To UBound(Rng, 1)
    For j = 1 To Rng(i, 2)
        k = k + 1
        Arr(k, 1) = Rng(i, 1)
    Next
Next
Range("D2").Resize(k, 1).Value = Arr
End Sub

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

版权声明:

1 本站所有资源(含游戏)均是软件作者、开发商投稿,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!

2 本站将不对任何资源负法律责任,所有资源请在下载后24小时内删除。

3 若有关在线投稿、无法下载等问题,请与本站客服人员联系。

4 如侵犯了您的版权、商标等,请立刻联系我们并具体说明情况后,本站将尽快处理删除,联系QQ:2499894784

返回顶部