各位朋友,你們好。今天複盤一個我解決Excel問題的全過程思路。
一、需要的效果最近編寫一個工作中用的工具,需要用到叠代運算(見下圖),當我在【F4】單元格輸入一個數後,需要讓Excel自動将我輸入的數據乘以【F3】的數據,再填寫到【F4】中,即【F4】=【F4】*【F3】。
這就是Excel中的循環引用,在常規情況下會提示錯誤無法計算,若要執行計算,需要在選項中設置【叠代運算】。
叠代運算設置
于是乎,用VBA寫了幾句代碼,以實現這種效果:
但是這個代碼在執行過程中,會出現一個問題:
由于用的是工作表【Change】事件觸發的,隻要【F4】單元格内容改變,就會不停的觸發計算,但是每次計算都會導緻【F4】單元格内容的改變,這就陷入了一個無限循環……這時,即使設置叠代次數為1,都無法避免這個問題……
内容改變觸發的叠代運算,無限循環
問題一:現在需要解決叠代運算的計算次數,隻進行一次計算。
解決思路:通過思考,想到了一個方法,設置一個開關,用來對叠代計算進行控制。
比如:開啟叠代運算第一次計算時,給【L1】單元格賦值為1,開關關閉。當叠代計算代碼執行時,先判斷【L1】單元格的值,當【L1】=1時,就停止計算。同時再設置一個事件,讓【L1】單元格的值恢複為0,來打開這個開關。(即,當L1單元格為0時,開關狀态為開啟,執行第一次叠代運算;在第一次代碼執行時,給L1賦值為1,關閉開關,計算終止;通過SelectChange事件,恢複L1單元格值為0,開啟開關)。【這段話有點繞,實在看不明白就看下圖紅色框中的代碼和注釋吧……】
然後修改代碼如下:
第一個問題成功解決
通過上面的代碼,設置一個開關,控制開關的開啟和關閉狀态,解決了叠代運算計算次數的問題。
現在又出現了第二個問題:
Excel的change事件能判斷單元格内容的改變,但是編輯單元格也會觸發Change事件,即使沒有改變單元格内容,Change事件仍然會認為單元格編輯中改變了内容,要執行運算(實際上,當單元格值未改變時,不應該觸發計算)。問題演示如下:
問題二:現在需要解決編輯單元格時,如果内容沒有改變,則不進行計算。
解決思路:在編輯單元格前,有一個選中單元格的過程,那麼通過SelectChange事件,先記錄選中時單元格的值,然後再和編輯完成後的值做對比,如果兩個值相同,則不進行計算。修改後的代碼如下:
修改後,代碼的執行效果:
這個問題難點在于:
①改變單元格的值才會觸發的計算,但是觸發計算時又會引起單元格改變,再次觸發事件,造成不斷循環;
②在單元格内容沒改變時,不因該觸發計算,如何來判斷單元格編輯前後内容是否有改變。
到此,這個問題完美解決。這就是我在遇到問題時的解決全過程,希望對你們有所幫助。
在工作中,為了提高工作效率、簡化工作流程,把重複的工作内容交給電腦來處理。抽了一個星期的空餘時間編制了一個定額庫工具,用于快速分析項目成本、拆分和統計項目各種材料、統計各工種的工程量及勞務費用……
這個工具全部模拟專業的計價軟件,先錄入公司的各種勞務和材料成本(企業定額) ,然後導入項目預算(投标)清單,再将企業定額通過本工具錄入清單中,計算項目成本和分析各種數據。下面是部分操作演示:
工具演示
點擊項目名稱即可調出(企業)定額查詢錄入工具,通過雙擊項目錄入相應的人工、材料、機械。這次分享的這個問題,就是在編制這個工具的過程中遇到的。但是這個工具還未最終完成,有不少細節待完善(類似本文中遇到的問題,已解決)。
如果你也是從事工程造價工作,有制作一個的企業定額數據庫的想法和需要,那麼可以将你的想法和需求在評論區回複、或者通過私信留言,大家一起交流和探讨。我希望把這個工具做成一個大家都喜歡、并且非常實用的Excel造價工具。
我是上班下班,因為愛好辦公軟件、喜歡分享。所以來到這裡将我的學習心得和踩過的一些坑,和大家聊聊,希望大家學習我成功的經驗,避開我踩過的坑。我和你們一起進步。
好了,今天就聊到這裡,感謝各位朋友的關注和支持。
如果你喜歡我分享的内容,請點個贊支持下;
如果你覺得我分享的内容對你有幫助,可以關注我;
如果要看我以前分享過的好玩的内容,大家可以去我的主頁查看曆史文章。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!