tft每日頭條

 > 生活

 > vba如何找對應的工作表

vba如何找對應的工作表

生活 更新时间:2025-02-09 20:50:53
突如其來的小需求

哼着小曲等待着下班的時候,領導突然走過來提了一個需求,統計每位員工共計上班的天數,原始數據及最終期望結果如下圖所示(僅展示部分員工數據)。班期指的是員工在每周内需要上班的時間,如:趙錢,班期為257,在開始時間2.28日至結束時間3.22日之間的星期二、星期五、星期天得上班。初看到需求的時候是崩潰的,總不能對着日曆一天天去數吧,而且每個員工的開始時間與結束時間都不一緻,也沒有合适的函數去處理這種情況,幸好萬能的VBA技術可以解決一切難題。

vba如何找對應的工作表(VBA那點事之自動排班)1

分析一波

在撸代碼之前,先整理了下思路,大緻流程如下:先利用一個For循環,取單個員工開始日期至結束日期之間的每一天,利用函數将日期裝轉換成星期,InStr判斷星期是否在班期内,若在則将日期、員工信息寫入新的表格,若不在,則進入下一天;單個員工結束後,在循環下一個員工,直至所有員工上班時間被取出。

vba如何找對應的工作表(VBA那點事之自動排班)2

點擊【開發工具】-【Visual Basic】—右鍵“ThisWorkbook”—“插入”—“模塊”,輸入以上代碼,代碼整體思路在前面說過,這裡簡單解釋下。第三行“Application.ScreenUpdating = False”表示關閉屏幕更新,這樣代碼運行速度會大大提高,别忘了在程序尾部開啟即可(第32行打開屏幕更新)。第7行至第11行,先判斷了“排班明細”插頁是否有曆史遺留數據,如果有則清除,沒有則跳轉到“100”,執行後面程序,兩個關鍵函數,WEEKDAY()将日期轉換成星期,如WEEKDAY(2019/2/22,2)=2,在利用InStr(開始位置,接受搜索的字符串,被搜索的字符串)函數判斷星期是否在班期内,符合條件的數據我們放置于插頁“排班明細”中,最終結果展示如下圖。

vba如何找對應的工作表(VBA那點事之自動排班)3

上面我們已經篩選出每位員工在周期内的上班時間,這裡隻需一個透視表即可彙總統計各員工的上班總天數,透視表也用VBA來實現,萬一哪天領導又甩了個需求,這樣我們也能快速的解決,一勞永逸~

透視表彙總數據

vba如何找對應的工作表(VBA那點事之自動排班)4

透視表大家可以用錄制宏的功能實現,修改參數即可,由于數據總行數的不确定,先用代碼獲取總行數,第7行“f = Worksheets("排班明細").Cells(Rows.Count, 1).End(xlUp).Row”獲取表格的總行數,第10行“"排班明細!R1C1:R" & f & "C3"”,代表透視表的範圍為第1行第1列至第f行第3列,下來代碼的意思就是将“姓名”放入行便簽,“上班日期”放入列标簽,并采用計數的方式,這樣,每位員工上班總天數就統計出來啦~代碼中有幾處“ _”,大家可能會疑惑,這裡是換行的意思,一行代碼過長,可分行抒寫,隻不過需要在上行代碼尾部添加“ _”即可。

vba如何找對應的工作表(VBA那點事之自動排班)5

VBA的好用之處在于提高工作效率,避免重複勞動,可以完成函數無法實現的功能,值得大家學習,歡迎互相讨論。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved