Excel VBA-替换空白单元格

Excel VBA-替换空白单元格,excel,vba,excel-formula,Excel,Vba,Excel Formula,我必须用DN列同一行中的数据替换BM列中的每个空白单元格。 我曾写道: Columns("BM:BM").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.FormulaR1C1 = "=DN2" 但在每个单元格中,“=DN2”的结尾类似于“=@'DN2'”。这是一个错误。 有人知道如何从同一行获取DN中的单元格吗 提前非常感谢 如果要R1C1,则使用公式R1C1 If Application.CountA(Act

我必须用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
如果Application.CountA(ActiveSheet.Range(“BM:BM”))ActiveSheet.Rows.Count那么
ActiveSheet.Range(“BM:BM”).SpecialCells(xlCellTypeBlanks)。公式1C1=“=RC118”
如果结束
另一种方法

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
,请至少在
BM
列中创建一个
范围
,以便首先使用它。如果任何列超过了感兴趣的行,您将在您真正不想要的位置(在您的例子中是公式)得到值

下面是一个跨越
A1:C5
的小示例:

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

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

Columns("B:B").SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC3"
我们将以以下方式结束:

我们看到的是,
SpecialCells
使用了
UsedRange
(正如@Peh在评论部分正确提到的那样),因此在这样使用时是非常不可靠的。有一种风险,就是在你不想要值/公式的地方得到它们。我建议使用列
C:C
(或者在您的情况下是
DN
)中最后使用的行,然后从那里开始。因此,allready多个储蓄器将类似于:

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

.FormulaR1C1
更改为
.Formula
您可能会从阅读中受益。正如@BigBen所述,可能会将公式更改为实际的
R1C1
格式:
“=RC118”
问题是您将R1C1和A1符号混合在一起。这是一整列中需要处理的大量内容。你确定你都需要吗?另外,您真的需要公式,或者更确切地说是值吗?换句话说,您是否需要这些公式并因此处理数据两次?@JvdV no
SpecialCells
将限制为
UsedRange
,因此它不会将所有行填充到底部。试一试。我给你10个代表你的两分钱:-)哈,这对10个代表来说相当便宜@BigBenEnglish很奇怪-我们有“这是我的两分钱”的表达,但也有“一分钱给你的想法”。显然我们无法计算出它的价值。