Excel VBA不正确validation整数值进行比较

基本上我试图通过在一列(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中的单元格格式化为只有数目。

我想要做的是基本上sorting,而不是保持值,我想删除任何小于50或任何用户inputdaysValvariables。

谢谢

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

If daysUnused = TrueElseIf daysUnused = False Then是过度评估一个简单的布尔值。 后者可以缩短为Else 。 通过严格的定义,如果你真的不想做任何事情,一个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 

这听起来像是你陷入了跳跃式的陷阱,使得从下到上(从右到左删除列)是一个规范的做法。 希望以上内容能帮助你加强你的代码。