如何在Excel中删除多行

如何在Excel中删除多行

按照这个终极 Excel 教程来学习如何在 Excel 中删除多行。

通常,您需要从 Excel 工作表中删除不必要的、空白的和错误的行,以使数据集井然有序、干净,并适合进一步的分析目的。

在 Excel 中,有很多方法可以删除此类行。下面介绍针对特定场景使用手动、半自动和全自动方法删除行的各种技术。让我们深入研究一下!

推荐:YITH WooCommerce Frequently Bought Together

使用手动方法

如果您的数据集很小,这是从 Excel 数据集中删除多个冗余行的最佳方法。

如何在Excel中删除多行
点击行号

单击一系列多行中需要删除的第一个行号。

选择要删除的所有其他行
选择要删除的所有其他行

按下Ctrl键。

现在,选择要删除的其余行号。

右键单击上下文菜单
右键单击上下文菜单

右键单击任意选定的行号,然后单击上下文菜单中的“删除”选项。

使用删除工具

Excel 桌面应用程序的“主页”选项卡中单元格命令块的“删除”工具允许您使用“删除工作表行”命令手动删除行。

选择多行
选择多行

要使用此命令,请选择要从工作表中删除的多个行范围。

单击单元格命令块中的删除下拉菜单并选择删除工作表行

使用删除工作表行删除多行
使用删除工作表行删除多行

Excel 将立即删除选定的行。

使用键盘快捷键

对于小型数据集,这是在 Excel 中删除多行的最快方法。

选择行并按热键
选择行并按热键

突出显示要删除的行后,按Ctrl+minus sign (-)删除所有选定的行。

使用热键删除行
使用热键删除行

Excel 将删除这些行并自动突出显示下一组行。

推荐:3种最佳Windows第三方数据恢复工具

使用查找和替换工具

假设您想要根据特定的单元格值、文本字符串等删除多行。在这种情况下,您可以使用查找和替换工具快速定位并删除目标行,而无需用肉眼手动扫描整个数据集。

示例数据集
示例数据集

例如,在上面的数据集中,您需要删除所有包含文本字符串North America 的行。

查找搜索查询
查找搜索查询

在目标工作表上按+调出查找和替换工具。CtrlF

单击“查找内容”框并输入查询字符串,如“North America”

单击“搜索”下拉菜单并选择“按行”

单击“查找范围”下拉菜单并选择“值”

点击“查找全部”按钮。

选择所有搜索结果
选择所有搜索结果

您将看到搜索结果列表。选择列表中的所有条目。

Excel 将突出显示包含搜索文本字符串的特定单元格。

右键单击选择单元格
右键单击选定的单元格

右键单击任意选定的单元格,如屏幕截图所示,然后单击上下文菜单中的“删除” 。

选择整行
选择整行

现在您将看到“删除”对话框。

选择“整行”单选按钮并点击“确定”按钮即可删除数据集中的多行。

使用排序和过滤工具

Microsoft Excel 中的“排序和筛选”工具允许您根据单元格值、单元格颜色或空白单元格的存在来筛选选定的数据集。

因此,如果您需要根据单元格值条件或空白单元格删除多行,那么这是中等数据集应遵循的最佳技术。

激活排序和过滤
激活排序和过滤

导航到目标工作表并选择数据集的标题行。

现在,按CtrlShift+L显示所有列标题的“排序和过滤”下拉箭头。

取消选择全部
取消选择全部

在实践数据集中,如上所示,假设您想按产品类别列删除行。

点击产品类别下拉箭头

取消选中“全选”复选框,并选中您想要过滤数据集的产品。

按图书筛选
按图书筛选

假设您想按书籍进行过滤。

一旦您选择此过滤器,Excel 就会隐藏产品类别列中所有取消选择的值。

删除行
删除行

现在,按照本文前面讨论的第一种方法中提到的步骤删除已过滤的行。

已禁用排序和过滤
已禁用排序和过滤

现在,按CtrlShift+禁用过滤并显示整个数据集减去包含书籍作为产品类别的L行。

使用“转到特殊命令”

如果您想知道如何在 Excel 中删除多个空白行,而无需编写一行代码或构建复杂的公式,则可以使用“转到特殊”工具。

让我们考虑一下,您想要删除上述数据集中的所有空白行。

调出“转到”对话框
调出“转到”对话框

选择整个数据集并按Ctrl+G调出转到对话框

单击右下角的“特殊”按钮即可访问“转到特殊”菜单。

在“转至特殊字符”中选择空白
在“转至特殊字符”中选择空白

选择“空白”单选按钮并单击“确定”

按快捷键删除行
按快捷键删除行

