excel - 在 Excel VBA 中删除一行

标签 excel vba

我有这段代码,它从列表中查找项目的 Excel 行并从列表中删除该项目。我想要的...是同时删除 Excel 行。

代码在这里

Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")    
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
   If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
            ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
            gksluri.RemoveItem gksluri.ListIndex
            Exit Do
    End If
Rand = Rand + 1
Loop
End Sub

我添加 ws.Range(Rand,1).EntireRow.Delete 的地方是我想删除整行但我不知道该怎么做的地方。我想要什么...如果它在单元格中找到相同的值(例如我的列表中的某些选定项目),则能够删除 Excel 中的整行和列表框中的项目。它可以从列表框中删除该项目,但我也不知道如何删除该行

最佳答案

克里斯·尼尔森的解决方案很简单,而且效果很好。稍微短一点的选择是......

ws.Rows(Rand).Delete

...注意删除行时无需指定 Shift,因为根据定义,不可能向左移动

顺便说一句,我删除行的首选方法是使用...

ws.Rows(Rand) = ""

...在初始循环中。然后,我使用排序函数将这些行推到数据的底部。这样做的主要原因是删除单行可能是一个非常慢的过程(如果要删除>100)。它还确保按照 Robert Ilbrink 的评论不会遗漏任何内容

您可以通过录制宏并减少代码来学习排序代码,如expert Excel video中所示。 。我怀疑最简洁的方法 (Range("A1:Z10").Sort Key1:=Range("A1"), Order1:=xlSortAscending/Descending, Header:=xlYes/No) 只能在预发现2007 版本的 Excel...但您始终可以减少 2007/2010 等效代码

还有一点...如果您的列表尚未按列排序并且您希望保留顺序,则可以在循环时将行号“Rand”粘贴到每行右侧的备用列中。然后,您可以按该评论排序并将其删除

如果您的数据行包含格式,您可能希望找到新数据范围的末尾并删除之前清除的行。这是为了减小文件大小。请注意,过程末尾的单个大删除不会像删除单行那样损害代码的性能

关于excel - 在 Excel VBA 中删除一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851859/

相关文章:

excel - 复制过滤表

excel - VLOOKUP 不适用于通过 VBA 的所有行

vba - 使用vba从带有中文字符的文本文件中提取文本

php - 如何使用 PHP 将数据添加到现有的 Excel 文件?

vba - 关于在工作簿中搜索特定日期并在该日期之前设置预先通知?

vba - 运行此宏后Excel崩溃-空白错误报告

excel - 具有特定模式的字符串分隔公式

excel - 如何跨范围复制excel文件中的单元格格式?

excel - 使用 VBA 在 Excel 中创建每月选项卡

arrays - VBA展平分层数组