替换包含" #VALUE!"与周围细胞的平均值

时间:2015-03-10 13:47:18

标签: excel excel-vba vba

我有一些数据列,其中一些单元格包含#VALUE!。令人讨厌,所以我想编写一个宏,用每个工作表中的#VALUE!个单元格替换上下两个单元格的平均值。

例如

    A               A
1   1               1
2   2               2
3  #VALUE!    ->    3
4   4               4
5   5               5

我尝试关注this postthis post并提供以下代码,但作为初学者,我显然遗漏了一些内容,因为我收到了“运行时错误'13'”。

Sub Test()

Dim wks As Worksheet

For Each wks In ThisWorkbook.Worksheets

    With wks
        Dim Qty As Range

        For Each Qty In Range("A:ZZ").Cells

            If InStr(1, (Qty.Value), "#VALUE!") Then
            ActiveCell.FormulaR1C1 = "=AVERAGE(R[-2]C:R[-1]C,R[1]C:R[2]C)"
            Range("A:ZZ").Select

            End If
        Next
    End With
Next
End Sub

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

考虑:

If InStr(1, (Qty.Text), "#VALUE!") Then

由于数量范围,请不要使用 ActiveCell;

Qty.FormulaR1C1 = "=AVERAGE(R[-2]C:R[-1]C,R[1]C:R[2]C)"

修改#2:

以下是一些有效的代码:

Sub Test()
    Dim wks As Worksheet, Qty As Range

    For Each wks In ThisWorkbook.Worksheets
        With wks
            For Each Qty In Intersect(.UsedRange, .Range("A:ZZ").Cells)
                If InStr(1, (Qty.Text), "#VALUE!") Then
                    Qty.FormulaR1C1 = "=AVERAGE(R[-2]C:R[-1]C,R[1]C:R[2]C)"
                End If
            Next
        End With
    Next wks
End Sub