用 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
我想检查 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