VB写excel,删除空值和0值行

VB写excel后,数据在第5~10列,第1~4列为规格之类的,数据有整行都是空值和0值的情况,怎么删除空值行和全是0值的行?请给详细代码,谢谢!... VB写excel后,数据在第5~10列,第1~4列为规格之类的,数据有整行都是空值和0值的情况,怎么删除空值行和全是0值的行?请给详细代码,谢谢! 展开
 我来答
georgetalent
推荐于2016-09-01 · 知道合伙人旅游行家
georgetalent
知道合伙人旅游行家
采纳数:242 获赞数:1046
毕业于北京装甲兵工程学院计算机系指挥自动化专业,现任沈阳市旅游局区域合作处职员

向TA提问 私信TA
展开全部

按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
更多追问追答
追问

能否用range函数,来返回行区域的值 用这个来判断?

追答
用for语句本身的效率就很低,更何况你的range对象内调用cell,为啥不直接调用cells对象呢?反正我是想不通你的这个想法是怎么来的。
第二经过if语句后直接删除就行了,何必还要选择下呢?这个一样不是要占用资源么?
第三rows(i).delete你都删除一次了,为什么还要再选择一次再删除?这不是重复删除了么?
如果是我,我不会使用range对象
小神狱1
2013-08-07 · TA获得超过614个赞
知道小有建树答主
回答量:542
采纳率:66%
帮助的人:304万
展开全部
 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列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式