繁体   English   中英

在 Excel VBA 中删除一行

[英]Delete a row in 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中的整行和列表框中的项目。 它可以从列表框中删除该项目,但我也不知道如何删除该行

Chris Nielsen 的解决方案很简单,而且效果很好。 一个稍微短一点的选择是......

ws.Rows(Rand).Delete

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

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

ws.Rows(Rand) = ""

...在初始循环中。 然后我使用 Sort 函数将这些行推到数据的底部。 这样做的主要原因是因为删除单行可能是一个非常缓慢的过程(如果您要删除 >100)。 根据罗伯特·伊尔布林克 (Robert Ilbrink) 的评论,它还可以确保不会遗漏任何内容

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

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

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

改变你的线路

ws.Range(Rand, 1).EntireRow.Delete

ws.Cells(Rand, 1).EntireRow.Delete 

更好的是,使用 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 rDel is nothing then
         set rDel = union(rng,rDel)
      else
         set rDel = rng
      end if
   end if
 next
 
 rDel.entirerow.delete

这样你就不必担心排序或东西在底部。

像这样的事情会做到:

Rows("12:12").Select
Selection.Delete

所以在你的代码中它看起来像这样:

Rows(CStr(rand) & ":" & CStr(rand)).Select
Selection.Delete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM