Excel VBA之日期篇 4.1 在職時間計算 專為HR量身打造

2021-01-08 Excel和VBA

前景提要

我們終於完成了VBA函數篇的分享,在函數篇中,我們需要的都是一些非常基礎的知識,這些非常基礎的知識,可能大家並不是很感興趣,畢竟能夠解決的問題並不是很多,後面我將會儘量將知識點和實際的場景相結合,儘量幫助大家解決更多的問題,本篇章我們主要分享的是一些日期和時間相關的知識,希望可以解決大家在日常工作中在時間處理上面的一些問題,如果大家有什麼相關的問題,也可以提出來,我儘量幫助大家解決。

場景說明

今天我們要分享的是兩日期之間的計算,這在HR日常的工作中是經常需要用到的,比方說計算某員工在崗多久了,或者說某客戶上次購買產品到現在相差了多久,以此來計算出客戶的購買頻率等,日期之間的計算有很多種不同的結果,有時候我們想要大致的結果,比方說相差多少月,但是有時候我們需要得到兩個日期相差了多少天,這就比較麻煩了,其實我們可以使用datediff來幫助我們實現這個作用,一起來看看例子吧。

比較具有代表性的例子,就是HR日常工作中的在職員工的在崗時間,或者說是工齡計算了,俗話說鐵打的營盤流水的兵,人員流動已經成為了常態,每個員工的入職時間又不盡相同,每次核算員工在崗時間的時候,對於很多的HR來說都是非常頭疼的問題,公司結構比較穩定的還好說,基本上人員流動性不算很大,但是在很多的工廠、車間,人員的流動性就非常的大了,一次10+人員的進進出出,算了一批還有一批,下次核算的時候,又有新人進,舊人走,永遠都是一個頭疼的問題,不要怕,今天小編就來將給為HR帶出苦海

假設現在我們手上有這樣的一份入職人員的登記表,因為各個公司要求不同,可能有時候需要按照天數來結算,有時候有需要按照月份來結算,而在年後的時候,需要發年終獎的時候,就需要按照工齡,就是年來計算了,所以為了方便,小便一次性的將常用的天,月,年三種不同的計算方式都展示出來了,大家各取所需。

首先我們來計算下計算下員工在崗的天數,按照天數來計算的情況也不是沒有,一般比方說業務量大的時候,臨時招聘了一批臨時工,臨時工都是按照天來結算的,這個時候我們就需要得到這些員工在崗工作了多少天,來看代碼

Sub test()

Dim i&

l = Cells(Rows.Count, 7).End(xlUp).Row

For i = 2 To l

Cells(i, 8) = DateDiff("d", Cells(i, 7), Now()) & "天"

Next i

End Sub

看看結果

是不是成功的算出了在崗時間的天數,如果覺得不太相信的話,我們找一個比較好計算的例子,A22,是4-1入職的,小編寫這篇文章的時候是4-15,15-1=14就得到了該員工的在崗時間是14天了,再挑一個遠一點的,A23,3-9入職的,到4-9是正好1個月30天,再加上今天的7天,正好等於37天,所以結果是非常正確的。

那我們繼續,我們來算下入職有多少個月,這個一般用在員工轉正或者是員工考核的時候會使用到,比方說3月轉正,入職半年即6個月之後,需要得到什麼業務水平之類的,我們來看看代碼

Sub test()

Dim i&

l = Cells(Rows.Count, 7).End(xlUp).Row

For i = 2 To l

Cells(i, 9) = DateDiff("m", Cells(i, 7), Now()) & "月"

Next i

End Sub

來看看結果

是不是成功的計算出來了入職有多少月,依然我們挑幾個來檢驗下結果,A23,入職3月,今天是4月,1個月,正確,A21,1-1入職,入職應該是3個月,沒錯,因為4月還沒有過完,所以入職應該是3個月,如果各位HR的算法是本月也算上的話,可以在結果上+1就可以了。

哇,來到了激動人心的時刻了,計算入職多少年了,這個一般都是和年終獎掛鈎的哇,小編小小激動了一下,那麼入職多少年要如何來計算呢?

Sub test()

Dim i&

l = Cells(Rows.Count, 7).End(xlUp).Row

For i = 2 To l

Cells(i, 10) = DateDiff("yyyy", Cells(i, 7), Now()) & "年"

Next i

End Sub

看看結果

準確的得到了我們想要的結果。是不是很完美。

代碼解析

今天的代碼解析,我們主要將兩個知識點,

一個是獲得當前的時間,想要獲得在崗時間,肯定是用今天的日期減去入職的日期了,入職日期已經登記了,那麼今天的日期如何獲取呢?

=Now()

就是這麼簡單,上面的代碼中的每個截圖都提供了當前的時間時間作為參考,以方便大家進行核對。

然後就是兩個時間的相減了,datediff方法

