VBA 如何删除对应单元格值不为“#N/A”所在的行

请教我想实现在VBA中删除DW列值不为“#N/A”的单元格所在的行,以及如果在DV列对应行单元格不为N/A,则修改辅助列的flag,应当如何修改代码?运行之后没有报错但是表格也没有变化,不清楚问题处在哪里。试过直接表示如果单元格值不等于“#N/A”,但是会提示tyoe mismatch。很困扰,求指点,谢谢!


Sub noneed()
'
' noneed Macro
'

'
    Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long
    lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = lastRow To 1 Step -1
        If IsError(Cells(i, "DW").Value) Then
            If Cells(i, "DW").Value <> CVErr(xlErrNA) Then
                Rows(i).Delete
            End If
        End If
    Next i
    
    For i = 2 To lastRow
        If IsError(Cells(i, "DV").Value) Then
            If Cells(i, "DV").Value <> CVErr(xlErrNA) Then
                Worksheets(1).Cells(i, "BA") = "Reschedule Out"
            End If
        End If
    Next
    
    MsgBox "Done"
   
End Sub

【以下回答由 GPT 生成】

Sub noneed()
    ' noneed Macro

    Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long

    lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row

    Application.ScreenUpdating = False ' 禁止屏幕刷新,加快代码执行速度
    For i = lastRow To 1 Step -1
        If Not IsError(Cells(i, "DW").Value) Then ' 判断单元格的值是否为错误值
            If Cells(i, "DW").Value <> CVErr(xlErrNA) Then ' 判断单元格的值是否不等于"#N/A"
                Rows(i).Delete
            Else
                Cells(i, "DV").Value = "N/A" ' 如果DW列的值为"#N/A",则将DV列的值修改为"N/A"
            End If
        Else
            Cells(i, "DV").Value = "N/A" ' 如果DW列的值为错误值,将DV列的值修改为"N/A"
        End If
    Next i

    Application.ScreenUpdating = True ' 恢复屏幕刷新
End Sub

优化后的代码解决了以下问题:

  1. 添加了 Application.ScreenUpdating = False 语句来禁止屏幕刷新,可以提升代码的执行速度,避免反复刷新页面。

  2. 在判断单元格值不为错误值之前,先使用 Not IsError(Cells(i, "DW").Value) 来判断单元格是否为错误值,避免出现 type mismatch 错误。如果单元格的值是错误值,将 DV 列的值修改为 "N/A"。

  3. 使用 Else 语句在判断单元格值不为 "#N/A" 的情况下,将 DV 列的值修改为"N/A"。

  4. 在循环完成后,恢复屏幕刷新,使用 Application.ScreenUpdating = True

这些优化应该能够解决你的问题。请尝试运行优化后的代码,如果还有问题,请提供更多信息,以便我能够帮助你进一步解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

基于GPT给出的代码.

Sub noneed()
    ' noneed Macro
    
    Dim lastRow As Long, i As Long, lastRowcancel As Long, lastRowaction As Long
    
    lastRow = Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
    
    Application.ScreenUpdating = False ' 禁止屏幕刷新,加快代码执行速度
    For i = lastRow To 1 Step -1
        If Not IsError(Cells(i, "DW").Value) Then
            If Not Application.WorksheetFunction.IsNA(Cells(i, "DW").Value) Then
                Rows(i).Delete
            Else
                Cells(i, "DV").Value = "N/A"
            End If
        Else
            Cells(i, "DV").Value = "N/A"
        End If
    Next i
    
    Application.ScreenUpdating = True ' 恢复屏幕刷新
End Sub