【问题标题】:How to display only year in vba?如何在vba中只显示年份?
【发布时间】:2019-03-07 22:37:09
【问题描述】:

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

多年没有提供日期或月份。
我想要实现的,是以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 - 这是意料之中的 使用日期序列

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

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

【问题讨论】:

  • 这里的最终目标是什么?如果您始终希望它们在用户点击编辑时也显示为 xxxx,为什么不只使用我们 xxxx 呢?
  • @TimWilliams 遗憾的是,这是专门要求采用yyyy 格式的。我个人也希望将其保留为一个简单的数字,但不是我的选择:)
  • 我猜,这个问题可以简化为一个简单的“是否可以创建没有日期和月份的Date 数据类型”,但你知道, “必须展示你的努力和所有这些”正在应用
  • 我猜答案是否定的,如果列表保持为 xxxx 很重要,那么在消费/使用这些值时应该转换为日期。
  • 您可以使用 Excel 公式 + 更改数字格式。假设您的年份系列是 A1,然后在 B1:=DATE(A1,1,1),填写并完成,然后将 A:B 列的数字格式更改为 yyyy。然后将粘贴值从 B 复制到 A,去掉 B 列。

标签: excel vba date


【解决方案1】:

输入年份并将日期格式化为“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 日期。

更多关于 VBA 和 Excel 中的Date - VBA doesn't return the correct Date with Now()

【讨论】:

  • 我认为问题在于,当用户选择单元格时,他们只希望“2011”、“2013”​​或“2011”出现在编辑栏中,而不是“m-d-yyyy”。
  • 正如@dwirony 在上面指出的那样^ ...我想我会删除 1905 部分,因为它只是问题中无用的混乱
  • @Rawrplus - 好吧,我能想到的最简单的方法是使用公式=YEAR(A1) 并将01.01.2011 放入A1。
  • @Vityata 是的,我想这有点隐藏日期和月份。我会留下这个问题,看看是否有人提出任何建议,但是,很可能不可能省略 date 和 motnh
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多