如何在Excel中删除多行
按照这个终极 Excel 教程来学习如何在 Excel 中删除多行。
通常,您需要从 Excel 工作表中删除不必要的、空白的和错误的行,以使数据集井然有序、干净,并适合进一步的分析目的。
在 Excel 中,有很多方法可以删除此类行。下面介绍针对特定场景使用手动、半自动和全自动方法删除行的各种技术。让我们深入研究一下!
推荐:YITH WooCommerce Frequently Bought Together
使用手动方法
如果您的数据集很小,这是从 Excel 数据集中删除多个冗余行的最佳方法。
单击一系列多行中需要删除的第一个行号。
按下Ctrl键。
现在,选择要删除的其余行号。
右键单击任意选定的行号,然后单击上下文菜单中的“删除”选项。
使用删除工具
Excel 桌面应用程序的“主页”选项卡中单元格命令块的“删除”工具允许您使用“删除工作表行”命令手动删除行。
要使用此命令,请选择要从工作表中删除的多个行范围。
单击单元格命令块中的删除下拉菜单并选择删除工作表行。
Excel 将立即删除选定的行。
使用键盘快捷键
对于小型数据集,这是在 Excel 中删除多行的最快方法。
突出显示要删除的行后,按Ctrl+minus sign (-)删除所有选定的行。
Excel 将删除这些行并自动突出显示下一组行。
推荐:3种最佳Windows第三方数据恢复工具
使用查找和替换工具
假设您想要根据特定的单元格值、文本字符串等删除多行。在这种情况下,您可以使用查找和替换工具快速定位并删除目标行,而无需用肉眼手动扫描整个数据集。
例如,在上面的数据集中,您需要删除所有包含文本字符串North America 的行。
在目标工作表上按+调出查找和替换工具。CtrlF
单击“查找内容”框并输入查询字符串,如“North America”。
单击“搜索”下拉菜单并选择“按行”。
单击“查找范围”下拉菜单并选择“值”。
点击“查找全部”按钮。
您将看到搜索结果列表。选择列表中的所有条目。
Excel 将突出显示包含搜索文本字符串的特定单元格。
右键单击任意选定的单元格,如屏幕截图所示,然后单击上下文菜单中的“删除” 。
现在您将看到“删除”对话框。
选择“整行”单选按钮并点击“确定”按钮即可删除数据集中的多行。
使用排序和过滤工具
Microsoft Excel 中的“排序和筛选”工具允许您根据单元格值、单元格颜色或空白单元格的存在来筛选选定的数据集。
因此,如果您需要根据单元格值条件或空白单元格删除多行,那么这是中等数据集应遵循的最佳技术。
导航到目标工作表并选择数据集的标题行。
现在,按Ctrl+ Shift+L显示所有列标题的“排序和过滤”下拉箭头。
在实践数据集中,如上所示,假设您想按产品类别列删除行。
点击产品类别的下拉箭头。
取消选中“全选”复选框,并选中您想要过滤数据集的产品。
假设您想按书籍进行过滤。
一旦您选择此过滤器,Excel 就会隐藏产品类别列中所有取消选择的值。
现在,按照本文前面讨论的第一种方法中提到的步骤删除已过滤的行。
现在,按Ctrl+ Shift+禁用过滤并显示整个数据集减去包含书籍作为产品类别的L行。
使用“转到特殊命令”
如果您想知道如何在 Excel 中删除多个空白行,而无需编写一行代码或构建复杂的公式,则可以使用“转到特殊”工具。
让我们考虑一下,您想要删除上述数据集中的所有空白行。
选择整个数据集并按Ctrl+G调出转到对话框。
单击右下角的“特殊”按钮即可访问“转到特殊”菜单。
选择“空白”单选按钮并单击“确定”。
现在您应该看到 Excel 已选择所选单元格范围内的所有空白行。
同时按下Ctrl+-键可以立即删除这些空白行。
在“删除”对话框中,选择“整行”。
上面的截图显示您已使用“转到特殊”功能删除了 Excel 中的多个空白行。
使用 Power Query
假设您正在将外部数据库导入 Excel。但是,单个 Excel 工作表无法容纳整个数据集,因为行数和列数分别超过 1,048,576 和 16,384。
📒阅读更多:Excel 可以处理多少行?
但是,您已经注意到,如果删除空白行、不完整行和带有错误消息的单元格,则可以减小数据库大小以将其容纳在一个工作表中。Power Query可以帮您解决这个问题。
您可以在Power Query上加载一个巨大的数据库,清理它,然后将其导出到 Excel 工作表以进行进一步的数据分析。
使用此方法删除多行的方法如下:
转到“数据”选项卡并单击“获取数据”命令。
在上下文菜单上,将光标悬停在适当的数据导入工具上,如从文件、从数据库、从 Azure等。
在溢出菜单上,单击数据库源,如来自 SQL Server 数据库、来自 Oracle 数据库等。
按照屏幕上的说明完成数据库导入过程。
您应该在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 宏,该宏将根据您的自定义输入删除多行。
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
最后,以数字形式输入单元格值,例如本练习中的数字。
一旦执行,Excel 就会从示例数据集中删除包含 E 列值的2
所有行。
删除多个空白行
如果您使用以下脚本创建 VBA 宏,则在执行宏时,您将立即删除工作表表格中的所有空白行。
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
在运行脚本之前,我的数据集看起来像上面的屏幕截图。
运行此脚本后,我的 Excel 表格如上所示。
根据日期范围删除行
假设您的 Excel 工作表中有一列包含许多数据条目。您想通过按行删除一些过时的条目来重组数据集。
在这种情况下,使用以下 VBA 脚本来设置宏:
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 工作表中有某些文本条目。您想立即删除这些单元格以及行。然后,使用以下 VBA 脚本:
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 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]);
}
});
}
单击“保存”按钮保存代码以供将来使用。
现在,点击“运行”按钮来执行脚本。
该代码将快速删除 Excel 中的多个空行。
请注意,该代码将对活动 Excel 工作表的所有表格对象起作用。
⚠️警告:使用 Office 脚本代码对工作表所做的所有更改都是不可逆的。您无法使用Excel 撤消功能将工作表恢复到之前的状态。因此,在从“自动化”选项卡运行任何脚本之前,请先创建工作簿的备份。
结论
现在您知道如何在 Excel 中删除多行。在小型到中型工作表中使用基于 Excel 用户界面的方法,如“删除”命令、“查找和替换”工具等。
如果您的数据集很大,您可以尝试Go To Special、Excel VBA和Office Scripts。
从第三方来源将大型数据库导入 Excel 时,使用Power Query清理和优化数据。
尝试这些在 Excel 中删除行的方法后,请在下面进行评论以分享您的经验。