Заполните пустые ячейки, используя линейную интерполяцию
Сначала я должен сказать, что 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
Вы ищете функции линейной интерполяции.