001-自定義函數處理腦殘數據計算

作者:海濤

鏈接:001-自定義函數處理腦殘數據計算 - 沒事兒學點VBA - 知乎專欄

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

最近一個長期不聯繫的,其實是從畢業之後就沒聯繫過的同學找到了我,原因是她最近換工作了,然後新的崗位上遇到了一堆這樣的數據,她有一部分工作就是計算銷售金額,然後匯總形成報表給到老闆,具體表格形式如下:

據說是從國內某個非常著了名的記錄系統中導出來的,每天有數百張之多,每張表的數量有上萬條,據說之前崗位上員工的做法是用計算器手動填寫,有專人負責這個事情,整體是這樣,你可以腦補下工作量有多大。

她接手這個工作之後做了一段時間,實在是忍無可忍了,偶爾的機會聽說我excel用的還可以,終於輾轉反側找到了我,然後訴說了自己的各種凄慘和辛苦。

看到這個第一反應是用個函數解決,替換掉裡面的漢子,然後把數字進行計算,當時也確實寫了一長串函數,給了她之後過了若干分鐘回復說看不懂,不會用,一問才知道對於excel的認知只是這個東西可以存數據,函數只用過sum,那一刻我內心是崩潰的。

後來想了想就採取了簡單粗暴的方法,使用VBA來解決,第一種方式是自定義一個函數,直接選擇單元格,然後返回計算好的結果,為了便於理解還把這個命名成了money。

Public Function money(rng)money = Evaluate(Replace(Replace(Replace(rng.Text, "長", ""), "寬", ""), "價格", ""))End Function

之後直接做成載入項,只需要載入之後後續就可以直接使用了,類似於這樣:

第二種就是直接寫成代碼,考慮的稍稍複雜一些,需要先選中對應要計算的單元格,然後執行代碼,具體代碼如下:

Sub Howmuch()If TypeName(Selection) <> "Range" Then Exit SubIf Selection.Columns.Count > 1 Then Exit SubFor Each Sel In Intersect(Selection, ActiveSheet.UsedRange) Sel.Offset(0, 1).ClearContents Sel.Offset(0, 1) = Evaluate(Replace(Replace(Replace(Sel.Text, "長", ""), "寬", ""), "價格", ""))NextEnd Sub

執行的時候只需要選中對應單元格列就可以迅速出現結果了。

兩種方式都比較適合基礎比較不好的使用者,大大的簡化了操作流程和操作時間。從使用效果上來講我更喜歡使用自定義函數,減少了選取的工作量,同時修改起來比較方便。

這個是「沒事兒學點VBA」的第一篇文章,希望你能喜歡!

最後廣告時間:

最後打一個廣告,如果你需要經常用到excel的各種函數,圖表,透視表等,可以看看我的一些在線課程:

Excel必備魔法函數揭秘:Excel必備魔法函數揭秘【Excel揭秘】

從零開始學會Excel數據透視表:從零開始學會Excel數據透視表

混職場必備10款高逼格圖表課:混職場必備10款高逼格圖表課【excel2013】

給非專業人士的15款數據分析圖表:給非專業人士的15款數據分析圖表

更多課程可以到我的個人主頁:study.163.com/u/zhichan


推薦閱讀:

動態圖表的標籤顯示如何自適應不同類型的指標?
【HR必備】EXCEL字元操作,你只需要學會5個函數
運動散點圖-----powerquery移形換影
學習Power Query,怎能沒有PBIDicts
[E0-02]資料庫思維

TAG:MicrosoftExcel | Excel技巧 | VBA |