Заполните пустые ячейки, используя линейную интерполяцию

Сначала я должен сказать, что 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. Я нашел похожий вопрос и решение для него, но мне не удается применить решение к моему листу 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 ответа

Если у вас есть две даты в столбце, разделенные пробелами, выберите ячейки (включая две заполненные ячейки) и запустите этот крошечный макрос VBA:

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

Вы можете использовать надстройку, такую ​​как http://www.srs1software.com/SRS1CubicSplineForExcel.aspx

Вы ищете функции линейной интерполяции.

Другие вопросы по тегам