我在下面写了代码来删除A,F和G列中没有值的行。
Sub DeleteRawBlank()
Dim Cnt As Long
Dim RowCnt As Integer
RowCnt = Worksheets("Raw").UsedRange.Rows.Count
Worksheets("Raw").Activate
For Cnt = RowCnt To 2 Step -1
If Trim(Worksheets("Raw").Cells(Cnt, "A").Value) <> "" And
Trim(Worksheets("Raw").Cells(Cnt, "F").Value) <> "" And
Trim(Worksheets("Raw").Cells(Cnt, "G").Value) <> "" Then
Rows(Cnt).Delete
End If
Next Cnt
End Sub
但它不起作用。请帮忙
答案 0 :(得分:0)
您应该对.Cells
属性中的列使用整数值。
您还应该利用With...End With
Statement。
Sub delete_row()
Dim Cnt As Long
Dim RowCnt As Integer
Dim wb As Workbook, wsRaw As Worksheet
Set wb = ThisWorkbook
Set wsRaw = wb.Worksheets("Raw")
With wsRaw
RowCnt = .Range("A" & .Rows.Count).End(xlUp).Row
For Cnt = RowCnt To 2 Step -1
If Trim(.Cells(Cnt, 1).Value) <> "" And _
Trim(.Cells(Cnt, 6).Value) <> "" And _
Trim(.Cells(Cnt, 7).Value) <> "" Then
Rows(Cnt).Delete
End If
Next Cnt
End With
End Sub
答案 1 :(得分:0)
使用id int pk
name varchar
mobile varchare
age int
代替= Empty
<> ""
中包含一些数据, <> ""
将返回True
。
Cell
答案 2 :(得分:0)
只有当A
,F
,G
列中的所有单元格都不为空时,您的代码才会删除行。因此,如果您需要删除A
,F
,G
中空单元格的行,那么您应在代码中使用=
代替<>
,并且它会正常工作。
此外,您可能面临另一个问题,integer
类型的变量具有有限的范围(从-32768到32767),因此如果您使用的范围的行数超出此范围,那么您将收到错误。
此外,如果使用范围不是从usedrange.rows.count
开始,请注意usedrange.columns.count
或A1
,因为UsedRange.Rows.Count
计算使用范围内的行数,而不计算行中的行数工作表,因此使用范围中的行数不总是等于工作表中最后使用的行。
我已经尝试过简化您的代码,我认为它适用于您:
Sub DeleteRawBlank()
Dim Cnt&, RowCnt&
With Worksheets("Raw")
RowCnt = .Cells.Find("*", , , , , xlPrevious).Row
For Cnt = RowCnt To 2 Step -1
If WorksheetFunction.Trim(.Cells(Cnt, "A") & .Cells(Cnt, "F") & .Cells(Cnt, "G")) = "" Then
.Rows(Cnt).Delete
End If
Next Cnt
End With
End Sub
还有一件事,trim
将只删除左侧和右侧的空格,但不会删除字符串中的冗余空格,因此如果您需要删除所有冗余空格,则应使用WorksheetFunction.Trim
所以,它将如下例所示:
trim(" A B")
将返回"A B"
trim$("A B ")
将返回"A B"
WorksheetFunction.Trim(" A B ")
将返回"A B"