前景提要
今日廣州依然傾盤大雨讶泰,小編下去買個午餐的功夫回來就被淋濕了馒闷,這天氣啊归榕!
可能是最近小編寫的關(guān)于HR方面的文章有點多了尸红,不少的童鞋在后臺私信我希望能夠分享一些更多的HR工作中一些技巧,他們也是希望能夠拜托天天算數(shù)據(jù)刹泄,對數(shù)據(jù)外里,這樣的繁瑣工作,HR雖然主要的工作還是人事方面的管理特石,但是在日常的工作中也是需要面對各種繁瑣數(shù)據(jù)的處理和計算的盅蝗,比方說小編之前喜寫過的幾個文章,在這樣的情況姆蘸,所以小編就單獨開一個番外篇吧墩莫,專門分享一下小編日常工作中如何用VBA幫助一些HR解決問題。
方法分析
今天的這些方法逞敷,主要集中在員工個人信息方面的一些處理狂秦,比方說性別,年齡推捐,出生年月日等裂问,同時順帶分享一個我收藏了好久的大招,籍貫的處理牛柒,這個需求是非常的偏門少見的愕秫,所以我當(dāng)初也是百度了很久,翻遍了N多資料才找到的焰络,今天分享給大家戴甩。今天主要涉及的一些文本方面的處理,大家可以趁機復(fù)習(xí)下文本方面的處理方法闪彼,同時也可以了解到簡單的函數(shù)在工作中扮演的重要作用甜孤。
場景模擬
假設(shè)我們手上的這份表是這樣子的,我們有了公司現(xiàn)在的部分員工的數(shù)據(jù)畏腕,這些數(shù)據(jù)都是從員工的簡歷上面獲取的缴川,這兩個數(shù)據(jù)是肯定不會不錯的,現(xiàn)在HR需要做一份全公司所有的員工的信息表描馅,比方說獲得對方的年齡把夸,性別,生日铭污,籍貫恋日,那么我們需要如何用VBA來一步步實現(xiàn)呢膀篮?
我們來看看代碼
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
來看看看效果
是不是很完美呢
代碼解析
今天的代碼看起來比較的長,但是其實也沒有多少太復(fù)雜的東西岂膳,都非常的簡單誓竿,都是我們之前學(xué)習(xí)或者分享過的知識點,我們大致來說下
arr = Range(Cells(2, 2), Cells(5404, 2))
arr = WorksheetFunction.Transpose(arr)
這段代碼的意思是獲得一個數(shù)組谈截,數(shù)組的方法雖然沒有詳細(xì)的說明筷屡,但是我們已經(jīng)在之前分享過很多次數(shù)組的構(gòu)造方法了,相信大家已經(jīng)會了簸喂。
然后我們開始進行遍歷
BOG = Right(Cells(i, "e"), 1) Mod 2
這里有一個方法需要大家學(xué)習(xí)下毙死,我們通過身份證判斷性別的時候,通常都是判斷證件最后一位數(shù)是奇數(shù)還是偶數(shù)的喻鳄,這個奇偶數(shù)的判斷规哲,就可以通過mod來實現(xiàn),mod在其他的語言中也存在诽表,是整除的意思,比方說python語句中也有這樣的方法隅肥,能夠被2整除竿奏,那就是偶數(shù),代表是女性腥放,不能被2整除那就是男性泛啸。這里我們先得到身份證最后最后一數(shù)除以2的結(jié)果,保存下來
Bir = Mid(Cells(i, "e"), 7, 8)
然后獲得生日的8位數(shù)秃症,這個用mid函數(shù)就可以了候址。
SixNum = Int(Left(Cells(i, "e"), 6))
因為我們后面需要獲得員工的籍貫的歸屬地,而籍貫都是通過前面6位數(shù)來獲得分析的种柑,而籍貫表也是小編千辛萬苦找了很久才找到的岗仑,這里就直接分享給大家了,需要的童鞋可以成為我的粉絲聚请,然后私信:籍貫表荠雕,就可以得到這個表了
之后就是簡單的text函數(shù),datediff函數(shù)了驶赏,這兩個都非常的簡單炸卑。
重點來說下最后一個match方法,這是數(shù)組中快速尋找對應(yīng)匹配值的方法煤傍,他能夠找到對應(yīng)的數(shù)字在數(shù)字中的位置盖文,注意,這里返回的結(jié)果是位置蚯姆,我們來調(diào)試看看結(jié)果
r = Application.WorksheetFunction.Match(SixNum, arr, 0)
110101在數(shù)組中是第一個位置五续,是不是這樣呢洒敏,來看看數(shù)組
經(jīng)過驗證時沒有錯的
有了位置之后我們就可以得到對應(yīng)的區(qū)域了,因為標(biāo)題行本身占了一行返帕,所以我們得到位置之后加1桐玻,就是區(qū)域所在的單元格位置了。
Cells(i, "i") = Cells(r + 1, 3)