如果单元格值=“N / A”,则复制并粘贴值

我想复制和粘贴值的单元格范围,但只有当它们的值=“N / A”。 我想离开公式,因为他们在所有不是=“N / A”的单元格中。

在上下文中,我有数百个VLOOKUP。 例:

=IFERROR(VLOOKUP("L0"&MID(G$4,1,1)&"A0"&MID(G$4,1,1)&MID(G$4,3,2)&"-0"&$B6,Sheet1!$C:$D,2,FALSE),"N/A") 

这可能与VBA?

首先,你应该使用真正的错误值,而不是只看起来像错误的string。 其次,如果查找值没有find, VLOOKUP直接返回N/A错误,所以IFERROR包装器可以被分离。 所以公式

 =VLOOKUP("L0"&MID(G$4,1,1)&"A0"&MID(G$4,1,1)&MID(G$4,3,2)&"-0"&$B6,Sheet1!$C:$D,2,FALSE) 

就这样就足够了。

要用错误值replaceN/A结果,可以使用这个

 Sub Demo() Dim ws As Worksheet Dim rngSrc As Range Dim datV As Variant, datF As Variant Dim i As Long ' Get range to process by any means you choose ' For example Set ws = ActiveSheet With ws Set rngSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With ' Copy data to variant arrays for efficiency datV = rngSrc.Value datF = rngSrc.Formula ' replace erroring formulas For i = 1 To UBound(datV, 1) If IsError(datV(i, 1)) Then If datV(i, 1) = CVErr(xlErrNA) Then datF(i, 1) = CVErr(xlErrNA) End If End If Next ' return data from variant arrays to sheet rngSrc.Formula = datF End Sub 

如果您真的想使用string而不是真正的错误值,请调整If行以适应

而不是遍历一个范围内的所有单元格,你可以使用SpecialCells来缩短=NA()单元格的工作

这也打开了非VBA方法(如果只有错误单元格是NA ,即没有Div#/0

  1. 前面两种方法(手动和代码)处理的情况下,你只给NA细胞
  2. 第三个使用SpecialCells只关注需要testing的单元格,然后在进行更新之前运行NA检查

选项1

手动select评估为错误的公式单元格

  • select感兴趣的范围
  • 按[F5]。
  • 点击特殊
  • select公式
  • 只检查错误

选项2

VBA更新公式单元格,评估为错误

 Sub Shorter() Dim rng1 As Range On Error Resume Next ' All error formulas in column A Set rng1 = Columns("A").SpecialCells(xlCellTypeFormulas, 16) On Error GoTo 0 If rng1 Is Nothing Then Exit Sub 'update with new value (could be value or formulae) rng1.Value = "new value" End Sub 

选项3

testing=NA()

 Sub TestSpecificRegion() Dim rng1 As Range Dim rng2 As Range Dim X Dim lngRow As Long On Error Resume Next ' All error formulas in column A Set rng1 = Columns("A").SpecialCells(xlCellTypeFormulas, 16) On Error GoTo 0 If rng1 Is Nothing Then Exit Sub 'update with new value (could be value or formulae) For Each rng2 In rng1.Areas If rng2.Cells.Count > 1 Then X = rng2.Value2 For lngRow = 1 To UBound(X, 1) If X(lngRow, 1) = CVErr(xlErrNA) Then X(lngRow, 1) = "new value" Next rng2.Value = X Else If rng2.Value2 = CVErr(xlErrNA) Then rng2.Value = "new value" End If Next End Sub