Автоматически устанавливается в следующем году в сроки - PullRequest
1 голос
/ 27 февраля 2020

Я строю график и хотел бы, чтобы годы автоматически увеличивались в соответствии с месяцами.

Вот моя текущая шкала времени:

enter image description here

У меня есть кнопка, которая добавляет +1 столбец = (+1 месяц) , Поэтому, если я нажимаю кнопку, запускается следующий макрос:

With Sheet1
    .Range("K:K").Copy
    .Columns("L:L").Insert Shift:=xlToRight
End With

На скриншоте, прикрепленном после месяца снова January, год уже должен быть 2021.

Я попытался сделать это:

B33

=YEAR(OtherData!$P$17)

C33 (все остальные ячейки справа)

=YEAR(OtherData!$P$17)+IF(B34="January";1;0)

это работает, но тогда я получаю 2021 только в М33. Как сделать, чтобы формула копировала предыдущую ячейку, пока в строке 34 не будет достигнут January?


РЕДАКТИРОВАТЬ:

Кажется, что это работает C33 (все остальные ячейки справа):

=IF(C34="January";YEAR(OtherData!$P$17)+IF(C34="January";1;0);B33)

, но после запуска VBA все снова запуталось ...


РЕДАКТИРОВАТЬ 2:

Я думаю, что формула теперь верна, но макрос нужно как-то редактировать, чтобы копировать вставку с конца все время, а не работать с определенными ячейками, такими как K и L.

ИЛИ

Просто заполните диапазон C33 -> справа формулой =IF(C34="January";YEAR(OtherData!$P$17)+IF(C34="January";1;0);B33) после запуска макроса. Надо найти UsedRange наверное как-то.


РЕДАКТИРОВАТЬ 3:

Это похоже на рабочее решение:

Sub Add_One_Year()

    Dim lColumn As Long

    With Sheet1
        .Range("L:L").Copy
        .Columns("K:K").Insert Shift:=xlToRight
    End With

    lColumn = CashflowSheet.Cells(33, Columns.Count).End(xlToLeft).Column

    Sheet1.Range(Cells(33, 3), Cells(33, lColumn)).Formula = "=IF(C34=""January"",YEAR(OtherData!$P$17)+IF(C34=""January"",1,0),B33)"

    'MsgBox ("The last used column is: " & lColumn)

End Sub

1 Ответ

1 голос
/ 27 февраля 2020

Я бы не стал вычислять год - добавьте фактическую дату в ячейку и отформатируйте ее, чтобы показать месяц или год, как требуется. Когда вы добавляете месяц, год в январе автоматически увеличивается.

Добавьте свою первую дату в ячейку B34 и укажите произвольный формат числа mmmm. В ячейке B33 используйте формулу =B34 и укажите собственный числовой формат yyyy.

Выполните этот код, чтобы добавить следующий месяц:

Sub Test()

    Dim LastCol As Long

    With ThisWorkbook.Worksheets("Sheet1")
        LastCol = .Cells(34, .Columns.Count).End(xlToLeft).Column
        With .Cells(34, LastCol + 1)
            .FormulaR1C1 = "=EOMONTH(RC[-1],0)+1"
            .NumberFormat = "MMMM"
        End With
        With .Cells(33, LastCol + 1)
            .FormulaR1C1 = "=R[1]C"
            .NumberFormat = "YYYY"
        End With
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...