如何插入一个大的Excel表中零单元格?

我有一个长期的Excel文件,其中包含从网站收集的数字。 由于源错误,小于1%的单元格包含零。 因此,我想find更新这些单元格,并使用最接近的值进行插值。 零单元格的长度是一个单一的时间,因此我可以简单地取最接近的非零值的平均值。 但是,有一些地方比一个长,所以我需要使用线性插值。

抽取数据样本

+---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ | | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | +---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ | 1 | 4058 | 4048 | 4049 | 4082 | 4090 | 4115 | 4118 | 4109 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3990 | 4058 | 4064 | 4053 | 4057 | 4093 | 4123 | 4137 | 4133 | +---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ 

这是一个非常通用的脚本,可能会这样做。 它只能在正值和十行上进行testing,因此您一定需要将其适应于许多angular落情况 – 但它应该指向正确的方向:

 Sub Interpolate() Dim valueToTop As Integer For Row = 1 To 10 valueToTop = -1 valueToBottom = -1 If Cells(Row, 1).Value = 0 Then RowToTop = Row - 1 Do While RowToTop > 0 If Cells(RowToTop, 1).Value > 0 Then valueToTop = Cells(RowToTop, 1) Exit Do End If RowToTop = RowToTop - 1 Loop Debug.Print valueToTop Debug.Print RowToTop RowToBottom = Row + 1 Do While RowToBottom > 0 If Cells(RowToBottom, 1).Value > 0 Then valueToBottom = Cells(RowToBottom, 1) Exit Do End If RowToBottom = RowToBottom + 1 Loop Debug.Print valueToBottom Debug.Print RowToBottom Cells(Row, 2).Value = valueToTop + (Row - RowToTop) * (valueToBottom - valueToTop) / (RowToBottom - RowToTop) End If Next Row End Sub