【问题标题】:Extract weeknumber from a date in Excel 2013 using VBA使用 VBA 从 Excel 2013 中的日期中提取周数
【发布时间】:2016-03-02 00:47:16
【问题描述】:

我查遍了网络,但似乎没有任何帮助:(

我基本上想从日期中提取周数。 我已使用此代码成功地从同一单元格中提取了年份的最后两位数字:

Right(Year(wbThis.Sheets("Availability").Range("C5").Value), 2)

(wbThis被定义为工作簿)

但是我还没有显示周数。

所以你可以自己检查一下是否正确,wbThis workbook的C5单元格中的日期是

2016-02-12 (YYYY-MM-DD) 

这相当于 Weeknumber 06。(如果是 6,我想要 06,但我相信你可以弄清楚:P)

非常感谢,最好的问候。

(PS。请记住,单元格 C5 的公式表示 2016-02-12 - 单元格实际上只显示 12-feb。所以 .Value 将返回 2016-02-12)

【问题讨论】:

    标签: vba excel excel-2013


    【解决方案1】:

    如果一周的长度为 1,除了 IF 函数之外,您还可以在公式中使用 WEEKNUM 函数来连接前导 0:

    If Len(WorksheetFunction.WeekNum(wbThis.Sheets("Availability").Range("C5").Value))=1 Then
        Debug.Print 0&WorksheetFunction.WeekNum(wbThis.Sheets("Availability").Range("C5").Value)
    Else
        Debug.Print WorksheetFunction.WeekNum(wbThis.Sheets("Availability").Range("C5").Value)
    End if
    

    【讨论】:

    • 我想你可能需要加一个WorksheetFunction object
    • 对不起,我把它写成一半 VBA 代码一半 excel 公式 ^^ - 现在编辑
    • 嗨。不幸的是,我收到了错误Compile error: Variable Required - can't assign this to this expression,它突出显示了第一个 .WeekNum 表达式。另外我如何检查这是否有效?假设我希望 wbThis 中的工作表可用性中的单元格 A1 具有此值,我该如何对其进行编码以便将其粘贴到那里?谢谢。
    • 嗨,我解决了我的第二个问题 - 所以不要打扰它。现在我的问题只是编译错误:)
    【解决方案2】:

    ww 数字格式掩码可用于检索 WEEKNUM function 的等效项。

    Debug.Print Format(ThisWorkbook.Sheets("Availability").Range("C5").Value, "ww")
    Debug.Print Right("0" & Format(ThisWorkbook.Sheets("Availability").Range("C5").Value, "ww"), 2)
    

    对于 2016 年 3 月 1 日,这将返回 10。对于 2016 年 2 月 12 日,我在 ww 格式掩码和 WEEKNUM 函数中都得到 7 而不是 6。如果您想返回 6(或 06),则必须使用 ISOWEEKNUM function¹。

    Debug.Print WorksheetFunction.IsoWeekNum(ThisWorkbook.Sheets("Availability").Range("C5").Value)
    Debug.Print Right("0" & WorksheetFunction.IsoWeekNum(ThisWorkbook.Sheets("Availability").Range("C5").Value), 2)
    

    ¹ ISOWEEKNUM function 是在 Excel 2013 中引入的。它在早期版本中不可用。

    【讨论】:

    • 嘿,我可能应该在上面提到它,但我希望那些人在这里看到它。我想在此处添加周数:wbTarget.Sheets("Sheet1").Range("C6") = "w." & Right(Year(wbThis.Sheets("Availability").Range("C5").Value), 2) & 'WEEKNUMBER CODE HERE 我将如何处理以便将数字添加到年份的最后一位数字旁边?谢谢。
    • 嗨 - 我通过在 if 和 else 表达式中添加 wbTarget.Sheets("Sheet1").Range("C6") = "w." & Right(Year(wbThis.Sheets("Availability").Range("C5").Value), 2) & 'WEEKNUMBER CODE HERE 来解决这个问题。当我使用 ISOWeekNum 时出现自动化错误,而当我只使用 WeekNum 时出现上述编译器错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多