遍历列中的 #N/A 并在所有 #N/A 上插入公式

loop through #N/A in a column and insert a formula over all #N/A

所以我有一个包含近 10 万个条目的列。我想遍历列中的每个 #N/A 并用公式替换 #N/A 。我得到了 #N/A 的发现和公式 - 插入工作正常,但我的循环中似乎有一个错误,我不明白。我的代码看起来像这样

Sub Test()
Dim findrow As Double
Dim lstrow As Double
Dim row As Double
Dim length As String
Dim emp As Variant
Dim Err As String

Err = "#N/A"
emp = " "
row = 1
lstrow = Range("G" & Rows.Count).End(xlUp).row



Workbooks("(Test)").Activate


For row = 1 To lstrow
    If IsError(ActiveWorkbook.Sheets("1").Range("F" & row).Offset(offsetCount, 0).value) Then
        If (ActiveWorkbook.Sheets("1").Range("F1" & row).Offset(offsetCount, 0).value = CVErr(xlErrNA)) Then
            findrow = global_searchByRow_inCol("#N/A", Workbooks("(Test)"), 6)
        End If
    End If
        If Not findrow = 0 Then
            Cells(findrow, 6).formula = "=IF(ISNA(INDEX(august.csv!$C:$C,MATCH(R" & findrow & ",august.csv!$D:$D,0)))= TRUE," & emp & ",(INDEX(august.csv!$C:$C,MATCH(R" & findrow & ",august.csv!$D:$D,0))))"
        End If

Next row

我在第

行收到错误 type mismatch
If Range("F" & row) = Err Then

这是正确的行,但没有执行 Then。如果我手动调试并把它放在一行,它会再次完美运行,直到下一个#N/A。我没有得到什么?

编辑:错误是类型不匹配并且offset为空

我想你需要这个:

If Range("F" & row).Text = Err Then

使用 .Text 而不是 .Value 来避免和错误,如果您使用 .Text,范围只给您范围内的文本文本作为字符串,无论范围有什么.

在您的行版本 (If Range("F" & row) = Err Then) 中,您所说的是:

如果整个单元格 F&row 等于 #N/A 这是错误的,因为范围是一个对象,而你问的是范围是否等于文本 (#N/A)