现在您应该看到 Excel 已选择所选单元格范围内的所有空白行。

同时按下Ctrl+-键可以立即删除这些空白行。

在“删除”对话框中选择整行
在删除对话框中选择整行

“删除”对话框中,选择“整行”

在 Excel 中删除多个空行
在 Excel 中删除多个空行

上面的截图显示您已使用“转到特殊”功能删除了 Excel 中的多个空白行。

使用 Power Query

假设您正在将外部数据库导入 Excel。但是,单个 Excel 工作表无法容纳整个数据集,因为行数和列数分别超过 1,048,576 和 16,384。

📒阅读更多Excel 可以处理多少行?

但是,您已经注意到,如果删除空白行、不完整行和带有错误消息的单元格,则可以减小数据库大小以将其容纳在一个工作表中。Power Query可以帮您解决这个问题。

您可以在Power Query上加载一个巨大的数据库,清理它,然后将其导出到 Excel 工作表以进行进一步的数据分析。

使用此方法删除多行的方法如下:

来自 SQL Server 数据库
来自 SQL Server 数据库

转到“数据”选项卡并单击“获取数据”命令。

在上下文菜单上,将光标悬停在适当的数据导入工具上,如从文件从数据库从 Azure等。

在溢出菜单上,单击数据库源,如来自 SQL Server 数据库来自 Oracle 数据库等。

按照屏幕上的说明完成数据库导入过程。

将数据集导入 Power Query
将数据集导入 Power Query

您应该在Power Query 编辑器工具中看到您的数据库,如上所示。

减少行选项
减少行选项

转到“主页”选项卡中的“减少行”命令块,然后单击“删除行”下拉菜单。

在这里,您将找到以下选项,使用以下适合不同场景的工具来合理化数据库的行数:

  • 删除顶行
  • 删除底行
  • 删除交替行
  • 删除重复项
  • 删除空白行
  • 删除错误

如果您的情况符合,您可以使用上述任何选项。

取消勾选两项
取消勾选两项

我使用过滤工具从Power Query 编辑器中的产品类别列中删除了电子产品服装

我点击了“产品类别” 下拉菜单,并取消选中“电子产品”“服装”复选框

然后,我通过单击“确定”命令应用了过滤规则。

关闭并加载至
关闭并加载至

我使用文件菜单中的关闭并加载到命令将过滤后的数据库导出到新的工作表。

导入数据
导入数据

在导入数据对话框中,我选择了新工作表选项并单击了确定

使用 Power Query 删除行

上面是在 Power Query 中删除多行后的数据集的屏幕截图。

使用 Excel VBA

如果您发现到目前为止解释的方法需要手动操作且耗时,则可以使用Excel VBA自动执行 Excel 中删除多行任务的 90% 以上。

无论你是否知道 Excel VBA 的工作原理,我都会提供创建 VBA 宏所需的代码。然后,你可以按照简单的说明运行这些宏,在不到一分钟的时间内完成 Excel 中长达一小时的任务。

首先,阅读以下 Excel 教程,了解从 VBA 脚本创建 VBA 宏的快速步骤。

推荐:在Microsoft Excel中运行VBA宏的15种方法

现在尝试使用特定的 VBA 脚本来自动执行在 Excel 中删除多行的不同方法。

根据单元格值删除行

您可以使用以下 VBA 脚本设置 VBA 宏,该宏将根据您的自定义输入删除多行。

VBA 脚本 1
Sub DeleteRowsByValue()

  Dim colNumber As Integer
  Dim cellValue As String
  Dim lastRow As Long
  Dim currentRow As Long
  Dim sheetName As String

  ' Get sheet name from user input
  sheetName = InputBox("Enter the name of the sheet to search:")
  If IsEmpty(sheetName) Then Exit Sub ' Exit if user cancels

  ' Get column number from user input
  colNumber = InputBox("Enter the column number to search (e.g., 2 for column B):")
  If IsEmpty(colNumber) Then Exit Sub ' Exit if user cancels

  ' Get cell value to match from user input
  cellValue = InputBox("Enter the value to match in the selected column:")
  If IsEmpty(cellValue) Then Exit Sub ' Exit if user cancels

  ' Get the worksheet object based on user input
  Dim ws As Worksheet
  Set ws = ThisWorkbook.Worksheets(sheetName) ' Set the worksheet based on entered name

  ' Error handling for invalid sheet name
  On Error Resume Next
  If ws Is Nothing Then ' Check if worksheet exists
    MsgBox "Sheet '" & sheetName & "' not found!", vbExclamation
    Exit Sub ' Exit if sheet not found
  End If
  On Error GoTo 0 ' Resume normal error handling

  ' Get the last row of data
  lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' Find last row with data in column A

  ' Loop through rows from bottom to top to avoid shifting rows during deletion
  For currentRow = lastRow To 2 Step -1
    If ws.Cells(currentRow, colNumber).Value = cellValue Then ' Use the worksheet object
      ws.Rows(currentRow).Delete Shift:=xlUp ' Delete row and shift remaining rows up
    End If
  Next currentRow

  MsgBox "Matching rows deleted successfully!", vbInformation

