我想删除excel范围内的负值。我有一个删除但不是所有值的代码。
我知道我应该先将值更改为数字类型。我有以下代码,我尝试使用cDec
和Convert.ToInt32
但未成功。我是vba的新手,我对它的数据类型知之甚少。您的帮助将非常值得注意:
Sub Button1_Click()
Dim ws As Worksheet
Dim i As Integer
i = 1
Set ws = Sheets("Recovered_Sheet1")
ws.Activate
Dim r As Excel.Range
For Each r In Range("A1:A250").Rows
If Not IsEmpty(ActiveCell.Value) Then
'move to the row below
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = CDec(ActiveCell.Value)
End If
Next r
Do While Cells(i, 1).Value <> ""
If Cells(i, 1) < 0 Then
Cells(i, 1).EntireRow.Delete
End If
i = i + 1
Loop
End Sub
答案 0 :(得分:1)
这是一种方法。请注意,删除行时,您应该从下往上工作。此外,在运行此宏之前,您不需要更改Excel数据类型,除非您有其他原因这样做(在这种情况下,有更多有效的方法,而不是逐个单元格)。
编辑由于文字和空格将返回False,其中.Value&lt; 0,没有必要测试任何其他东西。
Option Explicit
Sub DelNegNumRows()
Dim I As Long
For I = 250 To 1 Step -1
With Cells(I, 1)
If .Value < 0 Then
.EntireRow.Delete
End If
End With
Next I
End Sub
根据您的范围的特征,您可能不需要检查所有250行(尽管如果这是您的数据库的大小,您将不会感觉到使范围更小的速度优势)。例如,如果所有包含数据的行都是非空白的,则可以执行以下操作:
lastrow = cells(1,1).end(xldown).row
或者,如果可能有空白,并且您想在A列中找到包含任何数据的最后一行,例如:
lastrow = cells(rows.Count,1).end(xlup).row
然后你可以在上面的宏中循环:
for I = lastrow to 1 step -1
答案 1 :(得分:0)
Sub Button1_Click()
Dim I As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, 1).End(xlUp).Row
For I = lastrow To 1 Step -1
With Cells(I, 2)
If .Value < 0 Then
.EntireRow.Delete
End If
End With
Next I
End Sub