Перемещение диапазона на основе функции TODAY () и первого числа месяца - PullRequest
0 голосов
/ 04 июня 2019

У меня есть диапазон, который начинается с =EDATE($A$46,-5), где A46 - =TODAY().Этот диапазон расширяет 5 дополнительных ячеек вправо, каждая ячейка содержит =EDATE(_cell to the left_,1) и отформатирована так, чтобы отображать только месяц.Таким образом, я получаю полный диапазон слева направо, который показывает предыдущие 6 месяцев (т.е. январь, февраль, март, апрель, май, июнь).В первом месяце диапазон, очевидно, изменяется и включает текущий новый месяц и предыдущие 5 месяцев после него.

В каждой из ячеек ниже месяца у меня есть данные (введенные вручную), содержащие суммыдля учетной записи.В первый день каждого месяца, когда открывается рабочая книга, мне нужно обрезать данные, которые находятся в ячейках данных, и переместить их обратно на один столбец, чтобы учесть добавленный новый дополнительный месяц (поскольку самый ранний месяц уже ушел иследовательно, и данные должны исчезнуть)

enter image description here

Итак, из рисунка выше, вы можете видеть, что 1 июля я захочу перенести февраль, март, апрель, май иДанные за июнь на один столбец слева (потому что в этот момент январь исчезнет).Очевидно, мне нужно, чтобы это было динамичным, поэтому это происходит в начале каждого месяца.

Извините, что у меня нет кода здесь, но я даже не знал, с чего начать что-то делать на основепервое число каждого месяцаВ настоящее время к книге включена поддержка макросов, и к ней прикреплен макрос.

1 Ответ

1 голос
/ 04 июня 2019

Сначала вам нужен характерный знак для распознавания нового месяца.
Это может быть номер дня, но первым может быть выходной - поэтому нам нужно лучшее решение.

Я предлагаювставьте заголовки не по формуле, а изначально вручную в качестве даты (все еще в качестве полной даты, показанной только в качестве названия месяца).Затем код VBA может сравнивать текст последней ячейки с именем текущего месяца.

Если вы поместите этот код в модуль рабочей книги, он будет запускаться при каждом открытии файла.Он копирует диапазон, включая заголовки, вставляет новую дату в последний заголовок и очищает содержимое под ним.

Я предположил, что диапазон, показанный на вашем изображении, составляет от A47 до F51.
Пожалуйста, измените его и листимя для ваших нужд.

Private Sub Workbook_Open()
    Dim CurrentMonthname As String
    Dim MsgAnswer As Integer

    CurrentMonthname = MonthName(Month(Date), False) ' or Format(Date, "MMMM")
    With Me.Sheets("AccountAmount")
        If .Range("F47").Text <> CurrentMonthname Then
            If MsgBox("Insert new month and move data?", _
              vbQuestion + vbOKCancel, "New Month") = vbOK Then
                .Range("A47:E51").Value = .Range("B47:F51").Value
                .Range("F47").Value = Date
                .Range("F48:F51").ClearContents
            End If
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...