我正在尝试编写VBA代码以自动填充范围A1:A10000,编号为1到10000,但不在A1中输入1,在A2中输入2以创建范围。
基本上,我需要一个看起来像这样的代码:
Set fillRange = Worksheets("Sheet1").Range("A1:A10000")
(1,2).AutoFill Destination:=fillRange
当然这不起作用,但你得到了它。
答案 0 :(得分:2)
Dim fillRange As Range
Dim i As Long
Set fillRange = Worksheets("Sheet1").Range("A1:A10000")
With fillRange
For i = .Cells(1, 1).Row To .Cells(.Rows.Count, 1).Row
.Cells(i, 1).Value = i
Next i
End With 'fillRange
或使用自动填充:
With Worksheets("Sheet1")
Range("A1").Value = 1
Range("A2").Value = 2
Range("A1:A2").AutoFill Destination:=Range("A1:A10000")
End With 'Worksheets("Sheet1")
答案 1 :(得分:2)
这应该足够快
您可以使用以下功能
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
答案 2 :(得分:1)
你不能使用简单的循环吗?
For i = 1 to 10000
Worksheets("Sheet1").Cells(i, 1) = i
Next i
答案 3 :(得分:1)
写入和读取工作表是您可以执行的一些最慢的操作。编写节省时间的代码意味着在内存中尽可能多地做。
尝试将所有值写入数组,然后一次性将整个内容写入工作表,如下所示:
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
总计= 10000,即使在十年前的恐龙桌面上也能立即运行。
答案 4 :(得分:0)
Dim fillRagne As Range
Set fillRange = Range(Cells(1, 1), Cells(1000, 1))
For Each cell in fillRange
cell.value = cell.Row
Next cell