【问题标题】:If any cells in column B contains string X, delete row and shift cells up如果 B 列中的任何单元格包含字符串 X,则删除行并将单元格上移
【发布时间】:2013-06-29 20:19:55
【问题描述】:

我在 excel 方面不是很有经验,不确定这是否可行,但我正在处理一个非常大的 excel 电子表格,并且 B 列中的一些单元格包含诸如 N/A 之类的值。

我想知道是否有一种方法可以创建一些条件语句来删除所有行,如果该行的 B 列中的单元格包含N/A,并在删除后向上移动单元格?

我非常感谢任何建议,因为这将为我节省大量时间。

非常感谢!

【问题讨论】:

标签: vba excel


【解决方案1】:

如果这些是#N/A(系统)错误,那么使用GoTo Special(常量,错误)可以直接进行:

Sub DeleteErrorRows()
    On Error Resume Next    'in case there are no errors in cells
    Range("B:B").SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
    On Error GoTo 0     'resume error handling
End Sub

我怀疑可以使用 Replace 将 'N/A' 替换为 '#N/A' 然后使用我的程序,尽管我没有对此进行测试。 添加是的,它应该可以工作:

Sub DeleteErrorRows()
    Range("B:B").Replace "N/A", "#N/A"
    On Error Resume Next    'in case there are no errors in cells
    Range("B:B").SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
    On Error GoTo 0     'resume error handling
End Sub

实际上,我认为这可以更普遍地应用,将一些单元格值替换为“#N/A”作为删除行的机制:)

【讨论】:

  • +1 如果单元格类型实际上是基于错误的,则很好的答案。因为它也可能是基于公式的考虑Range("B:B").SpecialCells(xlFormulas, 16).EntireRow.Delete
  • @brettdj 谢谢。在你的声明中应该是xlCellTypeFormulas——尽管这并不重要,因为xlFormulas 具有相同的值;)。澄清一下,Brett 声明中的 16 标识了导致错误的公式。
【解决方案2】:

自下而上工作,检查B 列中的值是否不适用,如果找到,您可以使用:

ActiveSheet.Cells(currentRow,1).EntireRow.Delete

【讨论】:

  • 感谢您的回复。如何使用它来创建条件语句来检查行中的列是否包含N/A
  • @AnchovyLegend 你有使用 VBA 的经验吗?只是想为你衡量我的答案
  • 另外,我想在哪里插入这段代码?抱歉,我对 excel 很陌生,不,我没有任何 VBA 经验...
  • @AnchovyLegend 啊啊啊好吧。这是一个很好的资源,可以帮助您入门:anthony-vba.kefra.com/vba/vbabasic1.htm
  • 这个问题不需要循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多