复制值并排除#N / A单元格

时间:2018-06-26 10:49:59

标签: excel vba

我有以下代码,它们从一个Excel工作表中复制单元格并将特殊值粘贴到文本文件中。

现在从要复制的工作表中,我有很多包含#N / A的单元格。

有人可以建议如何排除这些单元格吗?

谢谢

Private Sub CommandButton3_Click()
Dim i As Long
Dim wb As Workbook
Dim NewWB As Workbook
Dim saveFile As String
Dim WorkRng As Range


On Error Resume Next

i = Sheets(1).Range("W158:W" & Range("W158").End(xlDown).Row).Rows.Count

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Set wb = ActiveWorkbook
Set NewWB = Application.Workbooks.Add
Thispath = wb.path

wb.Sheets(2).Range("W158:W" & i + 5).Copy
NewWB.Worksheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
NewWB.SaveAs filename:=Thispath & "\textfile.txt", FileFormat:=xlText, 
CreateBackup:=False
NewWB.Close

Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

2 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是做一个基本的for循环,以遍历所有单元格并检查它们的值

For Each cell In activehseet.Range("W158:W" & i + 5)
    With cell
        If .Value = "#N\A" Then
            Exit Sub
        Else
            .Copy
            'code to paste here
        End With
    Next cell

不幸的是,这将花费相当长的时间才能运行,并且随着数据库的增大,它只会变得更长。我建议您丢失所有未在使用的行/列来加快速度。

但是,这可能是解决问题的最简单方法

有可能通过使用数组来实现,但是由于我不是数组操作的专家,所以我不确定。我敢肯定,比我聪明的人可以帮助您解决这一问题

希望这可以帮助您入门。好问题!

答案 1 :(得分:0)

您可以尝试将公式包装在IFERROR中,只需选择要包装的所有单元格并运行以下宏即可:

Sub WrapFormulasWIthIFERROR()
  Dim Cell As Range
  For Each Cell In Selection
    If Cell.HasFormula Then
      If Left(Cell.Formula, 9) <> "=IFERROR(" Then
        Cell.Formula = "=IFERROR(" & Mid(Cell.Formula, 2) & ","""")"
      End If
    End If
  Next
End Sub

如果单元格值为N / A,则结果将为空单元格。请注意不要选择整个工作表,因为它将永远运行。