我在excel某格子里輸入一個公式,設置一個變數,以後只輸入變數就好了?
比如某個格子我輸入一個公式x/60*175,我設定這麼一個公式之後,我以後只要在格子里輸入變數x,比如輸入60,然後就格子里自己計算出結果,等於175這樣子,要怎麼設置
使用VBA的事件處理(Change事件)可以實現這個功能,不過要綜合考慮以下多個因素,才能保證程序穩定:
(1) 如果樓主只是希望在某個特定單元格中實現重算功能,那麼應該在Change事件中對Target參數進行判斷,只有當其地址與該單元格相符時,才執行重算;
(2)在Change事件中必須注意「事件級聯」可能造成的後果,合理設置Application.enableEvents。
(3)Change事件雖然對應「單元格內容變化」,但只要用戶雙擊了單元格,哪怕沒有進行任何更改,也會引發Change事件處理程序,導致重算。所以需要程序能夠「記住」該單元格在被雙擊之前的數值,才能通過比較來判斷用戶是否真的修改了其內容。
(4)由於除以175這個動作很可能造成多位乃至無限小數,所以如果用等號執行(3)中的比較,很可能因為浮點數舍入問題造成錯誤。因此建議改用減法進行比較。
下面是假設C2單元格為需要重算的區域,給出的代碼:
關於事件響應特別是「事件級聯」的問題,可以參見《全民一起VBA 之 提高篇》中第二十二回「巧用事件實現自動跳轉,慎寫代碼謹防無限級聯」(網址:全民一起VBA提高篇(Excel數據處理) - 網易雲課堂 )。而關於靜態變數的內容,可以參見《提高篇》第三十二回 「Select 簡化分枝結構,靜態變數坐看滄海桑田」 。
最後補充一句:使用靜態變數記憶單元格原來的數值其實也不完全可靠,比如在工作簿剛打開時該靜態變數尚未賦值,視作為零。因此用戶第一次雙擊C2後如果不修改單元格內容,也會發生自動重算。所以如果想完美的解決問題,可能還需要針對靜態變數本身做一些代碼,比如把它調整為模塊級變數,然後在Workbook_Open中將其賦值為C2單元格的數值等等。不過即使如此,假如發生VBA工程中止等情況,靜態變數也會被註銷清空。所以我個人非常贊同前面 黑臉鬍子 的建議,如果能用 兩個單元格+公式 解決,盡量不要用工作表事件。
這種事不需要上vba,改變一下你的習慣就好了。
默認excel打開時候為什麼會有3張表?正確的用法是,第一個表裡面放入你各種要設定的輸入變數,下拉列表,查詢條件表等等,各表之間有一個分隔就可以。如果為了方便,可以用公式-定義名稱來圈定範圍並定個別名,省的後面引用單元格或者表的時候寫一長串麻煩。
第二張表用來放符合格式的原始數據,至於怎麼樣的格式合適,等你用上透視表的時候就能體會了,用函數也類似的。注意的是最好把檢索的主關鍵欄位放在第一位,便於直接用vlookup函數(其它方式不是不可以,但比這多幾步,影響效率)
第三張表才是你用來操作和展示的地方,這裡的公式需要的數據從第二表引用,需要輸入、可變數等等從第一表引用(或者直接寫自定義的名)
養成好習慣,即使數據很少也盡量別把這些放一張表裡面。excel不差這點位置,但這麼正確做了,修改的效率會高很多。
分兩個單元格吧,這種問題沒必要糾結.
就像某位大神說的,EXCEL那麼多單元格,還怕用完了?
題主想要在一個格子里實現,技術上是可以的,但是效果不一定是你滿意的。
因為這裡面有一個迭代的效果,你輸入60,Excel自動計算將60變為175,沒問題!
但是變為175後,系統會認為175是後面輸入的,同樣會將其按照同樣的方式變成175/60*175=510.4
那麼510.4又按照同樣的邏輯迭代下去,結果就是永無止境,無法計算。
下面是用公式在兩個單元格中實現的效果:
輸入啥計算啥,設計好表格,簡單明了方便。不喜歡可以將輸入端的文字設計成和底色一樣用來影藏。
下面是用VBA中的selectionchange事件實現的同一單元格中的自動計算:
可以看到,每當單元格變動的時候就會重新計算一次,無法保存原來的數據。當然也可以藉助其他單元格存儲變換次數限制其只變一次,但是完全沒有那種必要,加大了工作量實現用公式相同的效果,何必多次一舉。
所以建議題主還是用第一種公式的,如果是有其他特殊要求,考慮在第二種方式上改一改。還有什麼問題歡迎私信!
瀉藥
扎心了
我正在自學這個…用VBA自定義函數,通過事件來觸發
你這個要通過VBA來實現
推薦閱讀:
※Excel怎麼篩選出特定的格式數據,例如:篩選出有縮進格式的數據?
※excel 如何篩選一列中的特定序列的數組?
※Excel遇到困難,求大神啊。?
※vlookup為什麼這樣寫不對?
※excel裡面的VLOOKUP和LOOKUP有什麼區別?
TAG:MicrosoftExcel | Excel公式 | 個人諮詢 | Excel使用 |