End Sub

例如,您想删除上述数据集中E 列2中包含值的所有行。

宏对话框
宏对话框

Alt+F8调出对话框。

选择DeleteRowsByValue宏并点击运行

选择活动工作表
选择活动工作表

运行脚本后,Excel 会要求您输入目标工作表。输入工作表名称。

输入列号
输入列号

然后,您必须输入目标列的数值。例如,如果目标列是E,则输入数值5

输入单元格值
输入单元格值

2最后,以数字形式输入单元格值,例如本练习中的数字。

如何使用 VBA 删除 Excel 中的多行
如何使用 VBA 删除 Excel 中的多行

一旦执行,Excel 就会从示例数据集中删除包含 E 列值的2所有

删除多个空白行

如果您使用以下脚本创建 VBA 宏,则在执行宏时,您将立即删除工作表表格中的所有空白行。

VBA 脚本 2
Sub DeleteBlankRowsInAllTables()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim tblRow As ListRow
    Dim col As ListColumn
    Dim i As Long
    
    ' Loop through each worksheet in the current workbook
    For Each ws In ThisWorkbook.Worksheets
        ' Check if the worksheet has any tables (ListObjects)
        If ws.ListObjects.Count > 0 Then
            For Each tbl In ws.ListObjects
                ' Loop through each row in the table
                For i = tbl.ListRows.Count To 1 Step -1
                    Set tblRow = tbl.ListRows(i)
                    ' Check if all cells in the row are blank
                    Dim isBlank As Boolean
                    isBlank = True
                    For Each col In tbl.ListColumns
                        If Not IsEmpty(tblRow.Range(col.Index)) Then
                            isBlank = False
                            Exit For
                        End If
                    Next col
                    
                    ' If all cells in the row are blank, delete the row
                    If isBlank Then
                        tblRow.Delete
                    End If
                Next i
            Next tbl
        End If
    Next ws
End Sub
运行 VBA 之前的示例表
运行 VBA 之前的示例表

在运行脚本之前,我的数据集看起来像上面的屏幕截图。

运行脚本后的示例数据集
运行脚本后的示例数据集

运行此脚本后,我的 Excel 表格如上所示。

根据日期范围删除行

假设您的 Excel 工作表中有一列包含许多数据条目。您想通过按行删除一些过时的条目来重组数据集。

在这种情况下,使用以下 VBA 脚本来设置宏:

VBA 脚本 3
Sub DeleteRowsByDateRange()
    Dim ws As Worksheet
    Dim colName As String
    Dim dateRange As String
    Dim startDate As Date
    Dim endDate As Date
    Dim cell As Range
    Dim lastRow As Long
    Dim i As Long
    
    ' Prompt for worksheet name
    On Error Resume Next
    Set ws = Worksheets(InputBox("Enter the worksheet name:"))
    On Error GoTo 0
    
    If ws Is Nothing Then
        MsgBox "Worksheet not found. Please enter a valid worksheet name.", vbExclamation
        Exit Sub
    End If
    
    ' Prompt for column name or number containing date entries
    colName = InputBox("Enter the column name or number (e.g., A or 1) with date entries:")
    
    ' Prompt for date range
    dateRange = InputBox("Enter the date range (e.g., 1/1/2024 to 1/2/2024):")
    If InStr(dateRange, " to ") > 0 Then
        startDate = CDate(Split(dateRange, " to ")(0))
        endDate = CDate(Split(dateRange, " to ")(1))
    Else
        MsgBox "Invalid date range format. Please use 'start date to end date'.", vbExclamation
        Exit Sub
    End If
    
    ' Find last row in the specified column
    lastRow = ws.Cells(ws.Rows.Count, colName).End(xlUp).Row
    
    ' Loop through rows and delete if date falls outside the range
    For i = lastRow To 2 Step -1
        Set cell = ws.Cells(i, colName)
        If IsDate(cell.Value) Then
            If cell.Value >= startDate And cell.Value 

一旦执行此 VBA,Excel 将使用以下可视输入框指导您按日期值完成多行的删除过程:

输入工作表名称
输入工作表名称
  • 输入用于在活动工作簿上进行数据操作的工作表名称。
