一个vba-excel宏,用于在附加的工作表中将我的报告从当前格式修改为所需格式。
我想添加一列作为"发生日期" ---即:第1天...基于日期/时间列的日期Z,以便能够使用数据透视表来识别每个帐号在整个住宿期间每天使用的所有代码。
有40K行帐号,有不同的服务天数。列数应与示例中的相同。
答案 0 :(得分:1)
假设第1天是您日期和日期中最早的一天。时间列和该列位于E列中,那么此公式将执行="Day " & E2-MIN(E:E)+1
。显然,这是输入到你想要的任何一列,在第2行,然后填写。
答案 1 :(得分:0)
假设:
A栏中的帐号
C列中出现的日期
日期& E栏中的时间
并且还假设发生的日期不是"日期",而只是一系列不同的日子(如果不是这样的话,只需使用Scott的评论)。
您可以使用此公式获取所需的日期编号,但不使用" Day"前缀。
在单元格C2中键入此公式,然后将其复制并粘贴到C列的所有单元格中:
= IF(A2<>A1, 1, IF(E2=E1, C1, C1+1))
如果您坚持将其显示为"Day x"
,则公式稍微复杂一些,但它有效(再次,在单元格C2中输入此公式,然后将其复制/粘贴到C列的其他单元格中):< / p>
=IF(A2<>A1,"Day 1",IF(E2=E1,C1,"Day "& (1+RIGHT(C1,LEN(C1)-4))))
p.s。:我不建议给它添加前缀,因为它是数字数据,所以让它保持数字......
答案 2 :(得分:0)
这可能是矫枉过正......但这就是我想出的......
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
答案 3 :(得分:0)
我将添加这个:
在C:
中使用以下公式="DAY " & DAY(E2 - MIN(IF(A:A = A2,E:E)))+1
然后订单搞砸了并不重要。
如果要将基础数字保留为数字,请使用@pnuts注释,然后使用以下公式:
=DAY(E2 - MIN(IF(A:A = A2,E:E)))+1
并在范围内使用以下自定义格式:
"Days " 0
它会将单词放在数字前面,但将数字保留为条目,这样就可以在不删除单词的情况下完成任何数学运算。
答案 4 :(得分:0)