我有一个按列排序的大型 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/