Vba 基于雇用日期的员工序列号

Vba 基于雇用日期的员工序列号,vba,excel,Vba,Excel,请协助修改以下代码。我想做的是根据每个员工的雇佣日期为他们创建唯一的序列号,例如,在2016年1月13日雇佣的,序列号带有最后两个数字(年、月、日+00),这意味着在同一天雇佣的员工(16011300),而(年、月、日+01)意味着(16011301)同一天雇佣的第二个人。对那些在不同日子被雇佣的人做同样的事情。请看下面的图片,第一个是代码的作用,第二个是我希望它是什么。提前感谢您的帮助 使用的代码: Dim myDate As Date, i As Long, dayPart As Str

请协助修改以下代码。我想做的是根据每个员工的雇佣日期为他们创建唯一的序列号,例如,在2016年1月13日雇佣的,序列号带有最后两个数字(年、月、日+00),这意味着在同一天雇佣的员工(16011300),而(年、月、日+01)意味着(16011301)同一天雇佣的第二个人。对那些在不同日子被雇佣的人做同样的事情。请看下面的图片,第一个是代码的作用,第二个是我希望它是什么。提前感谢您的帮助 使用的代码:

  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给出很好的简短和切中要害答案的最好的人之一。非常感谢,谢谢。