使用VBA从Excel 2013中的date提取weeknumber

我检查了networking,但似乎没有帮助我的情况:(

我基本上想从date中提取周数。 我已经使用下面的代码从同一个单元格中提取了年份的最后两位数字:

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

(wbThis被定义为一个工作簿)

但是周数还没有出现在我身上。

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

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

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

非常感谢,最好的问候。

(注意,单元格C5的FORMULA表示2016-02-12 – cell实际上只显示12-feb,因此.Value将返回2016-02-12)

除了IF函数,如果一周中的长度为1,则可以在公式中使用WEEKNUM函数:

 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 

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

 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函数 ¹。

 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函数 ,但在早期版本中不可用。
Excel的2013