替换包含“#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表格中将具有相同值的多个单元格与一个单元格合并以求平均值