我有这段代码从列表中找到项目的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
Run Code Online (Sandbox Code Playgroud)
我在哪里添加了ws.Range(Rand,1).EntireRow.Delete是我要删除整行的地方,但我不知道该怎么做.我想要的...如果它在单元格中找到相同的值,就像在列表的某个选定项目中一样,以便能够删除excel中的整行和列表框中的项目.它可以从列表框中删除项目,但我不知道如何删除该行
小智 57
Chris Nielsen的解决方案很简单,效果很好.一个稍短的选择是......
ws.Rows(Rand).Delete
Run Code Online (Sandbox Code Playgroud)
...注意删除行时无需指定Shift,因为根据定义,它不可能向左移动
顺便说一下,我删除行的首选方法是使用...
ws.Rows(Rand) = ""
Run Code Online (Sandbox Code Playgroud)
......在初始循环中.然后我使用Sort函数将这些行推送到数据的底部.这样做的主要原因是删除单行可能是一个非常慢的过程(如果要删除> 100).根据Robert Ilbrink的评论,它也确保不会遗漏任何内容
您可以通过录制宏并减少代码来学习排序代码,如此专家Excel视频中所示.我怀疑最新的方法(范围("A1:Z10").排序Key1:=范围("A1"),Order1:= xlSortAscending/Descending,Header:= xlYes/No)只能在预先发现2007版Excel ...但您始终可以减少2007/2010等效代码
夫妇更多的积分......如果你的名单还没有被列排序,你希望保留的顺序,你可以在一个备用列坚持行号"兰德"到每一行的,你遍历的权利.然后,您将按该注释排序并消除它
如果数据行包含格式,您可能希望找到新数据范围的末尾并删除先前清除的行.这是为了保持文件大小.请注意,在过程结束时单个大型删除不会像删除单行那样损害代码的性能
改变你的线路
ws.Range(Rand, 1).EntireRow.Delete
Run Code Online (Sandbox Code Playgroud)
到
ws.Cells(Rand, 1).EntireRow.Delete
Run Code Online (Sandbox Code Playgroud)
小智 5
更好的是,使用union捕获要删除的所有行,然后一次将其全部删除。行不必是连续的。
dim rng as range
dim rDel as range
for each rng in {the range you're searching}
if {Conditions to be met} = true then
if not rng is nothing then
set rDel = union(rng,rDel)
else
set rDel = rng
end if
end if
next
rDel.entirerow.delete
Run Code Online (Sandbox Code Playgroud)
这样一来,您不必担心排序或底部的问题。
| 归档时间: |
|
| 查看次数: |
392413 次 |
| 最近记录: |