替换包含“#VALUE!”的单元格与周围细胞的平均值

Posted

技术标签:

【中文标题】替换包含“#VALUE!”的单元格与周围细胞的平均值【英文标题】:Replace cells containing "#VALUE!" with average value of surrounding cells 【发布时间】:2015-03-10 13:47:17 【问题描述】:

我有一些数据列,其中一些单元格包含#VALUE!。当然很烦人,所以我想编写一个宏,将每个工作表中的这些#VALUE! 单元格替换为上下两个单元格的平均值。

例如。

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

我尝试关注 this post 和 this 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

非常感谢任何帮助。

【问题讨论】:

#Value! 通常表示单元格中的公式错误。这些值是作为“VALUES”复制并粘贴到此列中还是单元格A3中有公式? @xQbert - 啊,这对公式错误很有意义,谢谢。这些值被复制/粘贴为“VALUES”。 【参考方案1】:

考虑:

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

并且由于 Qty 是一个 Range,因此不要使用 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

【讨论】:

谢谢,我相信这已经解决了宏正在运行的问题。做一些测试然后会报告回来。 宏已运行但未进行任何更改,单元格仍包含“#VALUE!”。 我会删除字符串比较并直接检查该值是否为单元格错误。 If IsError(Qty.Value),然后可以通过 If Qty.Value = CVErr(xlErrValue 跟进,以便在必要时专门针对 #VALUE! 进行测试。请注意,如果由于某种原因单元格包含文本 #VALUE! is my favorite error! :-),字符串比较将失败 非常感谢您的工作代码,这比我拥有的更好更整洁! @Jean-FrançoisCorbett - 这是一个绝妙的提示,谢谢。我会尝试整合它,看看效果如何!

以上是关于替换包含“#VALUE!”的单元格与周围细胞的平均值的主要内容,如果未能解决你的问题,请参考以下文章

在Google表格中将具有相同值的多个单元格与一个单元格合并以求平均值

python 查找单元格与单元格包含项目列表的其他行之间的单元内重复项和重复项。

函数Average是啥意思

图片平滑器

细胞自动机

如何将具有数据的单元格与同一列中的空白单元格合并?