Vba创builddate(不是星期几),即:第1天,第2天等date

一个vba-excelmacros来修改我的报告从当前所需的格式在所附的工作表中。

概要

我想添加一个列作为“发生date” – 即:第1天…第Z天根据date/时间列,以便能够使用数据透视表来标识每天使用的所有代码为每个帐号的整个逗留服务。

有4万行帐号与不同的服务天数。 列数应保持与示例中相同。

当前工作表

当前工作表

期望的工作表

期望的工作表

假设第1天是您date和时间列中的最早一天,并且该列在E列中,那么这个公式将会这样做="Day " & E2-MIN(E:E)+1 。 显然这是input到你想要的任何列,在第2行,然后填写下来。

假设:

  • 帐号在A列

  • C列出现的那一天

  • date和时间在E栏

还假设发生的那一天不是“一个月中的某一天”,而是简单的一连串不同的日子(如果情况并非如此,那么只需使用Scott的评论)。

您可以使用此公式来获取所需的date编号,但没有“日”前缀。

在单元格C2中键入此公式,然后将其复制并粘贴到列C的所有单元格中:

 = IF(A2<>A1, 1, IF(E2=E1, C1, C1+1)) 

如果你坚持把它显示为"Day x" ,公式会更复杂一点,但它是有效的(再次,在C2单元格中input这个公式,然后复制/粘贴到C列的其他单元格中):

 =IF(A2<>A1,"Day 1",IF(E2=E1,C1,"Day "& (1+RIGHT(C1,LEN(C1)-4)))) 

PS:我不会推荐给它加上前缀,因为它是数字数据,所以让它保持数字…

这可能是矫枉过正的….但这是我想出来的….

 Function DayOfOccurrence(InputDate As Date) As String YearEntry = Year(InputDate) MonthEntry = Month(InputDate) IsLeapYear = -1 On Error Resume Next IsLeapYear = CDate("2 / 29 /" & YearEntry) 'Hack to see if it's a leap year. Variable IsLeapYear will remain -1 if NOT a leap year. On Error GoTo 0 If IsLeapYear = -1 Then 'Is Not a Leap Year If MonthEntry = 1 Then Base = 0 ElseIf MonthEntry = 2 Then Base = 31 ElseIf MonthEntry = 3 Then Base = 59 ElseIf MonthEntry = 4 Then Base = 90 ElseIf MonthEntry = 5 Then Base = 120 ElseIf MonthEntry = 6 Then Base = 151 ElseIf MonthEntry = 7 Then Base = 181 ElseIf MonthEntry = 8 Then Base = 212 ElseIf MonthEntry = 9 Then Base = 243 ElseIf MonthEntry = 10 Then Base = 273 ElseIf MonthEntry = 11 Then Base = 304 ElseIf MonthEntry = 12 Then Base = 334 End If Else 'Is a Leap Year If MonthEntry = 1 Then Base = 0 ElseIf MonthEntry = 2 Then Base = 31 ElseIf MonthEntry = 3 Then Base = 60 ElseIf MonthEntry = 4 Then Base = 91 ElseIf MonthEntry = 5 Then Base = 121 ElseIf MonthEntry = 6 Then Base = 152 ElseIf MonthEntry = 7 Then Base = 182 ElseIf MonthEntry = 8 Then Base = 213 ElseIf MonthEntry = 9 Then Base = 244 ElseIf MonthEntry = 10 Then Base = 274 ElseIf MonthEntry = 11 Then Base = 305 ElseIf MonthEntry = 12 Then Base = 335 End If End If DayOfOccurrence = "Day " & Base + Day(InputDate) End Function 

我将添加这一个:

在C中使用以下公式:

 ="DAY " & DAY(E2 - MIN(IF(A:A = A2,E:E)))+1 

然后,如果订单搞砸了,那也没有关系。

要build立在@pnuts评论,如果你想保留底层的数字作为一个数字然后使用这个公式:

 =DAY(E2 - MIN(IF(A:A = A2,E:E)))+1 

并在范围上使用以下自定义格式:

 "Days " 0 

它会把这个单词放在数字的前面,但把这个数字作为条目,这样任何math都可以在不删除单词的情况下完成。

你可以在VBA中使用这个自定义函数。 这会给你一年中的结果。

 Function d_day_consequent(my_date As Date) d_day_consequent = my_date - DateSerial(Year(my_date), 1, 1) End Function 

在这里输入图像说明