用 0 替换空

Replace empty by 0

我想检查 D 到 O 列中的所有单元格。如果单元格为空,请将其替换为硬零。

我有这个代码:

Sub replace()
Dim rng As Range, cell As Range
Dim aantalrijen As Long

    With Worksheets("Schaduwblad")
        aantalrijen = .Range("A1", .Range("A1").End(xlDown)).Cells.Count - 1
        Set rng = .Range(.Cells(2, "D"), .Cells(aantalrijen, "O"))

        For Each cell In rng
            cell = WorksheetFunction.Substitute(cell, "", "0")
        Next
    End With
End Sub

此代码在处理过程中挂起。唯一的选择是按 Escape 结束例程。

我从来没有使用过替代方法。我会通过使用 IsEmpty() 函数检查单元格是否为空来做到这一点。

所以你可以交换

cell = WorksheetFunction.Substitute(cell, "", "0")

If IsEmpty(cell) Then cell.value = 0

完整代码:

Sub replace()
Dim rng As Range, cell As Range
Dim aantalrijen As Long

  With Application.ThisWorkbook.Worksheets("Schaduwblad")
        aantalrijen = .Range("A1", .Range("A1").End(xlDown)).Cells.Count - 1
        Set rng = .Range(.Cells(2, "D"), .Cells(aantalrijen, "O"))


    For Each cell In rng
        If IsEmpty(cell) Then cell.value = 0
    Next
  End With
End Sub

您不需要遍历所有单元格。让 Excel 用 .SpecialCells:

找到空的
On Error Resume Next
rng.SpecialCells(xlCellTypeBlanks, xlCellTypeConstants).Value = 0
On Error GoTo 0

如果没有找到空单元格,则需要错误陷阱。


因此您的整个例程可以替换为:

Sub replace()

    On Error Resume Next

      With Worksheets("Schaduwblad")
            .Range(.Cells(2, "D"), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, "O")) _
                .SpecialCells(xlCellTypeBlanks, xlCellTypeConstants).Value = 0
      End With

    On Error GoTo 0

End Sub

除了您在下面的评论之外,这里还有一个相同代码的版本,但是是逐行处理的。为了对此进行测试,我构建了一个 227,000 x 15 的数据块,然后使用 运行dom 数字生成器在其中打了 100,000 个孔,清空了这些单元格。然后我 运行 下面的代码,用了 33 秒来填补这 100,000 个洞。

Sub replace()

Dim rangesection As Range

    On Error Resume Next

      With Worksheets("Schaduwblad")
        For Each rangesection In .Range(.Cells(2, "D"), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, "O")).Rows
            rangesection.SpecialCells(xlCellTypeBlanks, xlCellTypeConstants).Value = 0
        Next
      End With

    On Error GoTo 0

End Sub