![Excel 中多个字段的平均值分布是多少?](https://linux22.com/image/1247309/Excel%20%E4%B8%AD%E5%A4%9A%E4%B8%AA%E5%AD%97%E6%AE%B5%E7%9A%84%E5%B9%B3%E5%9D%87%E5%80%BC%E5%88%86%E5%B8%83%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
我有一张包含一系列数据的表格。
这些数据用于图表中。
这些数据中有一些漏洞,我想用平滑的数字来填补。
以此表为例:
在上面的例子中,93 和 68 之间有 3 个间隙,我想填补。
顺序应该是 93、86.75、80.5、74.25 然后是 68。
我可以使用什么样的公式来自动计算中间的数字?
编辑:间隙可以是任意行,可以向上或向下。
答案1
如果你的时间间隔是总是等距你可以使用 Excel 的充满特征。
- 选择 B2285:F2289(空白区域加上上面和下面的数据行)
- 在家功能区选项卡,选择充满进而系列...
- 系列:列
- 类型:线性 (Linear)
- 趋势:是的
- 点击好的
在 Excel 2007 中测试。
答案2
使用此 VBA 子程序,您可以选择要插入的单元格,然后激活宏。我使用了一个按钮,但您可能想要使用快捷键组合。
Private Sub InterpolateGap()
Dim Gap As Range
Dim GapRows As Integer, i As Integer, Increment As Integer
Set Gap = Selection
If Not Gap Is Nothing Then
GapRows = Gap.Rows.Count
Increment = (Gap.Cells(1, 1).Offset(-1, 0) - _
Gap.Cells(1, 1).Offset(GapRows, 0)) / GapRows
For i = 1 To GapRows
Gap.Rows(i).Cells(1, 1) = _
Gap.Rows(i).Cells(1, 1).Offset(-1, 0) - Increment
Next i
End If
End Sub
答案3
我最终编写了一些 VBA 代码,感谢@Lance Roberts
此代码实际上将循环遍历每一行和每一列以查找空白条目,抓取上限和下限值并以此方式计算。
唯一的问题是当第一行数据为空白时。
由于懒惰,列被硬编码为 10。
Sub SetAverages()
Dim lastrow As Integer, ncol As Integer, nrow As Integer
Dim secondvalrow As Integer, blankrows As Integer
Dim difference As Double, Increment As Double
Range("A65535").End(xlUp).Select
lastrow = ActiveCell.Row
For ncol = 2 To 10
For nrow = 2 To lastrow 'start after header row
If Cells(nrow + 1, ncol).Value = "" Then
secondvalrow = nrow + 1
Do Until Cells(secondvalrow, ncol).Value <> "" Or secondvalrow = lastrow + 1
secondvalrow = secondvalrow + 1
Loop
blankrows = secondvalrow - nrow
difference = Cells(secondvalrow, ncol).Value - Cells(nrow, ncol).Value
Increment = difference / blankrows
For i = nrow + 1 To secondvalrow - 1
Cells(i, ncol).Value = Cells(i - 1, ncol).Value + Increment
Next i
End If
Next nrow
Next ncol
End Sub
答案4
如果你没有稳定地向上或向下攀爬,那么这件事将会很难做到。
我最好的建议是简单地突出显示您拥有的数字,然后单击突出显示区域右下角的框,然后向下拖动以让 Excel 尽力进行猜测。