場景模擬
今天的這些方法,主要集中在員工個人信息方面的一些處理,比方說性別,年齡,出生年月日等,同時順帶分享一個我收藏了好久的大招,籍貫的處理,這個需求是非常的偏門少見的,所以我當初也是百度了很久,翻遍了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)