他需要提供三個參數,第一參數就是單位名稱,就是你想要獲得的計算結果的單位名稱,是天,年,月,時,分,秒都可以,不要以為我是瞎說的哦,甚至還可以計算出兩個日期相隔多少個星期,是不是很棒的一個方法呢,常見單位如下,「d」:天「yyyy」:年,「m」:月「h」:小時,「n」:分鐘,「s」:秒

第二個和第三個參數就更加簡單了,就是提供兩個日期,開始日期和結束日期就可以了,記得順序,小的日期在前,大的日期在後。

相關焦點

  • Excel VBA之日期篇 4.4合同到期時間計算 HR必備方法
    前景提要今天我們繼續來分享一些日期方面的問題,今天公司的HR過來找我,向我請教有沒有什麼好的方法能夠快速的計算出合同到期的時間,他說之前我雖然分享過一篇關於計算員工在職時間方面的文章,他也看過,但是他覺得並不適合他的工作場景,因為那個只能計算兩個時間之間差距,現在他反而是有了合同的時效
  • Excel VBA之日期篇 4.2重要日程提醒 讓你不再手忙腳亂
    前景提要昨天和大家分享了計算日期之間的差距的方法,相信能夠在一定的程度上幫助廣大HR工作者在時間計算上面的問題,今天我們繼續前進,日期之間的差距實際上就是日期之間的減法,那麼有減法自然會有加法了,今天我們就來說說日期之間的加法,日期之間的加法又是什麼呢?
  • 作為HR還不會計算員工在職時長?一個簡單的日期函數解決你的問題
    在工作中我們會經常碰到計算工作年限、入職時間在職時長等等。除了使用多個函數組合使用的情況可以計算,下面講解一個excel存在的隱藏函數datedif,你會發現計算時長原來這麼簡單。Datedif日期函數語法:Datedif(開始時間,結束時間,「日期格式」)案例:利用Datedif函數分別計算人員在職年、月、日1、Datedif函數計算入職年份:函數公式:=DATEDIF(B2,C2,"Y")2、Datedif函數計算入職月份:函數公式:=DATEDIF(B2,C2,"M")3、
  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • 「Python替代Excel Vba」系列(終):vba中調用Python
    pd.Grouper(key='Date',freq=date_freq) ,這是 pandas 為處理時間分組提供的處理方式。只需要在 freq 參數傳入字母即可表達你希望按日期的哪個部分進行分組。比如:"M" 表示按月,"Y" 表示按年。最後,定義一個方法,讓vba調用。如下圖:這個方法的上方套上一個 xlwings 的裝飾器 @xw.func。
  • excel日期函數:如何計算項目的開始和完成日期
    在上一篇文章中,我們說到了EDATE、DATEDIF、EOMONTH、WEEKDAY等日期函數,相信大家對於excel中的日期計算,已經有了一個大致的了解,今天我們繼續上篇內容,為大家帶來兩個比較冷門,但又非常好用的日期函數,一起來看看吧!
  • Excel VBA之日期篇 4.6 輕鬆獲得月末日期 財務結算無壓力
    前景提要臨近年關,又來到了每年公司人員流動最大的時候了,尤其是今年受到疫情的影響,很多人都打算提前回家,害怕晚走就不能回家了,但是工作還是要有人做的,那麼公司就不得不請臨時工來幫忙了,臨時工之所謂臨時工,因為都是臨時的,說走就走,來的快走的也快,財務核算全年財務數據的時候就很頭疼了,尤其是月末日期的確定,不方,今天我們來繼續嘗試用VBA獲得準確的月末日期
  • 「Python替代Excel Vba」系列(二):pandas分組統計與操作Excel
    注意看第3和4行數據,他們是並列第3名。並且後面的人是從第5名開始。找出低水平學生現在找出低於所在班級平均分的同學吧。先按班級計算平均分,然後把平均分填到每一行上。df.groupby('班級')['總分'] 就不用說了,與上面的排名是一樣的意思。.transform('mean') ,表示每組求平均。結果是每組都有一個分數。
  • excel根據出生日期自動計算(年齡、星座、生肖)的方法
    在工作辦公中,我們基本都會使用到excel軟體編輯表格,excel軟體中的函數公式可以快速的對表格裡的內容進行計算,從而大大的減輕了我們的工作量。這次小編給大家分享下,根據excel表格裡的出生日期,自動計算年齡、生肖和星座的方法。首先我們先新建一個空白excel表格,表格中創建姓名、出生日期、年齡、星座、生肖單元格。
  • 上海商務辦公培訓班教你excel怎麼計算兩個日期天數差和時間差
    非凡教育商務辦公培訓老師在本文中主要是介紹如何在excel中計算日期和時間,包括兩個日期之間的天數、時間之間的差和顯示樣式。在excel中,兩個日期直接相減就可以得到兩個日期間隔的天數,如下圖:excel怎麼計算兩個日期天數差和時間差
  • excel中如何使用函數計算某個月的最後一天日期
    在處理excel的時候,往往需要根據當前的日期,計算出該月的最後一天日期,下面介紹下如何進行計算。     1、首先打開excel程序,進入主程序界面,在一個單元格中輸入某個日期     2、介紹下計算日期的計算方法,我們要獲取某個月份的最後一天日期,可以考慮獲取下一個月的第一天日期,然後剪去1天就能獲取這個月的最後一天日期
  • HR常用的Excel函數公式大全(共21個),幫你整理齊了!
    蘭色進行了整理編排,於是有了這篇本平臺史上最全HR的Excel公式+數據分析技巧集。>  假如A2中是應稅工資,則計算個稅公式為:  =5*MAX(A2*{0.6,2,4,5,6,7,9}%-{21,91,251,376,761,1346,3016},)  3、工資條公式  =CHOOSE(MOD(ROW(A3),3)+1,工資數據源!
  • VBA編程理論學習之談
    No.1 掌握對象方法和屬性VBA編程是一個即學即用的過程,幾乎不可能全面掌握所有對象的代碼,也不可能記住所有的對象屬性。所以,在實際應用中遇到哪些對象就對應去掌握這些對象的方法和屬性就可以,不需要完全學習。既浪費時間又沒有意義。
  • excel數字結構解析:日期和時間的自動識別規則
    不知道大家有沒有發現這麼一個現象,在excel中輸入一下不太完整的日期或時間,依然能被excel自動識別出來。比如在excel中輸入「19-12-1」,excel會自動顯示「2019/12/1」。那在excel中,識別日期和時間的規則還有哪些呢?我們一起來看看吧!
  • WPS教程:excel新手入門VBA功能使用介紹
    Excel教學:今天和大家分享一下excel中vba的使用方法入門,相信很多使用該軟體的朋友們對此都很感興趣,下面就和大家來分享一下,希望可以幫助到大家。工具/原料電腦:組裝臺式機系統:windows 10專業版版本:WPS Office 2019 PC版方法/步驟1.首先,我要知道商品的單價是12.5,在D1單元格輸入【商品單價】,在D2單元格輸入12.52.接著我們打開vb界面,在常用工具欄上執行:開發工具--visual basic。
  • Excel VBA之函數篇-3.5時間錄入無煩惱
    函數說明 今天我們的功能還是通過VBA自帶的函數來實現,日期函數:date(),很簡單的日期函數,返回的結果就是今天的日期,考慮到錄入數據的過程中,可能某些場景我們也可需要精確到具體的時間,時分秒,所以今天一起介紹下另外一個時間函數,time(),他返回的是現在的時間,時分秒。
  • Excel格式表格中日期、時間之差怎麼計算
    在Excel表格中,日期、時間都可以計算的,利用好了,可以省去大量的工作,今天小編分享在Excel中利用函數計算日期、時間差。情況一:日期計算,利用DATEDIF()函數1、計算兩個日期相差幾年,在E4單元格輸入公式:=DATEDIF(B4,C4,"y");2、計算兩個日期相差幾個月,在E54單元格輸入公式:=DATEDIF(B4,C4,"m");
  • excel函數公式應用:時間日期提取公式匯總,你用過哪些?
    如何快速在一組時間數據中分別提取出年月日、時分秒數據?如何快速計算某日期是年內第幾周、星期幾,以及日期之間間隔的天數、月數、年數、小時數、分鐘數?如何快速補全指定月份日期,合併日期和時間?今天老菜鳥針對上述在日常工作中經常會遇到的問題,總結了20個常用的關於日期和時間的公式,趕緊來看看吧!學習更多技巧,請收藏關注部落窩教育excel圖文教程。
  • 在Excel表格中,日期和時間也可以計算
    ,在Excel中日期和時間可以參與計算的,這樣可以省去不少手要錄入的麻煩,今天小編就和大家分享幾個日期時間的計算,不想加班的小夥伴們,趕快加入【Excel與財務】的學習大軍吧! 一、合併日期和時間 將下圖中日期和時間合併到一列中,變成既有日期又帶時間的數據,只要把日期和時間相加即可,在D4單元格輸入:=B4+C4,然後選中D4單元格雙擊填充柄,即可完成整列合併,演示如下圖:
  • excel怎麼利用vba獲取單元格交叉範圍的數據
    excel中使用vba獲取多個單元格區域的交叉範圍  1、首先我們打開一個工作樣表作為例子。   3、實際上我們用vba可以方便的對這個區域作出選擇。我們使用 alt+f11 組合快捷鍵進入vbe編輯器,插入一個新的模塊,並在模塊中輸入以下代碼:  Option Explicit  Sub quyu()  Dim rng1 As Range  Dim rng2 As Range  Dim rng As Range  Set rng1 = Sheets(1).Range