在Macro中,我使用以下代码自动填充列。Excel工作表有近90000行,但它需要一个多小时才能完成。除了For Loop之外,还有其他方法吗。
有人能指导我吗?
为了参考,我在自动填充方法的链接中附上了一个示例快照。
[https://i.stack.imgur.com/k4Wu9.png][1]
irow10 = ActiveSheet.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
For i = 1 To irow10
If ActiveSheet.Cells(i, 4) = "" Then
ActiveSheet.Cells(i, 4).Value = ActiveSheet.Cells(i - 1, 4)
End If
Next
正如我之前所写:首先尝试powerquery。
如果你想保留VBA,那么你应该使用一个数组来执行";变换";然后写回纸张
Sub fillDown()
Dim lastRow As Long
lastRow = ActiveSheet.Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
Dim rgData As Range
Set rgData = ActiveSheet.Cells(1, 4).Resize(lastRow)
Dim arrData As Variant
arrData = rgData.Value
Dim i As Long
For i = 2 To lastRow
If arrData(i, 1) = vbNullString Then
arrData(i, 1) = arrData(i - 1, 1)
End If
Next
rgData.Value = arrData
End Sub
为什么不使用一个简单的Excel公式呢?
我刚刚创建了一个Excel表格,其中包含以下数据:
Col1 Col2
A 1
B 2
C <BLANK>
A 1
B 2
C <BLANK>
A 1
B 2
C <BLANK>
...
(up to 97345 cells (you mentioned 90k))
然后,我选择了下一列中的所有单元格,并编写了以下公式:
=IF(ISBLANK(B2),A2,B2)
之后,我按Ctrl+ENTER键在所有选定的单元格中输入该公式。
我得到了以下结果:
Col1 Col2 Col3
A 1 1
B 2 2
C <BLANK> C
A 1 1
B 2 2
C <BLANK> C
A 1 1
B 2 2
C <BLANK> C
...
这是在几秒钟内完成的!
我也记录了我的动作,最后我得到了这样一个宏(经过一些编辑(:
Sub Macro1()
Range("C2:C97345").FormulaR1C1 = "=IF(ISBLANK(RC[-1]),RC[-2],RC[-1])"
End Sub
执行这个宏甚至不需要一秒钟。