首页 文章

在Excel VBA中删除一行

提问于
浏览
35

我有这段代码从列表中找到项目的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 回答

  • 3

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

    ws.Rows(Rand).Delete
    

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

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

    ws.Rows(Rand) = ""
    

    ......在初始循环中 . 然后我使用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”粘贴到每行右侧的备用列中 . 然后,您将按该注释排序并消除它

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

  • 0

    更好的是,使用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
    

    这样您就不必担心排序或底层的事情 .

  • 4

    改变你的路线

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

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

    像这样的东西会这样做:

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

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

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

相关问题