我有这段代码从列表中找到项目的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中的整行和列表框中的项目 . 它可以从列表框中删除项目,但我不知道如何删除该行
4 回答
Chris Nielsen的解决方案很简单,效果很好 . 一个稍短的选择是......
...注意删除行时无需指定Shift,因为根据定义,它不可能向左移动
顺便说一下,我删除行的首选方法是使用...
......在初始循环中 . 然后我使用Sort函数将这些行推送到数据的底部 . 这样做的主要原因是删除单行可能是一个非常慢的过程(如果要删除> 100) . 根据Robert Ilbrink的评论,它也确保不会遗漏任何内容
您可以通过记录宏并减少代码来学习排序代码,如expert Excel video所示 . 我怀疑最新的方法(Range("A1:Z10").Sort Key1:= Range("A1"),Order1:= xlSortAscending / Descending,Header:= xlYes / No)只能在2007年之前的Excel版本中发现 . . 但是你可以随时减少2007/2010的等效代码
结合更多点...如果您的列表尚未按列排序并且您希望保留订单,则可以在行循环时将行号“Rand”粘贴到每行右侧的备用列中 . 然后,您将按该注释排序并消除它
如果数据行包含格式,您可能希望找到新数据范围的末尾并删除先前清除的行 . 这是为了保持文件大小 . 请注意,在过程结束时单个大型删除不会像删除单行那样损害代码的性能
更好的是,使用union来获取要删除的所有行,然后一次删除它们 . 行不必是连续的 .
这样您就不必担心排序或底层的事情 .
改变你的路线
至
像这样的东西会这样做:
所以在你的代码中它看起来像这样: