基本上我试图通过一列(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变量输入的内容。
谢谢
答案 0 :(得分:2)
首先,最好在删除行时从底部开始并进行处理。例如For x = colCount to 2 step -1
。
If daysUnused = True
和ElseIf 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
听起来你陷入了一个跳过跳过的陷阱,这个陷阱从底部到顶部(当删除列时从右到左)是一个规范的练习。希望以上内容可以帮助您收紧代码。