输入包含日期条目的列标识符
输入包含日期条目的列标识符
  • 输入包含日期条目的列标识符。对于 B 列,输入 B 或 2。
输入日期范围
输入日期范围
  • 输入从整个数据集中删除行的日期范围。或者,您可以输入以逗号分隔的日期。
使用日期变量删除 Excel 中的多行
使用日期变量删除 Excel 中的多行
  • 如果该过程成功,将会弹出一个确认对话框。

根据文本字符串输入删除行

假设您的 Excel 工作表中有某些文本条目。您想立即删除这些单元格以及行。然后,使用以下 VBA 脚本:

VBA 脚本 4
Sub DeleteRowsBasedOnText()
    Dim ws As Worksheet
    Dim targetRange As Range
    Dim searchString As String
    Dim cell As Range

    ' Step 1: Select the worksheet
    On Error Resume Next
    Set ws = Worksheets(InputBox("Enter the worksheet name:"))
    On Error GoTo 0

    If ws Is Nothing Then
        MsgBox "Worksheet not found. Please enter a valid name.", vbExclamation
        Exit Sub
    End If

    ' Step 2: Select the target cell range
    On Error Resume Next
    Set targetRange = Application.InputBox("Select the target cell range:", Type:=8)
    On Error GoTo 0

    If targetRange Is Nothing Then
        MsgBox "No valid range selected. Please try again.", vbExclamation
        Exit Sub
    End If

    ' Step 3: Enter the text string to look for
    searchString = InputBox("Enter the text string to search for:")

    ' Loop through each cell in the target range
    For Each cell In targetRange
        If InStr(1, CStr(cell.value), searchString, vbTextCompare) > 0 Then
            cell.EntireRow.Delete
        End If
    Next cell

    MsgBox "Rows containing '" & searchString & "' have been deleted.", vbInformation
End Sub

当您执行DeleteRowsBasedOnText宏时,Excel 将要求您按照以下提示进行操作:

供货单名称
供货单名称
  • 在提示中输入目标工作表名称。
选择输入单元格范围
选择输入单元格范围
  • 选择工作表中的目标单元格范围。
输入文本字符串
输入文本字符串
  • 输入要删除多行的文本字符串。
通过文本字符串删除多行
通过文本字符串删除多行

当 Excel VBA 操作结束时,您将看到如上所示的确认对话框。

⚠️警告:在尝试上述任何 VBA 宏进行自动化之前,请创建工作簿的副本。

推荐:如何在Mac中激活Microsoft Office 365订阅

使用 Office 脚本

以下Office 脚本代码将允许您删除活动工作表中一个或多个表中的多个空白行。

运行 Office 脚本删除 Excel 中的多个空行
运行 Office 脚本删除 Excel 中的多个空行

要使用此脚本,请转到“自动化”选项卡并单击“新建脚本”命令。

Office Scripts代码编辑器界面将显示在右侧。

在那里,删除现有脚本(如果有),然后粘贴以下脚本:

function main(workbook: ExcelScript.Workbook) {
    let allTables = workbook.getTables();

    allTables.forEach(table => {
        let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
        let rowsToDelete: number[] = [];
        let rowIndex: number = 0;

        tableValues.forEach(row => {
            if (row.join("") === "") {
                rowsToDelete.push(rowIndex);
            }
            rowIndex++;
        });

        for (let index = rowsToDelete.length - 1; index > -1; index--) {
            table.deleteRowsAt(rowsToDelete[index]);
        }
    });
}

单击“保存”按钮保存代码以供将来使用。

现在,点击“运行”按钮来执行脚本。

运行 Office 脚本以删除 Excel 中的多行
运行 Office 脚本以删除 Excel 中的多行

该代码将快速删除 Excel 中的多个空行。

请注意,该代码将对活动 Excel 工作表的所有表格对象起作用。

⚠️警告:使用 Office 脚本代码对工作表所做的所有更改都是不可逆的。您无法使用Excel 撤消功能将工作表恢复到之前的状态。因此,在从“自动化”选项卡运行任何脚本之前,请先创建工作簿的备份。

结论

现在您知道如何在 Excel 中删除多行。在小型到中型工作表中使用基于 Excel 用户界面的方法,如“删除”命令、“查找和替换”工具等。

如果您的数据集很大,您可以尝试Go To SpecialExcel VBAOffice Scripts

从第三方来源将大型数据库导入 Excel 时,使用Power Query清理和优化数据。

尝试这些在 Excel 中删除行的方法后,请在下面进行评论以分享您的经验。

推荐:如何在Safari中查看网页源CSS和HTML


发表评论