首页 > 解决方案 > 如何在vba中只显示年份?

问题描述

我有以下一般格式的数据集。

在此处输入图像描述

多年没有提供日期或月份。
我想要实现的是以yyyyformat显示日期。

我做了一个标准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 可以预期

在此处输入图像描述

在此处输入图像描述

但我想知道,是否有可能给我的数据以某种方式省略DaysandMonths并且只将结果显示为year

基本上,我需要在Date不指定日期和月份的情况下将数据转换为数据类型

标签: excelvbadate

解决方案


输入年份并将日期格式化为“YYYY”可以这样完成:

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.January。

有关DateVBA 和 Excel 中的更多信息 - VBA 不会使用 Now() 返回正确的日期


推荐阅读