繁体   English   中英

VBA - 替换空白单元格

[英]VBA - Replace blank cells

我必须用 DN 列中同一行中的数据替换 BM 列中的每个空白单元格。 我写过:

Columns("BM:BM").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.FormulaR1C1 = "=DN2"

但是“=DN2”在每个单元格中都以“=@'DN2'”结尾。 这会导致错误。 有人知道如何从同一行中获取 DN 中的单元格吗?

非常感谢您提前!

如果你要去R1C1然后制作公式R1C1

If Application.CountA(ActiveSheet.Range("BM:BM"))<> ActiveSheet.Rows.Count Then
    ActiveSheet.Range("BM:BM").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC118"
End If

另一种方法来做到这一点

Dim rng As Range

On Error Resume Next
Set rng = Columns("BM:BM").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0

If Not rng Is Nothing Then
    rng.Formula = "=DN" & rng.Row
End If

顺便说一句,如果您使用的是SpecialCells ,请使用错误处理,否则您的代码在找不到这些单元格时会崩溃

这是我的两分钱。 我会放弃在整个列上使用SpecialCells的想法。 如果您想使用SpecialCells那么至少首先在BM列中创建一个Range以使用它。 如果任何列超过感兴趣的行,您最终会在您真正不想要的地方得到值(在您的情况下为公式)。

这是一个跨越A1:C5的小例子:

在此处输入图片说明

我们感兴趣的区域是列B:B ,如果为空,我们需要列C:C的值

当我们使用SpecialCells运行代码时,例如:

Columns("B:B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC3"

我们最终会得到:

在此处输入图片说明

我们看到的是, SpecialCells使用了UsedRange (正如@Peh 在评论部分正确提到的那样),因此在这样使用时非常不可靠。 存在以您不想要的值/公式结束的风险。 我建议使用C:C列(或在您的情况下为DN )中最后使用的行并从那里开始。 所以已经很省钱了:

.Range("BM1:BM" & <LastUsedRowOfDN>).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC118"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM