我在Excel中有一個表格,它有列標題名稱(例如data_type1,data_type2等)。該表中的數據根據另一張紙上輸入的參數而變化,並且它們被拉到動態更新的圖表上。Excel命名範圍公式 - 不自動更新
爲了方便使用此工作表的用戶,我添加了一個'用戶指定函數'(non-vba),它也繪製到其中一個圖表上。用戶指定的功能我的意思是我有三個單元格下拉列表。兩個對應於表格標題,一個具有可以在兩個選擇的數據類型之間應用的短操作列表(例如,用戶可以選擇'dataype1','+','datatype2',這將產生兩個我的表格的最後一列)。
用戶指定的功能是通過定義一個命名的「範圍/函數」來使下拉列表與它們各自的列標題匹配,然後調用評估來實現的。請看下圖:
=EVALUATE("="&ADDRESS(ROW('Raw Data'!XFD5),MATCH(user_in1,'Raw Data'!$A$4:$AF$4,0)) & user_operation & ADDRESS(ROW('Raw Data'!XFD5),MATCH(user_in2,'Raw Data'!$A$4:$AF$4,0)))
我也命名爲「user1_result」,然後在我的表的最後一欄輸入= user1_result。這種方法非常好,因爲它的計算速度比通過在VBA中構建UDF然後將該UDF應用於相當長的列中的每個單元格來做同樣的事情要快得多。
現在這裏是我的掛機,它最初可以正常工作,但是如果用戶更改參數影響一個或兩個選定的數據類型,那麼用戶指定的列不會隨更新的數據實時重新計算。如果用戶重新切換任何下拉菜單,數據將重新計算。我猜測這是來自以下兩種情況之一: 1)Excel無法識別'user1_result'的先例已經改變,所以爲了提高效率,不需要重新計算列; 2)在'user1_result'的命名定義中使用的'Evaluate'函數未被檢查用於更新,因爲它不是一個正常的函數(如果試圖將其添加到單元格中,它不會通過intellisense顯示)。
所以我正在尋找一些確認或駁斥這些猜測。在確認的情況下,我希望得到一些關於如何強制用戶指定的列更新的建議,如果它的先例發生變化。
一個解決方案是讓VBA爲我檢查並強制執行計算,但是我想把它作爲最後的手段。所以,非VBA解決方案是首選。
「這不是一個正常的功能」 - 事實上,這是一個黑客。你通過公式欄調用Application.Evaluate。如果您願意處理'Changed'工作表事件以監控您的*先例*的修改,則VBA解決方案將變得非常簡單。 –
@ Mat'sMug謝謝您對評估的澄清!我同意VBA解決方案是最簡單的,但是這個工具的要求是它不需要啓用宏。你已經慢跑了我的思維過程,我想我有一個解決方案。我已經添加了兩件事: 在第一行數據上有一個countif的單元格,如果它沒有關係,那麼這個單元格會計數。 如果countif單元格=自身,則運行user1_result的條件。這樣任何參數更新都會觸發countif,它會觸發條件並重新計算。 感謝大腦慢跑! – fallengyro