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