将范围的值从文本转换为数字

时间:2014-02-07 20:06:04

标签: excel excel-vba vba

我想删除excel范围内的负值。我有一个删除但不是所有值的代码。

我知道我应该先将值更改为数字类型。我有以下代码,我尝试使用cDecConvert.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

2 个答案:

答案 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