【问题标题】:How to dynamically do a linear interpolation of data in a row with missing values?如何动态地对缺失值的行中的数据进行线性插值?
【发布时间】:2017-08-26 07:51:59
【问题描述】:

我有这个数据

Date    Data
8/25/2017   980
8/24/2017   64
8/23/2017   593   
8/22/2017   595
8/21/2017   
8/20/2017   
8/19/2017   794
8/18/2017   437
8/17/2017   
8/16/2017   
8/15/2017   
8/14/2017   629

如果我在 8 月 21 日的单元格中想要 (794-595)/3,在 8 月 22 日的单元格中想要 2*(794-595)/3 并且在 8 月 17 日类似的 (629-437)/4,2*(629- 437)/4 8 月 16 日等...

如何在不考虑中间缺失值的数量的情况下动态执行此操作

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    下面的代码提供了一种解决方案,动画 gif 显示了解决您问题的代码。当然,有很多方法可以解决这个问题,但这很简单。至少这向您展示了需要哪些输入。它假设 x 值增加 1(正如您在数据中所拥有的那样)。否则,您需要使用诸如斜率和截距函数之类的东西。

    Option Explicit
    Sub interpolate()
    Dim r As Range, cell As Range
    Set r = Application.InputBox("select interpolation range", , , Type:=8)
    For Each cell In r
      If cell = "" Then
        cell = r(1) + (r(r.Rows.Count) - r(1)) * (cell.row - r.row) / (r(r.Rows.Count).row - r(1).row)
      End If
    Next
    End Sub
    

    【讨论】:

    • 谢谢你,但你认为这两个空白组是唯一的。现实情况是,我可能有更多的空格(4 个空格序列、5 个空格、1 个空格等),我不知道数据中有多少这样的序列。所需的解决方案将是一个动态解决方案,它将在每个空白序列中插入数据,而与空白的数量无关。我不想通过为每个序列手动执行每个序列来将自己限制在测试数据中的两个空白序列中。
    • 我试图提供一个解决方案来回答原始问题,并承认它可能无法涵盖所有​​可能性。但话又说回来,这个想法只是为了让你朝着一个可以解决问题的方向前进。尽管如此,我相信上面的解决方案确实可以处理“更多的空格(4个空格序列,5个空格,1个空格等)”并且“不管空格的数量”。如果您希望自动完成所有此类序列,可以通过从顶部开始,逐步找到每个空白序列,然后应用我使用的公式来完成
    • 没有办法自动做吗?某种算法遍历一列,找到所有的空白序列并填充空格?
    • 基本上找到列中的空格然后应用您的公式。但它应该是自动的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2018-09-09
    • 2012-08-17
    • 2021-07-24
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多