使用

时间:2015-08-13 08:11:12

标签: excel excel-vba excel-formula vba

我有一个时间序列,其中一些记录没有价值 离。

  

A1:1-1-2000 ------------------- B1:2
  A2:1-2-2000 ------------------- B2:
  A3:1-3-2000 ------------------- B3:3
  A4:1-4-2000 ------------------- B4:6
  A5:1-5-2000 ------------------- B5:
  A6:1-6-2000 ------------------- B6:3
  A7:1-7-2000 ------------------- B7:
  A8:1-8-2000 ------------------- B8:7
  A9:1-9-2000 ------------------- B9:
  A10:1-10-2000 ----------------- B10:
  A11:1-11-2000 ----------------- B11:9
  A12:1-12-2000 ------------------- B12:8

我需要用

之前和之后最接近的值的平均值替换空白

2 个答案:

答案 0 :(得分:1)

你可以使用下面的代码,它使用迭代来处理多个连续的空格(正如你在B9:B10中所做的那样)。

Sub FillEm()
Dim rng1 As Range
Dim rng2 As Range

Set rng2 = Range("B1:b12")

On Error Resume Next
Set rng1 = rng2.SpecialCells(xlBlanks)
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub

Application.Iteration = True
rng1.FormulaR1C1 = "=AVERAGE(R[-1]C,R[1]C)"
Application.Iteration = False
rng2.Value = rng2.Value

End Sub

答案 1 :(得分:0)

这是一个公式版本,它结合了一个标准公式,用于查找范围中的最后一个非空白单元格,以及用于查找范围中第一个非空白单元格的公式: -

=IF(B2="",AVERAGE(LOOKUP(2,1/(B$1:B1<>""),B$1:B1),INDEX(B3:B$12,MATCH(TRUE,INDEX((B3:B$12<>""),0),0))),B2)

进入C2并下拉。

B1和B12必须是非空白的。

如果将公式复制到B1中,它将显示“#REF!”公式中的错误,但如果B1包含数字,则会给出正确的答案。