Создание флагов для расчета скользящих средних в Excel - PullRequest
0 голосов
/ 24 мая 2018

У меня есть лист данных, который выглядит следующим образом:

year   month
2017   2017-01
2017   2017-02
2017   2017-03
......
2018    2018-04
2018    2018-05

Обратите внимание, что столбец month содержит текстовую строку.Мне нужно создать новый флаг столбца в Excel, который фильтрует, какие месяцы должны использоваться для расчета скользящих средних 12M за текущий месяц, и какие месяцы должны использоваться для расчета скользящих средних 12M за предыдущий год.Например, сегодняшняя дата - 24.05.2008, поэтому месяц 2018-05 будет помечен как «текущий».месяцы между 2018-04 и 2017-05 будут отмечены как «оба».месяц 2017-04 будет отмечен как «предыдущий».Отдых все месяцы будут отмечены как NA.Мои окончательные данные должны выглядеть следующим образом:

year   month       flag
2017   2017-01      NA
2017   2017-02      NA
2017   2017-03      NA
2017   2017-04      Previous
......
2018    2018-04     Both
2018    2018-05     Current

У меня проблемы с реализацией этой логики в Excel, так как столбец month является текстовой строкой и простое использование условия IF не работает для меня.Любые выводы по этому вопросу приветствуются.

Редактировать:
Я пытался преобразовать месяцы в число с помощью =DATEVALUE(B2 & "-01").
Я сохранил число для текущего месяца в переменной curr.
Теперь я использую следующую формулу =IF(B22=curr,"Current", IF(B2=curr-395,"Previous","Both")).
Это создает столбец флага, который мне требуется, хотя все еще есть проблема, основанная на том, имеет ли месяц 30 или 31 день.Любые решения для этого, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Что касается вашего столбца month format = "YYYY-MM", этот код может быть полезен, это функция Excel, для ее использования необходимо сохранить эту функцию в модуле и использовать ее.`

Function MyDateCal(cell As Range) As String
Dim YearCurrent, YearCell, monthCurrent, MonthCell As Integer
Dim cellVal As String, DiffMonth As Integer[![enter image description here][1]][1]
cellVal = cell.Value
MyDateCal = "NA"
'cellVal = Cells(1, 1).Value
YearCurrent = Year(Now())
monthCurrent = Month(Now())
YearCell = CInt(Left(cellVal, 4))
MonthCell = CInt(Right(cellVal, 2))

DiffMonth = 12 * (YearCurrent - YearCell) + (monthCurrent - MonthCell)

If DiffMonth = 0 Then
MyDateCal = "Current"
ElseIf DiffMonth > 0 And DiffMonth <= 12 Then
MyDateCal = "Both"
ElseIf DiffMonth = 13 Then
MyDateCal = "Previous"
End If

End Function

`

enter image description here

0 голосов
/ 24 мая 2018

Один из способов сделать это - использовать DATDIF.

=DATEVALUE(B2 & "-01") даст вам первое число каждого месяца в столбце B.

Чтобы вернуть номер месяца, используйте =DATEDIF(C2,TODAY(),"m") где столбец C содержит формулу DATEVALUE.Это вернет 0 за этот месяц, 1 за прошлый месяц ... 13 за апрель 2017 года.

Теперь проверьте, если счетчик месяцев = 0, тогда он текущий , если он большечем 11 это NA , иначе оба .=IF(D2=0,"Current",IF(D2>11,"NA","Both"))

... Редактировать ....

Это неправильно - забыл "Предыдущий" и "Оба" не 12 месяцев ....

=IF(D2=0,"Current",IF(D2>13,"NA",IF(D2=13,"Previous","Both")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...