我有一些数据列,其中一些单元格包含#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
非常感谢任何帮助。
答案 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