vba - 删除行时无限循环?

标签 vba excel

我有一个按列排序的大型 csv 文件。现在我想删除另一列中不包含某个字符串的行。
到目前为止,我的代码如下所示:

Private Sub sortcsvfile(filename)
    Workbooks.OpenText filename, Origin:=65001, StartRow:=1 _
        , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, Comma:=False, _
        Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _
        3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10 _
        , 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), _
        Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array( _
        23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), _
        Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array( _
        36, 1), Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), _
        Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1)), _
        TrailingMinusNumbers:=True
    x = Cells(Rows.Count, 1).End(xlUp).Row
    Cells.Select
    ActiveWorkbook.Worksheets("merged").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("merged").Sort.SortFields.Add Key:=Range("D2:D" & x _
        ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("merged").Sort
        .SetRange Range("A1:AT" & x)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    For y = 0 To x
        If (Range("J2").Offset(y, 0) <> "condition") Then
            Range("J2").Offset(y, 0).EntireRow.Delete
            y = y - 1
        End If
    Next
End Sub

但是,在我要删除行的部分
For y = 0 To x
    If (Range("J2").Offset(y, 0) <> "condition") Then
        Range("J2").Offset(y, 0).EntireRow.Delete
        y = y - 1
    End If
Next

它似乎陷入了无限循环。这是为什么?
当我尝试 For y = 0 To LastRow它不会删除任何东西,如果我尝试一个绝对值(如 60)它可以完美地工作到第 60 行。

最佳答案

您需要在调整 for 循环计数器 (y) 的同时调整最后一行变量 (x)。您的代码当前尝试执行直到 y = x,但只有当所有行都满足指定的条件时它才会到达那里(因此不会删除任何内容)。

关于vba - 删除行时无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920598/

相关文章:

vba - 将多个 csv 文件编译成一个新的 csv 工作表

java - Excel,getStringCellValue 返回 float

mysql - 执行 SQL 查询,从 VBA 宏中的 Excel 表获取输入

excel - 使用 Excel 进行二维搜索

javascript - 如何格式化具有空行的 excel 文件以具有嵌套数组并匹配我需要呈现的 JSON 对象?

vba - 将文件复制到现有文件夹时出错

VBA Excel 将多个形状复制到剪贴板

excel - 通过VBA在Excel列表对象/表中添加/修改/删除计算列公式

vba - 在 VBA 中动态定义复选框的事件

vba - 需要VB让Excel在后台实时计算表格或范围