如何用VBA、公式和Power Query删除Excel中的空白行

  • Share This
Michael Brown

本教程将教你几个简单的技巧,在Excel中安全地删除多条空行而不丢失任何一点信息 .

Excel中的空行是我们偶尔都会遇到的问题,尤其是在合并不同来源的数据或从其他地方导入信息时。 空行会给你的工作表带来不同程度的破坏,手动删除它们是一个耗时且容易出错的过程。 在这篇文章中,你将学习一些简单而可靠的方法来删除Excel中的空行。你的工作表。

    如何不在Excel中删除空行

    在Excel中删除空行有几种不同的方法,但令人惊讶的是,许多在线资源坚持使用最危险的方法,即 查找& 选择 > 转到专题 > 空白 .

    这个技术有什么问题? 它选择了 所有空白 在一个范围内,因此,你最终会删除所有包含一个空白单元格的行。

    下面的图片显示了左边的原始表格和右边的结果表格。 在结果表格中,所有不完整的行都消失了,甚至第10行只有D列中的日期丢失。

    底线是:如果你不想弄乱你的数据,千万不要通过选择空白单元格来删除空行。 相反,要使用下面讨论的更多考虑的方法之一。

    如何用VBA删除Excel中的空白行

    Excel VBA可以解决很多问题,包括多个空行。 这种方法最好的一点是,它不需要任何编程技巧。 简单地说,抓住下面的一个代码,在你的Excel中运行它(说明在这里)。

    宏观1.删除选定范围内的空白行

    这段VBA代码默默地删除了一个选定范围内的所有空白行,而不向用户显示任何信息或对话框。

    与之前的技术不同,该宏删除了一个行,如果 整行都是空的 它依靠工作表函数CountA来获得每行中非空单元格的数量,然后删除计数为零的行。

    Public Sub DeleteBlankRows() Dim SourceRange As Range Dim EntireRow As Range Set SourceRange = Application.Selection If Not (SourceRange Is Nothing ) Then Application.ScreenUpdating = False For I = SourceRange.Rows.Count To 1 Step -1 Set EntireRow = SourceRange.Cells(I, 1).EntireRow If Application.WorksheetFunction.CountA(EntireRow) = 0 Then EntireRow.Delete End If Next Application.ScreenUpdating= True End If End Sub

    要给用户一个机会来 运行宏后选择目标范围 ,使用这个代码。

    Public Sub RemoveBlankLines() Dim SourceRange As Range Dim EntireRow As Range On Error Resume Next Set SourceRange = Application.InputBox( _ "Select a range:" , "Delete Blank Rows" , _ Application.Selection.Address, Type :=8) If Not (SourceRange Is Nothing ) Then Application.ScreenUpdating = False For I = SourceRange.Rows.Count To 1 Step -1 Set EntireRow = SourceRange.Cells(I, 1).EntireRow IfApplication.WorksheetFunction.CountA(EntireRow)=0 那么EntireRow.Delete End If Next Application.ScreenUpdating = True End If End Sub

    运行后,宏显示以下输入框,你选择目标范围,并点击确定。

    一会儿,所选范围内的所有空行将被消除,剩下的空行将向上移动。

    宏观2.删除Excel中的所有空白行

    要删除 所有空白行 关于 活页 确定所用范围的最后一行(即包含最后一个有数据的单元格的那一行),然后向上删除CountA返回0的行。

    Sub DeleteAllEmptyRows() Dim LastRowIndex As Integer Dim RowIndex As Integer Dim UsedRng As Range Set UsedRng = ActiveSheet.UsedRange LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count Application.ScreenUpdating = False For RowIndex = LastRowIndex To 1 Step -1 If Application.CountA(Rows(RowIndex)) = 0 then Rows(RowIndex).Delete End If Next RowIndex Application.ScreenUpdating = True End Sub

    Macro 3.如果单元格为空,则删除该行

    通过这个宏,如果指定列中的单元格是空白的,你可以删除整个行。

    下面的代码检查A列是否有空白,如果要根据另一列删除行,用一个适当的字母替换 "A"。

    Sub DeleteRowIfCellBlank() On Error Resume Next Columns( "A").SpecialCells( xlCellTypeBlanks).EntireRow.Delete End Sub

    事实上,该宏使用了 转到专题 > 空白 功能,你可以通过手动执行这些步骤达到同样的效果。

    注意:该宏程序删除了在 "我的 "中的空白行。 整张 作为预防措施,在运行这个宏之前,最好先备份工作表。

    如何用VBA删除Excel中的空行

    要使用宏来删除Excel中的空行,你可以将VBA代码插入你自己的工作簿中,或者从我们的样本工作簿中运行一个宏。

    在你的工作簿中添加一个宏

    要在你的工作簿中插入一个宏,请执行以下步骤。

    1. 打开你要删除空白行的工作表。
    2. 按Alt + F11打开Visual Basic编辑器。
    3. 在左侧窗格中,右键单击 这本工作手册 ,然后点击 插入 > 模块 .
    4. 将代码粘贴在代码窗口中。
    5. 按F5来运行宏。

    关于详细的步骤说明,请看如何在Excel中插入和使用VBA。

    从我们的样本工作簿中运行一个宏

    下载我们的删除空白行的宏样本工作簿,并从那里运行以下宏之一。

    删除空白行 - 删除当前选定范围内的空行。

    删除空行 - 删除空白行,并在你运行宏后选择的范围内向上移位。

    删除所有空行 - 删除活动页面上的所有空行。

    删除单元格空白的行 - 如果某一列的单元格为空白,则删除该行。

    要在你的Excel中运行该宏,请执行以下操作。

    1. 打开下载的工作簿,如果有提示,请启用宏。
    2. 打开你自己的工作簿,导航到感兴趣的工作表。
    3. 在你的工作表中,按Alt + F8,选择宏,然后点击 运行 .

    在Excel中删除空白行的公式

    如果你想看到你正在删除的内容,可以使用以下公式来识别空行。

    =IF(COUNTA(A2:D2)=0, "空白", "非空白")

    其中A2是第一行数据的第一个单元格,D2是第一行数据的最后一个使用单元格。

    在E2或第2行的任何其他空白列中输入这个公式,然后拖动填充柄,将公式向下复制。

    结果,你将在空行中出现 "空白",而在包含至少一个有数据的单元格的行中出现 "非空白"。

    该公式的逻辑是显而易见的:你用COUNTA函数计算非空单元格,并使用IF语句在零计数时返回 "空白",否则返回 "非空白"。

    事实上,没有IF,你也可以做得很好。

    =counta(a2:d2)=0

    在这种情况下,该公式将对空行返回TRUE,对非空行返回FALSE。

    有了这个公式,执行这些步骤就可以删除空行。

    1. 选择标题行中的任何单元格,并点击 排序 & 筛选 > 过滤器 关于 首页 选项卡,在 格式 这将为所有标题单元格添加过滤下拉箭头。
    2. 点击公式列标题中的箭头,取消勾选(全选),选择 空白 并点击 认可 :
    3. 选择所有被过滤的行,为此,点击第一个被过滤行的第一个单元格,然后按Ctrl + Shift + End键,将选择范围扩大到最后一个被过滤行的最后一个单元。
    4. 右键点击选区,选择 删除行 从上下文菜单中选择,然后确认你真的想删除整个行。
    5. 通过按Ctrl + Shift + L删除过滤器。 或点击 首页 标签> 排序 & 筛选 > 过滤器 .
    6. 删除带有公式的那一列,因为你不再需要它了。

    就这样!结果,我们有了一个干净的表格,没有空行,但所有的信息都被保留下来。

    提示:你可以不删除空行,而是 复制非空行 要做到这一点,需要过滤 "非空白 "行,选择它们并按Ctrl + C复制。 然后切换到另一个工作表,选择目标区域的左上角单元格,按Ctrl + V粘贴。

    如何用Power Query删除Excel中的空行

    在Excel 2016和Excel 2019中,还有一种删除空行的方法--通过使用Power Query功能。 在Excel 2010和Excel 2013中,它可以作为一个插件下载。

    重要提示!这种方法在工作中要注意以下几点:Power Query将源数据转换为Excel表格,并改变格式,如填充颜色、边框和一些数字格式。 如果原始数据的格式对你很重要,那么你最好选择一些其他方法来删除Excel中的空白行。

    1. 选择你要删除空行的范围。
    2. 转到 数据 标签> 获取& 转化 组,并点击 从表/范围 这将把你的表加载到Power Query Editor。
    3. 关于 首页 在Power Query Editor的标签上,点击 移除行数 > 删除空白行 .
    4. 点击 关闭 & 载入 这将把生成的表格加载到一个新的工作表中,并关闭查询编辑器。

    在这些操作的结果中,我得到了以下没有空行的表格,但有几个讨厌的变化--货币格式丢失,日期以默认格式而不是自定义格式显示。

    如果某一列的单元格是空白的,如何删除行?

    在本教程的开头,我们警告你不要通过选择空白来删除空行。 然而,如果你想根据以下内容删除行,这个方法就很方便了 特定列中的空白 .

    作为一个例子,让我们删除所有A列的单元格为空的行。

    1. 选择关键列,在我们的例子中是A列。
    2. 关于 首页 标签,点击 查找& 选择 > 转到专题 或按F5键并点击 特别... 按钮。
    3. 转到专题 对话框,选择 空白 并点击 认可 这将选择A列中所用范围内的空白单元格。
    4. 在任何选定的单元格上点击右键,选择 删除... 从上下文菜单中选择。
    5. 删除 对话框,选择 整行都是 并单击 "确定"。

    完成了!A列中没有数值的行已经不存在了。

    通过过滤关键列中的空白,也可以达到同样的效果。

    如何删除数据下面的多余行

    有时,看起来完全空白的行可能实际上包含一些格式或不可打印的字符。 要检查有数据的最后一个单元格是否真的是工作表中最后使用的单元格,请按Ctrl + End 。 如果这让你看到数据下面有一个视觉上的空行,就Excel而言,该行不是空白的。 要删除这样的行,请做以下工作。

    1. 点击你的数据下面的第一个空白行的标题来选择它。
    2. 按Ctrl + Shift + End 。 这将选择所有包含任何内容的行,包括格式、空格和非打印字符。
    3. 右键单击所选内容并选择 删除... > 整行都是。

    如果你有一个相对较小的数据集,你可能想去掉数据下面的所有空白行,例如,为了使滚动更容易。 虽然,在Excel中没有办法删除未使用的行,但没有什么可以阻止你 隐藏 这里是怎么做的。

    1. 点击最后一行的标题,选择该行下面有数据的一行。
    2. 按Ctrl + Shift + 向下箭头,将选择范围扩大到工作表的最后一行。
    3. 按Ctrl + 9来隐藏所选行。 或右键单击所选内容,然后单击 隐藏 .

    取消隐藏行数 ,按Ctrl + A选择整个工作表,然后按Ctrl + Shift + 9使所有线条再次可见。

    以类似的方式,你可以隐藏数据右侧未使用的空白列。 详细步骤,请参见《在Excel中隐藏未使用的行,以便只有工作区域可见》。

    在Excel中删除空行的最快方法

    在阅读前面的例子时,不觉得我们是在用大锤敲打坚果吗? 在这里,在Ablebits,我们宁愿不使事情变得比它们需要的更复杂。 所以,我们更进一步,创建了一个两键式的路线来删除Excel中的空行。

    在你的缎带上添加了终极套件后,你可以这样做 删除所有空行 在一个工作表中。

    1. 关于 Ablebits工具 选项卡,在 转型 组,点击 删除空白 > 空行 :
    2. 该插件将通知你,所有的空行将从活动工作表中删除,并要求你确认。 点击确定,一会儿,所有的空行将被消除。

    如下面的截图所示,我们只删除了 绝对空行 没有一个单元格有数据的。

    要了解我们的Excel终极套件所包含的更多令人敬畏的功能,欢迎你下载试用版。

    我感谢你的阅读,希望下周在我们的博客上见到你

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.