首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果特定范围内的单元格全部为空,则删除整行。

如果特定范围内的单元格全部为空,则删除整行。
EN

Stack Overflow用户
提问于 2016-04-18 20:36:41
回答 1查看 7.4K关注 0票数 1

我想要创建一个宏,如果特定范围内的所有单元格( 10行中的每一行中的B到K)都为空,该宏将删除整行。我尝试了以下几点:

代码语言:javascript
运行
复制
Dim i As Integer
Dim rng As Range

For i = 1 To 10
Set rng = Range("B" & i, "K" & i).SpecialCells(xlCellTypeBlanks)
rng.EntireRow.Delete
Next i

如果有更多带有空单元格的行,比如1和2,它删除第1行和移动第2行,而不是删除的第2行,因此它变成了第1行。然后它跳过移动的行,因为我总是增加,这样它就不再检查第1行了。在移到下一个i之前,有没有方法检查刚才删除的行是否真的是非空的?

顺便说一句:我正在使用Excel 2013。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 20:52:15

为什么不直接使用CountA(),而不是使用特殊的单元

代码语言:javascript
运行
复制
Sub t()
Dim i&

For i = 10 To 1 Step -1
    If WorksheetFunction.CountA(Range("B" & i, "K" & i)) = 0 Then
        Rows(i).EntireRow.Delete
    End If
Next i
End Sub

这样,如果没有空白,您可以避免任何错误。另外,在删除行时,建议从末尾开始,然后从Step -1开始。

编辑:

也试一试,这样可能会更快:

代码语言:javascript
运行
复制
Sub T()
Dim rng As Range

Set rng = Range("B1:K10") ' Since you're going to loop through row 1 to 10, just grab the blank cells from the start
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Select ' Just to show you what's being selected. Comment this out in the final code
rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

我建议先使用F8来了解它是如何工作的。在B1:K10范围内,它将首先选择有空白单元格的所有行。然后,它将删除这些行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36703828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档