当值以加号结尾('+')时删除Excellogging

我们有一个空白的工作簿,我希望用户能够将参考数字列表粘贴到A列中。这些参考数字中的一部分最后会有一个“+”号。

Sub texter1() With Sheets("texter") ll = .UsedRange.SpecialCells(xlCellTypeLastCell).Row For i = 1 To ll If InStr(1, .Range("a" & i).Value, "+", 1) Then .Range("b" & i).Formula = "=LEFT(A" & i & ", LEN(A" & i & ")-1)" .Range("c" & i).Value = Sheets("texter").Range("b" & i).Value .Range("d" & i).Formula = "=VLOOKUP($c" & i & ", _ [Current_Master.xlsm]Master!$A$3:$BB$20000,14,FALSE)" .Range("e" & i).Formula = "=VLOOKUP($c" & i & ", _ [Current_Master.xlsm]Master!$A$3:$BB$20000,15,FALSE)" Else Cells(i, "a").EntireRow.Delete End If Next i End With End Sub 

我想参考数字没有“+”有整个行被删除。 带“+”的参考号码正常工作。

这似乎工作,但必须运行多次,它删除所有行没有“+”,我不明白为什么。 请帮忙

谢谢

只要影响迭代,就不能删除循环中的行。 想象一下:你有4行; 第二行符合条件并被删除; 在下一次迭代中,计数器是3,但是行号3现在是第四行(当你删除一行时,所有下面的行都会上移一个位置)。 因此,第3行不会被分析。 因此解决scheme很简单:

 Cells(i, "a").EntireRow.Clear() 

如果你想实际删除整行,你必须在主循环之外进行。 例如:将所有要删除的行存储在一个数组中,并在完成主循环后立即遍历这个数组。

另一种方法是按照相反的顺序(从最大行到最小行)在主循环中执行迭代,尽pipe这个选项并不总是适用的(不确定是否在你的情况下),并可能引发进一步的问题。 上面的两个选项已经足够好了,我已经提到了这个最后的select,就像值得一提的东西一样。

—更新

要删除主循环后面的行,你可以在这些行上使用一些东西:

 'Declaration of variables ReDim allRows(ll + 1) As Long Dim allRowsCount As Long: allRowsCount = 0 

在你的主循环中,你存储了给定的行(现在你有Cells(i, "a").EntireRow.Delete ):

 For i = 1 To ll 'etc. else allRowsCount = allRowsCount + 1 allRows(allRowsCount) = i 

循环完成后,您将遍历所有存储的行(以相反的顺序)并删除它们:

 If (allRowsCount > 0) Then Dim curRow As Long: curRow = allRowsCount + 1 Do curRow = curRow - 1 .Rows(allRows(curRow)).Delete Loop While (curRow > 1) End If End With End Sub