Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 是否有任何公式可用于复制指定次数的特定单元格?_Excel_Vba - Fatal编程技术网

Excel 是否有任何公式可用于复制指定次数的特定单元格?

Excel 是否有任何公式可用于复制指定次数的特定单元格?,excel,vba,Excel,Vba,我正在处理一个数据,我有一个公司名称列表,一个在另一个下面。例如 1. A 2. B 3. C 还有更多… 需要的结果是 1. A 2. A 3. A 4. A 5. A 6. B 7. B 8. B 9. B 10. B 11. C 12. C 13. C 14. C 15. C 等等…… 数据太大,无法手动执行此任务。因此,如果有人能提出一个公式来简化工作,那就太好了:)将数据复制到一个变体数组中,然后根据它构建一个所需大小的新数组 Sub Demo(

我正在处理一个数据,我有一个公司名称列表,一个在另一个下面。例如

 1. A
 2. B
 3. C
还有更多…
需要的结果是

 1. A
 2. A
 3. A
 4. A
 5. A
 6. B
 7. B
 8. B
 9. B
 10. B
 11. C
 12. C
 13. C
 14. C
 15. C
等等……

数据太大,无法手动执行此任务。因此,如果有人能提出一个公式来简化工作,那就太好了:)

将数据复制到一个变体数组中,然后根据它构建一个所需大小的新数组

Sub Demo()
    Dim r As Range, v1 As Variant, v2 As Variant
    Dim i As Long, j As Long, n As Long

    n = 5 ' number of entries
    With ActiveSheet
        ' Get existing data into array
        Set r = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
        v1 = r.Value

        ' Create new array of required size
        ReDim v2(1 To UBound(v1, 1) * n, 1 To 1)

        ' copy and replicate original data into new array
        For i = 1 To UBound(v1, 1)
        For j = 1 To n
            v2((i - 1) * n + j, 1) = v1(i, 1)
        Next j, i

        ' Place new data onto sheet 
        Set r = r.Resize(r.Rows.Count * n, 1)
        r.Value = v2
    End With

End Sub

将数据复制到一个变体数组,并从中构建一个所需大小的新数组

Sub Demo()
    Dim r As Range, v1 As Variant, v2 As Variant
    Dim i As Long, j As Long, n As Long

    n = 5 ' number of entries
    With ActiveSheet
        ' Get existing data into array
        Set r = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
        v1 = r.Value

        ' Create new array of required size
        ReDim v2(1 To UBound(v1, 1) * n, 1 To 1)

        ' copy and replicate original data into new array
        For i = 1 To UBound(v1, 1)
        For j = 1 To n
            v2((i - 1) * n + j, 1) = v1(i, 1)
        Next j, i

        ' Place new data onto sheet 
        Set r = r.Resize(r.Rows.Count * n, 1)
        r.Value = v2
    End With

End Sub

使用列A中的数据,在B1中输入:

=INDEX(A:A,ROUNDUP(ROWS($1:1)/5,0))
并抄写:


要获得六次重复,只需使用6代替5

,数据位于A列中,在B1中输入:

=INDEX(A:A,ROUNDUP(ROWS($1:1)/5,0))
并抄写:


要获得六次重复,只需使用6代替5

使用
indirect
函数即可获得相同的结果:
=indirect(“A”&ROUNDUP(ROWS($1:1)/5;0))
@Vasily FWIW,indirect()的问题在于它是。这意味着每次Excel重新计算时,它都会完全重新计算。索引函数仅在目标数据更改时重新计算。在小范围内,这并不重要,但如果间接函数或任何其他易失性函数使用过多,则会降低计算速度。在我看来,应该尽可能避免间接。使用
间接
函数可以获得相同的结果:
=Indirect(“A”)和ROUNDUP(ROWS($1:1)/5;0))
@Vasily FWIW,间接()的问题在于它是。这意味着每次Excel重新计算时,它都会完全重新计算。索引函数仅在目标数据更改时重新计算。在小范围内,这并不重要,但如果间接函数或任何其他易失性函数使用过多,则会降低计算速度。在我看来,如果可能的话,应该尽量避免间接的。如果下面的问题之一回答了你的问题,你应该点击答案旁边的复选标记。请参阅:如果以下选项之一回答了您的问题,您应该单击答案旁边的复选标记。看:@Gary的学生。。。只是有点好奇想知道你建议的配方。。。就像$sign的功能是锁定特定的单元格或列一样,/在公式中的功能是什么?@Gary的学生。。。只是有点好奇想知道你建议的配方。。。就像$sign的功能是锁定特定的单元格或列一样,/在公式中的功能是什么?