Vba 基于雇用日期的员工序列号
请协助修改以下代码。我想做的是根据每个员工的雇佣日期为他们创建唯一的序列号,例如,在2016年1月13日雇佣的,序列号带有最后两个数字(年、月、日+00),这意味着在同一天雇佣的员工(16011300),而(年、月、日+01)意味着(16011301)同一天雇佣的第二个人。对那些在不同日子被雇佣的人做同样的事情。请看下面的图片,第一个是代码的作用,第二个是我希望它是什么。提前感谢您的帮助 使用的代码:Vba 基于雇用日期的员工序列号,vba,excel,Vba,Excel,请协助修改以下代码。我想做的是根据每个员工的雇佣日期为他们创建唯一的序列号,例如,在2016年1月13日雇佣的,序列号带有最后两个数字(年、月、日+00),这意味着在同一天雇佣的员工(16011300),而(年、月、日+01)意味着(16011301)同一天雇佣的第二个人。对那些在不同日子被雇佣的人做同样的事情。请看下面的图片,第一个是代码的作用,第二个是我希望它是什么。提前感谢您的帮助 使用的代码: Dim myDate As Date, i As Long, dayPart As Str
Dim myDate As Date, i As Long, dayPart As String
Application.EnableEvents = False
For i = 2 To Rows.Count
If Cells(i, 5).Value > 1 And Not IsEmpty(Cells(i, 5).Value) Then
myDate = Cells(i, 5)
dayPart = Format(Year(myDate), "00") - 2000 & _
Format(Month(myDate), "00") & _
Format(Day(myDate), "00") & 1
Cells(i, 2) = dayPart
End If
Next i
Application.EnableEvents = True
如果您的列表仍按招聘日期排序,您可以将以下公式放入B2并向下绘制: =如果(E2=E1,B1+1,值(文本(E2,“YYMMDD”)和“00”)) 编辑: 如果是未排序的列表,请在B2中使用以下公式并将其向下绘制: =文本(E2,“YYMMDD”)和文本(COUNTIF($E$1:E1,E2),“00”) 或者(如果您希望它作为数字而不是文本):
=值(TEXT(E2,“YYMMDD”)&TEXT(COUNTIF($E$1:E1,E2),“00”)您不能应用既包含日期/时间字符又包含常规整数字符的格式掩码(请参阅),但如果将整数转换为小时数,则可以一次性创建Emp no
Dim i As Long, seq As Long, dayPart As String
With Worksheets("employees")
For i = 2 To .Cells(Rows.Count, "E").End(xlUp).Row
seq = Application.CountIf(.Columns(5).Resize(i - 1, 1), .Cells(i, "E").Value)
dayPart = Format(.Cells(i, "E").Value2 + TimeSerial(seq, 0, 0), _
"yymmddhh")
.Cells(i, "B") = dayPart
Next i
End With
在使用a收集以前匹配日期的数量后,返回的整数将转换为小时数,并添加到雇用日期中。yymmddhh
的格式掩码生成了整个Emp no
诚然,这限制为每天24名新员工
谢谢Jochen,你真是个好人。但如果你不介意的话,还有一个问题,如果两个相似的日期不符合顺序呢。例如(“E2”)=1/1/2016,下面的一个是3/3/2016,下面的第三个单元格是1/1/2016。我在这里怎么办。对不起,我的问题打扰你了。没问题。我编辑了我的解决方案以支持未排序的列表。非常感谢Jochen,我真的不能不感谢您并希望您一切顺利。感谢你。像往常一样,你是用VBA给出很好的简短和切中要害答案的最好的人之一。非常感谢,谢谢。