VB写excel,删除空值和0值行
VB写excel后,数据在第5~10列,第1~4列为规格之类的,数据有整行都是空值和0值的情况,怎么删除空值行和全是0值的行?请给详细代码,谢谢!...
VB写excel后,数据在第5~10列,第1~4列为规格之类的,数据有整行都是空值和0值的情况,怎么删除空值行和全是0值的行?请给详细代码,谢谢!
展开
2个回答
推荐于2016-09-01 · 知道合伙人旅游行家
关注
展开全部
按ALT +F11打开vba编辑器
复制如下代码
Sub s()
Dim i As Integer, a As Integer
a = Sheet1.Range("a65536").End(xlUp).Row
i = 1
Do
If Sheet1.Cells(i, 5) = "" Or Sheet1.Cells(i, 5) = 0 Then
Sheet1.Rows(i).Delete
a = a - 1
Else
i = i + 1
End If
Loop While i < a + 1
End Sub
运行宏,以上代码是第五列没有数据或0就删除这行。
对单元格操作肯定速度很慢,这个是和你的处理器速度有关系的。第二这个只检查第五列是否为空,如果检查多列为空需要在if语句的条件里继续添加条件。第三,六到十行保留的话需要加入另一个循环。更新后的代码在后面。使用标记的方法只会让你的速度更慢,呵呵。
Sub s()
Dim i As Integer, a As Integer
a = Sheet1.Range("a65536").End(xlUp).Row
i = 1
Do
If Sheet1.Cells(i, 5) = "" Or Sheet1.Cells(i, 5) = 0 or Sheet1.Cells(i, 6) = "" Or Sheet1.Cells(i, 6) = 0 or Sheet1.Cells(i, 7) = "" Or Sheet1.Cells(i, 7) = 0 or Sheet1.Cells(i, 8) = "" Or Sheet1.Cells(i, 8) = 0 or Sheet1.Cells(i, 9) = "" Or Sheet1.Cells(i, 9) = 0 or Sheet1.Cells(i, 10) = "" Or Sheet1.Cells(i, 10) = 0 Then
Sheet1.Rows(i).Delete
a = a - 1
Else
i = i + 1
End If
Loop While i < 6
if a>11 then
i = 1
Do
If Sheet1.Cells(i, 5) = "" Or Sheet1.Cells(i, 5) = 0 or Sheet1.Cells(i, 6) = "" Or Sheet1.Cells(i, 6) = 0 or Sheet1.Cells(i, 7) = "" Or Sheet1.Cells(i, 7) = 0 or Sheet1.Cells(i, 8) = "" Or Sheet1.Cells(i, 8) = 0 or Sheet1.Cells(i, 9) = "" Or Sheet1.Cells(i, 9) = 0 or Sheet1.Cells(i, 10) = "" Or Sheet1.Cells(i, 10) = 0 Then
Sheet1.Rows(i).Delete
a = a - 1
Else
i = i + 1
End If
Loop While i < a+1
end if
End Sub
更多追问追答
追答
用for语句本身的效率就很低,更何况你的range对象内调用cell,为啥不直接调用cells对象呢?反正我是想不通你的这个想法是怎么来的。
第二经过if语句后直接删除就行了,何必还要选择下呢?这个一样不是要占用资源么?
第三rows(i).delete你都删除一次了,为什么还要再选择一次再删除?这不是重复删除了么?
如果是我,我不会使用range对象
展开全部
Sub kk()
Dim i As Integer
lastrow = Worksheets("Sheet1").UsedRange.SpecialCells(xlCellTypeLastCell).Row '设置最后一行标记
For i = 2 To lastrow
If Cells(i, 5) <> "" And Cells(i, 5) <> 0 Or Cells(i, 6) <> "" And Cells(i, 6) <> 0 Or Cells(i, 7) <> "" And Cells(i, 7) <> 0 Or Cells(i, 8) <> "" And Cells(i, 8) <> 0 Or Cells(i, 9) <> "" And Cells(i, 9) <> 0 Or Cells(i, 10) <> "" And Cells(i, 10) <> 0 Then
Cells(i, 26) = 1 '设置保留标记
End If
Next
Cells(1, 26) = 1 '防止误册标题行
[z:z].SpecialCells(4).Delete (3) '删除空值及0值行
Columns(26) = "" '删除标记列
End Sub
'Worksheets("Sheet1")中的sheet1修改为当前工作表名称,已测试通过
追问
[z:z].SpecialCells(4).Delete (3) 这句没看懂,[z:z]什么意思
追答
在第26列建立保留标记,[Z:Z]表示第26列.
[Z:Z].SpecialCells(4)).Delete (3)表示将此列为空值的单元格所在的行删除。因为通过判断建立了删除标记(在第26列即Z列。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |