我需要用一种有效的方法编写一个VBA代码例程,用另一个单元格的值替换空白单元格。例如,我的工作表在D列的随机行上有一些空白单元格。我想用A列中同一行的值替换它们,换句话说,将所有行向下,如果D列为空白,则替换为A列。
我编写了一些代码,“遍历”工作表的每一行,查找D列中的空白,然后将值从A复制到D,但速度慢得可笑(其中有些工作表有超过50万行!)
.Range("D1", Range("D1048576").End(xlUp)).Select
Set A = XL.Selection
For Each B In A.Rows
If Len(B.Value & vbNullString) = 0 Then
B.FormulaR1C1 = "=RC[-3]"
End If
DoEvents
Next有什么建议吗?
发布于 2020-01-03 17:49:39
试试这段代码。它假定带有数据的工作表处于活动状态。
Sub ReplaceCodeReview235023()
With ActiveSheet.Columns("D")
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC[-3]"
End With
End Sub发布于 2020-01-06 09:05:16
使用偏移量并仅使用空单元格(.Value = "")是很好的。声明所有变量也将有助于调试。如果这将成为一种习惯,它可能有助于更复杂的算法。不需要为这样的迭代选择任何内容。如果使用VBA,为什么要使用会增加工作簿大小的公式?
Dim sh As Worksheet, rng As Range, cel As Range, lastRow As Long
Set sh = ActiveSheet 'change it with your necessary sheet
lastRow = sh.Cells(sh.Rows.count, "D").End(xlUp).Row
Set rng = sh.Range("D1:D" & lastRow)
For Each cel In rng
If cel.Value = "" Then cel.Value = cel.Offset(0, -3)
Nexthttps://codereview.stackexchange.com/questions/235023
复制相似问题