【问题标题】:Show week number of the year in custom format以自定义格式显示一年中的周数
【发布时间】:2020-03-02 10:19:33
【问题描述】:

我想知道是否有任何自定义日期格式(Excel 或 VBA)在日期中显示(一年的)周数。

这里是为了澄清我的意思:假设

A1 = "02/03/2020  13:19:57" 

我在 A1 上有这个自定义格式:

[$-en-US]ddd, mmm dd, hh:mm

结果是:

Mon, Mar 02, 13:19 

所以我想在最后有周数:

Mon, Mar 02, 13:19, 10

顺便说一句,需要“A1”保留为日期

感谢任何帮助。

感谢@FaneDuru 解决

WeekNum = WorksheetFunction.WeekNum(ActiveCell, vbMonday)
With ActiveCell
    .NumberFormat = "[$-en-US]ddd, mmm dd, hh:mm" & """, W" & WeekNum & """"
    Debug.Print "Week num: " & WorksheetFunction.WeekNum(.Value)
    Debug.Print Year(.Value)
End With

【问题讨论】:

  • 您可能需要考虑将周数放在旁边的单独单元格中,以便您可以将其保留为日期格式。
  • 您可以在 VBA 中使用它来获取周数:WorksheetFunction.WeekNum(DateValue(oSht.Range("A1")))(其中oSht 是您的工作表)。您还可以使用WeekNum 作为公式来获得所需的结果。这么说,我同意@braX:你应该考虑一个单独的列来保留你的源列

标签: excel vba date format


【解决方案1】:

请尝试以下代码。它将保持数据格式,但将建立周数。可以从日期中提取...

Sub testNumberFormatSpec()
  With ActiveCell
    .Formula = "=Now()"
    .NumberFormat = "ddd, mmm dd, hh:mm"" Week " & _
       WorksheetFunction.WeekNum(ActiveCell.value, vbMonday) & """"
     Debug.Print "Week num: " & WorksheetFunction.WeekNum(.value)
     Debug.Print Year(.value)
  End With
End Sub

我试图建议的是,这种格式不能仅仅填写其他单元格。它必须使用上面的代码构建。周数作为字符串添加到日期格式的末尾。它可以从现有的日期值中提取,但不能像格式一样应用于另一个范围。其实可以在Worksheet_Change事件中引入代码,以适应每一个变化的单元格的格式……当然是在之前定义的范围内。

【讨论】:

  • @Afshin Davoudy:您的ActiveCell 必须包含日期...但是,请刷新页面并测试更新的代码。它保持日期格式...
  • 我已经稍微更改了您的代码以满足我的需要,但它工作正常。太感谢了。顺便说一句,我怎样才能在周数之前加上“周”这个词?
  • @Afshin Davoudy:很高兴我能帮上忙!你能分享(编辑你的问题)你的解决方案吗?我从来不需要这样的方法,但谁知道呢?也许将来我会,或者我可以帮助别人......
  • 问题已更新。 PS。当一个特定的单元格被填满时,我需要一个用当前日期(当然是周数)更新的单元格。但是当用户手动更改日期时也需要设置周数。所以,我决定在单独的宏中设置当前日期和星期数。
  • @Afshin Davoudy:是的。因为,它是一个内置的字符串,是的。我会相应地调整我的答案......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多