Excel VBA无法正确验证整数值以进行比较

时间:2015-04-02 02:06:58

标签: excel vba excel-vba

基本上我试图通过一列(R:R)中值小于50的单元格

以下是代码:

Sub Macro1()
'
' Macro1 Macro
'
'
    Sheets("Pyxis Inventory 6North1 and 6No").Select
    Cells(1).EntireRow.Copy (Sheets("Sheet1").Range("A1").EntireRow)
    Cells(1).EntireRow.Copy (Sheets("Sheet2").Range("A1").EntireRow)

    Dim val1, val2 As String
    Dim i, j, x As Integer
    Dim colCount As Integer
    Dim daysUnused As Boolean
    Dim daysVal As Integer
    colCount = Sheets("Pyxis Inventory 6North1 and 6No").Range("A1").CurrentRegion.Rows.Count

    daysUnused = IsEmpty(Sheets("Settings").Range("B2"))
    If daysUnused = True Then
        'do nothing yet

    ElseIf daysUnused = False Then
        daysVal = Sheets("Settings").Range("B2").Value
        For x = 2 To colCount
            If Cells(x, 18).Value <= daysVal Then
                Cells(x, 18).EntireRow.Copy (Sheets("Sheet4").Range("A1").Offset(x, 0))
                Cells(x, 18).EntireRow.Delete
            End If
         Next x
    End If
End Sub

我的问题是它不会删除数字小于50的行。

我已将第18列中的单元格格式化为仅数字。

我想要做的基本上是排序,但不是保留我想删除任何小于50的值或者用户为daysVal变量输入的内容。

谢谢

1 个答案:

答案 0 :(得分:2)

首先,最好在删除行时从底部开始并进行处理。例如For x = colCount to 2 step -1

If daysUnused = TrueElseIf daysUnused = False Then过度评估了一个简单的布尔值。后者可以缩短为Else。通过严格的定义,如果你在True时不打算做任何事情,Not应该绰绰有余。

daysUnused = IsEmpty(Sheets("Settings").Range("B2"))
If Not daysUnused Then
    daysVal = Sheets("Settings").Range("B2").Value
    For x = colCount to 2 step -1
        If Cells(x, 18).Value <= daysVal Then
            Cells(x, 18).EntireRow.Copy Sheets("Sheet4").Range("A1").Offset(x, 0)
            Cells(x, 18).EntireRow.Delete
        End If
     Next x
End If

听起来你陷入了一个跳过跳过的陷阱,这个陷阱从底部到顶部(当删除列时从右到左)是一个规范的练习。希望以上内容可以帮助您收紧代码。