遍历列中的 #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)
所以我有一个包含近 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)