發表文章

目前顯示的是有「數量計算」標籤的文章

Excel VBA @數量計算表-2

圖片
有關上回所提到的  Excel VBA @數量計算表  經八河局沈大哥提點,為求符合一般工程使用還是更完善的函數來解決某些問題。 1.數量計算式中需要有中文字以提醒使用者現在正在計算什麼項目。 2.使數量計算式的結果透過函數處理後,如原本連結其他欄位跑出計算結果。 圖一、沈大哥提供的檔案。 P.S: H欄位的黃色網底部分為C1所需要的基本資料,個別註解的部分為單位。 程式運作流程: 1.  E欄填寫 =H18*H9*H15  2.  C欄填寫 =DetailSum(FORMULATEXT(E3) 3.  D欄填寫 =Eval(C3) FORMULATEXT可將參考欄位的公式計算結果轉成公式輸出,屬於Excel的內建函數。 DetailSum可將輸出公式的字串取得其數值跟單位,屬於自訂函數。 Eval可取得計算結果,屬於自訂函數。 有關各項原始碼如下: Function Eval(ByVal s As String) Dim cal As String For i = 1 To Len(s) ch = Mid(s, i, 1) If IsNumeric(ch) Then '判斷是否為數字 cal = cal + ch ElseIf ch = "(" Or ch = "[" Or ch = "{" Then '左括弧 cal = cal + "(" ElseIf ch = ")" Or ch = "]" Or ch = "}" Then '右括弧 cal = cal + ")" ElseIf ch = "+" Or ch = "-" Or ch = "*" Or ch = "/" Then '運算符 cal = cal + ch ElseIf ch = "." Then '其他項目 cal = cal + ch End If Next Eval = A...

Excel VBA @數量計算表

圖片
數量計算表中常在A欄打入計算式,B欄產生結果: 圖一、感謝鑒恩學長提供使用範例。 1.  A欄打計算式,B欄再打一次計算式前面補個"="。 2.  A欄打計算式,設定定義名稱指定到A欄,於參照欄位中使用內建函數Evaluate產生值。      B欄填寫"=AA" 即可產生數值。 圖二、AA定義名稱中的參照為內建函數Evaluate 3.  將第2點的方式再更改成較為精簡的自訂函數。 進入開發人員中→檢視程式碼→新增模組→打入以下程式碼。 Public Function Eval(ByVal s As String)     s = Replace(s, "{", "(")     s = Replace(s, "[", "(")     s = Replace(s, "]", ")")     s = Replace(s, "}", ")")     Eval = Application.Evaluate(s) End Function P.S:因為在使用Evaluate內建函數的時候,他無法偵測小括號"("")" 以外的符號,Ex:{[]},故將程式碼多做一次代換的工作,日後就可以在計算式中比較好辨識優先順序。 日後使用時,一樣在A欄打計算式,B欄打入"=Eval(指定到A欄的儲存格)"即可產生數值囉~ 圖三、自訂函數 圖四、操作範例(A1為計算式,C1為值) 有關更進一步的討論連結在此  Excel VBA @數量計算表-2