使用VBA

时间:2016-03-01 16:26:01

标签: excel vba excel-vba excel-2013

我在网上查了一下,但似乎没有任何帮助我的情况:(

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

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

(wb这被定义为工作簿)

但是,周数尚未出现给我。

所以你可以检查自己是否正确,wbThis工作簿的单元格C5中的日期是

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

这相当于Weeknumber 06.(如果它是6,我想要06,但我相信你可以解决这个问题:P)

非常感谢,最诚挚的问候。

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

2 个答案:

答案 0 :(得分:2)

如果周长为1,您可以在公式中使用WEEKNUM函数以及IF函数来连接前导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

答案 1 :(得分:1)

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.在ww格式掩码和WEEKNUM函数中,2016年2月12日我 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)

¹ Excel 2013引入了ISOWEEKNUM function。早期版本不提供。