【问题标题】:Excel For Loop VBA Macro not workingExcel For Loop VBA 宏不起作用
【发布时间】:2012-11-13 15:50:14
【问题描述】:

我有一个 2 列的 Excel 电子表格,最后一行是 287983。在 A 列中有数字,如果单元格没有数字 NaN 则放置在那里。在 B 列中有日期。我正在尝试使用以下宏来删除 A 列中单元格具有NaN 的所有行:

Sub Rowdel()
    Dim i As Long
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) = "NaN" Then Cells(i, 1).EntireRow.Delete
    Next i
End Sub

但是,当我运行上述代码时,NaN 单元格仍然存在。谁能建议为什么代码不起作用?

【问题讨论】:

  • 您的代码对我有用。您是否需要使用工作表来限定单元格。例如Worksheets("Sheet1").Cells(Rows.Count, 1)?
  • 这对我来说似乎很好用。一个潜在的问题可能是您的“NaN”单元格包含“NaN”以外的其他内容(不同的大小写、不同的基础数据类型等)。尝试在循环中添加Debug.Print Cells(i, 1) 并验证您得到的确实是“NaN”。
  • 另一个建议是,在运行此代码时,右侧工作表未处于活动状态。此代码将只查看现在的活动工作表。所以添加一个正确的工作表参考sheetx.Cells(i,...
  • 假设问题不是已经建议的工作表参考,请尝试Trim(Lcase(Cells(i,1))) = "nan"。或使用StrComp()。有时字符串比较可能会很容易出错。

标签: vba excel


【解决方案1】:

确保此代码引用了正确的工作表。您可能在错误的工作表上运行代码,该工作表在 A 列中不包含 NaN,因此不会导致代码运行的任何删除或其他可见迹象。

您可以尝试使用以下(仅调试)版本来调试此代码:

Sub Rowdel()
    Dim i As Long
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        Cells(i, 1).Select
        If Cells(i, 1) = "NaN" Then Cells(i, 1).EntireRow.Delete
    Next i
End Sub

在 Excel VBA 窗口中,使用 F8 执行 sub,这将允许您单步执行代码并检查您引用的工作表。

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多