员工序列号基于招聘日期

时间:2016-03-16 04:15:49

标签: excel vba excel-vba

enter image description here

请协助修改以下代码。我想要做的是根据招聘日期为每位员工创建唯一的序列号,例如。 on 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

2 个答案:

答案 0 :(得分:1)

如果您的列表按招聘日期排序,您可以将以下公式放入B2中并将其绘制下来:

= IF(E2 = E1,B1 + 1,VALUE(TEXT(E2," YYMMDD")&安培;" 00&#34))

编辑:

如果是未排序的列表,请在B2中使用以下公式并将其绘制下来:

= TEXT(E2," YYMMDD")&安培; TEXT(COUNTIF($ E $ 1:E1,E2)," 00&#34)

或(如果您想要它作为数字而不是文本):

= VALUE(TEXT(E2," YYMMDD")&安培; TEXT(COUNTIF($ E $ 1:E1,E2)," 00&#34))

答案 1 :(得分:0)

您不能应用包含日期/时间字符以及常规整数字符的格式掩码(请参阅Number Format Codes),但如果将整数转换为小时数,则 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

使用COUNTIF function收集以前匹配日期的数量后,返回的整数将转换为TimeSerial的小时数,并添加到招聘日期yymmddhh的格式掩码生成了整个 Emp no

当然,这仅限于每天24名新员工。

emp_no_frequency