使用线性插值填充空白单元格

时间:2014-04-07 12:01:19

标签: r excel excel-vba zoo vba

首先我不得不说Excel不是我的交易工具,我这样做是为那些不是R用户的人做的。这应该是一个简单的任务,但我很难找到一种方法来使用线性插值填充空单元格。假设我有以下Excel表格:

Row Date      Interpolated date
1   09/09/13    
2       
3   15/10/13    
4       
5       
6       
7       
8       
9       
10  03/04/14

现在我想将非空值从Date复制到Interpolated date,然后通过在相邻的非空单元格之间进行插值来填充空单元格。请注意,Date列中空值之间的差距是偶然的。结果应如下所示(这是使用na.approx包中的zoo函数为R完成的:

Row Date      Interpolated date
1   09/09/13  09/09/13
2   <NA>      27/09/13
3   15/10/13  15/10/13
4   <NA>      08/11/13
5   <NA>      02/12/13
6   <NA>      26/12/13
7   <NA>      20/01/14
8   <NA>      13/02/14
9   <NA>      09/03/14
10  03/04/14  03/04/14

据我所知,使用标准Excel函数可能无法实现,而且应该使用VBA宏。我是VBA宏的新手。我找到了a similar question and solution for it,但我无法将解决方案应用到Excel表格中。我希望Interpolated date列自动更新,在Date列中更改值或至少是一个简单的按钮,用户可以按此更新值。在这种情况下进行插值的最简单方法是什么?

PS。这是R代码,如果这会有所帮助:

dat <- structure(list(Row = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Date = structure(c(15957, NA, 15993, NA, NA, NA, NA, NA, NA, 16163), class = "Date")), .Names = c("Row", "Date"), row.names = c(NA, -10L), class = "data.frame")

library(zoo)
dat$Interpolated.date <- as.Date(na.approx(dat$Date))

2 个答案:

答案 0 :(得分:2)

如果列中有两个日期被插入的空格隔开,请选择单元格(包括两个填充的单元格)并运行此微小的 VBA 宏:

Sub DateInterp()
    Selection.DataSeries Rowcol:=xlColumns, Type:=xlGrowth, Date:=xlDay, _
        Trend:=True
End Sub

答案 1 :(得分:0)

您可以使用加载项,例如http://www.srs1software.com/SRS1CubicSplineForExcel.aspx

您正在寻找线性插值函数。