Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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 vba填充列从1到N_Vba_Excel - Fatal编程技术网

excel vba填充列从1到N

excel vba填充列从1到N,vba,excel,Vba,Excel,我正在尝试编写一个VBA代码,用数字1到10000自动填充A1:A10000范围,但不在A1中输入1,在A2中输入2来创建范围 基本上,我需要这样的代码: Set fillRange = Worksheets("Sheet1").Range("A1:A10000") (1,2).AutoFill Destination:=fillRange Sub printRange(total As Integer) Dim i, myRange() As Integer ReDim myRange(1

我正在尝试编写一个VBA代码,用数字1到10000自动填充A1:A10000范围,但不在A1中输入1,在A2中输入2来创建范围

基本上,我需要这样的代码:

Set fillRange = Worksheets("Sheet1").Range("A1:A10000")
(1,2).AutoFill Destination:=fillRange
Sub printRange(total As Integer)
Dim i, myRange() As Integer
ReDim myRange(1 To total)
    For i = 1 To total:
        myRange(i) = i
Next i

'Use Transpose to shift the 1d array into a column

Worksheets("Sheet1").Range("A1:A" & UBound(myRange)).Value = _ 
Application.WorksheetFunction.Transpose(myRange)

End Sub

当然,这不起作用,但你得到了它。你不能使用一个简单的循环吗

For i = 1 to 10000
    Worksheets("Sheet1").Cells(i, 1) = i
Next i
或使用自动填充:

With Worksheets("Sheet1")
    Range("A1").Value = 1
    Range("A2").Value = 2
    Range("A1:A2").AutoFill Destination:=Range("A1:A10000")
End With 'Worksheets("Sheet1")

这应该足够快

您可以使用以下函数

Function FillNumbers(rng As Range) As Variant
    Dim i As Long
    ReDim nmbrs(1 To rng.Rows.Count)

    For i = 1 To UBound(nmbrs)
        nmbrs(i) = i
    Next
    FillNumbers = Application.Transpose(nmbrs)
End Function
以下列方式

With Worksheets("Sheet1").Range("A1:A10000")
    .Value = FillNumbers(.Cells)
End With

在工作表中读写是您可以执行的最慢的操作之一。编写节省时间的代码意味着尽可能多地使用内存

尝试将所有值写入数组,然后一次性将整个值写入工作表,如下所示:

Set fillRange = Worksheets("Sheet1").Range("A1:A10000")
(1,2).AutoFill Destination:=fillRange
Sub printRange(total As Integer)
Dim i, myRange() As Integer
ReDim myRange(1 To total)
    For i = 1 To total:
        myRange(i) = i
Next i

'Use Transpose to shift the 1d array into a column

Worksheets("Sheet1").Range("A1:A" & UBound(myRange)).Value = _ 
Application.WorksheetFunction.Transpose(myRange)

End Sub

对于total=10000,这几乎可以立即运行,即使是在一个有十年历史的恐龙桌面上

现在,所有这些答案都起作用了。然而,我认为如果我能自动填充进入for-to循环的范围,代码会更快。我觉得速度是一样的,那就忘了它。@PeterPeanut:AutoFill没有那么快,你可以比较这两个选项(我添加了代码)!但请花一分钟时间来了解它是如何工作的(接受答案并在稍后投票):我要求自动填充,因为我的代码要运行大约70页,运行大约需要10分钟。所以,我想知道自动填充是否比for循环更快。我测试了它,但它没有,所以我想,对于to来说,它仍然存在。虽然这段代码可能会解决问题,但一个好的答案也应该包含一个解释。很好,你打败了我!英雄所见略同+对于你的速度,我花了一分钟的时间来记住转置它,我不明白为什么我的一直输出10000行零。@SgtStens,我一点也不“伟大的头脑”!只有数百次“反复试验”(奇怪的是,错误比试验多得多!)。但让我们等待彼得·佩纳特的选择……这就是我一直在寻找的。@PeterPeanut,我很高兴你找到了你需要的帮助。正如R3UK早些时候评论的,请考虑接受回答和/或投票,正如在这个解释中所指出的那样。蒂姆,很抱歉回答晚了。我不希望使用简单的循环,因为它必须在80张纸上运行,每张纸大约有20000行。这将花费太多的时间,我正在尽可能加快速度。