首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBE代码查找和替换

Excel VBE代码查找和替换
EN

Code Review用户
提问于 2020-01-03 16:34:56
回答 2查看 135关注 0票数 2

我需要用一种有效的方法编写一个VBA代码例程,用另一个单元格的值替换空白单元格。例如,我的工作表在D列的随机行上有一些空白单元格。我想用A列中同一行的值替换它们,换句话说,将所有行向下,如果D列为空白,则替换为A列。

我编写了一些代码,“遍历”工作表的每一行,查找D列中的空白,然后将值从A复制到D,但速度慢得可笑(其中有些工作表有超过50万行!)

代码语言:javascript
复制
 .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

有什么建议吗?

EN

回答 2

Code Review用户

回答已采纳

发布于 2020-01-03 17:49:39

试试这段代码。它假定带有数据的工作表处于活动状态。

代码语言:javascript
复制
Sub ReplaceCodeReview235023()
    With ActiveSheet.Columns("D")
       .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC[-3]"
    End With
End Sub
票数 1
EN

Code Review用户

发布于 2020-01-06 09:05:16

使用偏移量并仅使用空单元格(.Value = "")是很好的。声明所有变量也将有助于调试。如果这将成为一种习惯,它可能有助于更复杂的算法。不需要为这样的迭代选择任何内容。如果使用VBA,为什么要使用会增加工作簿大小的公式?

代码语言:javascript
复制
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)
        Next
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/235023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档