前景提要
今日廣州依然傾盤大雨,小編下去買個午餐的功夫回來就被淋濕了,這天氣??!
可能是最近小編寫的關于HR方面的文章有點多了,不少的童鞋在后臺私信我希望能夠分享一些更多的HR工作中一些技巧,他們也是希望能夠拜托天天算數據,對數據,這樣的繁瑣工作,HR雖然主要的工作還是人事方面的管理,但是在日常的工作中也是需要面對各種繁瑣數據的處理和計算的,比方說小編之前喜寫過的幾個文章,在這樣的情況,所以小編就單獨開一個番外篇吧,專門分享一下小編日常工作中如何用VBA幫助一些HR解決問題。
方法分析
今天的這些方法,主要集中在員工個人信息方面的一些處理,比方說性別,年齡,出生年月日等,同時順帶分享一個我收藏了好久的大招,籍貫的處理,這個需求是非常的偏門少見的,所以我當初也是百度了很久,翻遍了N多資料才找到的,今天分享給大家。今天主要涉及的一些文本方面的處理,大家可以趁機復習下文本方面的處理方法,同時也可以了解到簡單的函數在工作中扮演的重要作用。
場景模擬
假設我們手上的這份表是這樣子的,我們有了公司現在的部分員工的數據,這些數據都是從員工的簡歷上面獲取的,這兩個數據是肯定不會不錯的,現在HR需要做一份全公司所有的員工的信息表,比方說獲得對方的年齡,性別,生日,籍貫,那么我們需要如何用VBA來一步步實現呢?
我們來看看代碼
Sub test()
Dim i&, sth As Worksheet, arr
arr = Range(Cells(2, 2), Cells(5404, 2))
arr = WorksheetFunction.Transpose(arr)
For i = 2 To 11
BOG = Right(Cells(i, "e"), 1) Mod 2
Bir = Mid(Cells(i, "e"), 7, 8)
SixNum = Int(Left(Cells(i, "e"), 6))
If BOG = 0 Then
Cells(i, "f") = "女"
Else
Cells(i, "f") = "男"
End If
Cells(i, "g") = WorksheetFunction.text(Bir, "0-00-00")
Cells(i, "h") = DateDiff("yyyy", Cells(i, "g"), Now)
r = Application.WorksheetFunction.Match(SixNum, arr, 0)
Cells(i, "i") = Cells(r + 1, 3)
Next i
End Sub
來看看看效果
是不是很完美呢
代碼解析
今天的代碼看起來比較的長,但是其實也沒有多少太復雜的東西,都非常的簡單,都是我們之前學習或者分享過的知識點,我們大致來說下
arr = Range(Cells(2, 2), Cells(5404, 2))
arr = WorksheetFunction.Transpose(arr)
這段代碼的意思是獲得一個數組,數組的方法雖然沒有詳細的說明,但是我們已經在之前分享過很多次數組的構造方法了,相信大家已經會了。
然后我們開始進行遍歷
BOG = Right(Cells(i, "e"), 1) Mod 2
這里有一個方法需要大家學習下,我們通過身份證判斷性別的時候,通常都是判斷證件最后一位數是奇數還是偶數的,這個奇偶數的判斷,就可以通過mod來實現,mod在其他的語言中也存在,是整除的意思,比方說python語句中也有這樣的方法,能夠被2整除,那就是偶數,代表是女性,不能被2整除那就是男性。這里我們先得到身份證最后最后一數除以2的結果,保存下來
Bir = Mid(Cells(i, "e"), 7, 8)
然后獲得生日的8位數,這個用mid函數就可以了。
SixNum = Int(Left(Cells(i, "e"), 6))
因為我們后面需要獲得員工的籍貫的歸屬地,而籍貫都是通過前面6位數來獲得分析的,而籍貫表也是小編千辛萬苦找了很久才找到的,這里就直接分享給大家了,需要的童鞋可以成為我的粉絲,然后私信:籍貫表,就可以得到這個表了
之后就是簡單的text函數,datediff函數了,這兩個都非常的簡單。
重點來說下最后一個match方法,這是數組中快速尋找對應匹配值的方法,他能夠找到對應的數字在數字中的位置,注意,這里返回的結果是位置,我們來調試看看結果
r = Application.WorksheetFunction.Match(SixNum, arr, 0)
110101在數組中是第一個位置,是不是這樣呢,來看看數組
經過驗證時沒有錯的
有了位置之后我們就可以得到對應的區域了,因為標題行本身占了一行,所以我們得到位置之后加1,就是區域所在的單元格位置了。
Cells(i, "i") = Cells(r + 1, 3)