Excel 如果右值为零,则删除两列
我有两个专栏。第一列包含代码,第二列包含空值(0) 如果第二列的值等于零,有没有办法删除这两列 我尝试使用它,但它只删除第二列中的零值Excel 如果右值为零,则删除两列,excel,vba,Excel,Vba,我有两个专栏。第一列包含代码,第二列包含空值(0) 如果第二列的值等于零,有没有办法删除这两列 我尝试使用它,但它只删除第二列中的零值 Sub ClearZero() For Each cell In Range("C6:D4005") If cell.Value = "0" Then cell.Clear Next End Sub 您可以这样做: Sub ClearZero() For Each cell In Ra
Sub ClearZero()
For Each cell In Range("C6:D4005")
If cell.Value = "0" Then cell.Clear
Next
End Sub
您可以这样做:
Sub ClearZero()
For Each cell In Range("D6:D4005")
If cell.Value = "0" Then
cell.Clear
cell.offset(0, -1).Clear
End If
Next
End Sub
另一种无需循环即可实现所需的方法 逻辑:
D
是否有0
位置D
中。优于硬编码D4005
0
筛选列D
校正-对范围(“D6:D4005”)中的每个单元格使用
,
,因为否则,如果C列中的单元格计算结果为0,则将从B列中删除一个单元格。即使这种情况在这个数据集中永远不会发生,它也值得考虑,而且它将使循环长度减半。谢谢@SpencerBarnes,这一点很好。我已经更新了答案。
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long
Dim FilteredRange As Range
'~~> Set this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Remove any filters
.AutoFilterMode = False
'~~> Find last row
lRow = .Range("D" & .Rows.Count).End(xlUp).Row
'~~> Check if the column D has 0 anywhere
If Application.WorksheetFunction.CountIf(.Range("D1:D" & lRow), 0) Then
'~~> Filter column D on 0
.Range("D1:D" & lRow).AutoFilter Field:=1, Criteria1:=0
'~~> Identify your range
Set FilteredRange = .AutoFilter.Range
'~~> Clear the range in 1 go!
FilteredRange.Offset(1, 0).Resize(FilteredRange.Rows.Count - 1).Clear
FilteredRange.Offset(1, -1).Resize(FilteredRange.Rows.Count - 1).Clear
End If
'~~> Remove any filters
.AutoFilterMode = False
End With
End Sub