【问题标题】:VBA delete rowsVBA 删除行
【发布时间】:2015-12-06 01:11:07
【问题描述】:

我正在尝试为 excel 编写一个 VBA 代码,该代码根据某些单元格的内容(都在同一列中)删除行。我的程序现在看起来像这样:

Sub removeCol()
Dim i As Integer
i = 1
Do While i < 10
If (Cells(i, 2).Text = "a") Then
Rows(i).Delete
i = i + 1
Else
i = i + 1
End If
Loop
End Sub

如果有任何提示,我将不胜感激!现在这个东西根本没有任何影响。

【问题讨论】:

  • 首先:你必须从列表的底部到顶部。想象一下,你在第 5 行和第 6 行有两个“a”。当你自上而下时,你会首先找到第 5 行并将其删除。因此,所有行都将移至顶部...因此第 6 行将成为新的第 5 行。但在下一个循环中,您检查新的第 6 行(在第一次删除之前是第 7 行)。看到了吗?
  • 第二 - 不是那么重要 - 最好使用 For-Next 以防循环中有计数器。
  • Here 有无数种方法可以做到这一点。

标签: vba excel


【解决方案1】:
Sub removeCol()
    Dim i As Integer

    For i = 10 To 1 Step -1
        If Cells(i, 2) = "a" Then
            Rows(i).Delete
        End If
    Next
End Sub

【讨论】:

  • 谢谢!我不确定我是否正确地顶了你的帖子,但这非常有用
  • 您不妨将LCaseIf LCase(Cells(i, 2).Value2) = "a" Then 进行比较。它目前区分大小写。
【解决方案2】:

其中一种变体是:

Sub test()
    Dim i&, x&
    i = [B:B].Cells.Find("*", , , xlByRows, , xlPrevious).Row 'get last row in "B" column
    For x = i To 1 Step -1
        If LCase(Cells(x, 2).Value2) = "a" Then Rows(x).Delete 'Lcase to remove case sensivity, due to "a" not equal to "A"
    Next x
End Sub

如果你想使用 contains 方法检查单元格内容,那么你可以使用这个:

Sub test2()
    Dim i&, x&
    i = [B:B].Cells.Find("*", , , xlByRows, , xlPrevious).Row
    For x = i To 1 Step -1
        If LCase(Cells(x, 2).Value2) Like "*a*" Then Rows(x).Delete
    Next x
End Sub

或者这个:

Sub test3()
    Dim i&, x&
    i = [B:B].Cells.Find("*", , , xlByRows, , xlPrevious).Row
    For x = i To 1 Step -1
        If InStr(1, Cells(x, 2).Value2, "a", vbTextCompare) > 0 Then Rows(x).Delete
    Next x
End Sub

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 2018-02-21
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多