如果单元格值=“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
)
- 前面两种方法(手动和代码)处理的情况下,你只给
NA
细胞 - 第三个使用
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