王志军
人事部的同事前来求助(如图1),E列是职位升降及留用情况的信息,现在需要对现职位和原岗位进行比较,如果发现现职位和原岗位出现不一致,那么需要在F列填充职位的升降时间,并在G列填充升降明细。除了手工操作之外,有没有简单一些的方法呢?
经过考虑,由于单元格中的职位升降及留用信息并不规范,因此无法直接使用分列功能,建议同事使用VBA代码解决这一问题:按下“Alt+F11”组合键,打开Microsoft Visual Basic for Applications编辑器窗口,依次选择“插入/模块”,在右侧窗格插入一个空白模块(如图2),在这里手工输入或粘贴如下代码:
Sub test()
Set reg = CreateObject("vbscript.regexp")
With reg
.Global = True
.Pattern = "(\d{1,2}\-\d{1,2})(由.*)"
End With
With Sheet1
For Each Rng In .Range("e2:e" & .Cells(Rows.Count, "e").End(xlUp).Row)
Set mat = reg.Execute(Rng.Value)
For Each m In mat
Rng.Offset(, 1) = m.submatches(0)
Rng.Offset(, 2) = m
Next
Next
End With
End Sub
上述代码运用了正则表达式,例如“(\d{1,2}\-\d{1,2})(由.*)”,同时以“由”为关键字进行提取。检查无误之后,选择“文件→关闭并返回到Microsoft Excel”命令,返回Excel主界面,按下“Alt+F8”组合键,打开“宏”对话框,选择并运行test宏,很快就可以得到结果(如图3)。
Ps:相关VBA代码可以关注电脑迷微信(微信号:cpcfan),回复1502VBA2获得下载链接。