Как отобразить только год в VBA? - PullRequest
0 голосов
/ 08 марта 2019

У меня есть следующий набор данных в общем формате.

enter image description here

Куча лет без указания дня или месяца.
Что я хочучтобы достичь, означает отображение даты в формате yyyy .

Я сделал стандартную функцию DateSerial для правильного преобразования данных в дату.

Private Function toDate(ByVal text As String) As Date
    toDate = DateSerial(Int(text), 1, 1)
End Function

For Each cell in ws.Range("A21:A" & lr)
    cell = toDate(cell)
    cell.NumberFormat = "yyyy"
Next cell

Теперь, технически это работает, но если вы щелкнете внутри ячейки, она, очевидно, покажет дату только как 01-01-year - что следует ожидать с использованием dateserial

enter image description here

enter image descriptionhere

Но мне было интересно, можно ли было бы, учитывая мои данные, как-то пропустить Days и Months и отображать толькорезультат в виде year?

По сути, мне нужно преобразовать данные в тип данных Date без указания дней и месяцев

1 Ответ

1 голос
/ 08 марта 2019

Ввод лет и форматирование даты как «ГГГГ» можно сделать так:

Sub TestMe()

    With ThisWorkbook.Worksheets(1)
        .Range("A1") = 2011
        .Range("A2") = 2013
        .Range("A3") = 2011

        Dim myCell As Range
        For Each myCell In .Range("A1:A3")
            myCell = DateSerial(myCell, 1, 1)
            myCell.NumberFormat = "yyyy"
        Next myCell
    End With

End Sub

«Хитрость» заключается в том, что DateSerial(myCell, 1, 1) берет год из ячейки и добавляет 1 для дня и январь для месяца. Таким образом, каждый год представляется как дата 1. января этого года.

Подробнее о Date в VBA и Excel - VBA не возвращает правильную дату с Now ()

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