各位朋友,你們好。(本文文字較多。絕大部分文字可以直接一帶而過,看動圖演示即可)
今天和大家分享個不是所有人都需要(比如我的行業是工程造價,在用excel計算工程量的時候,就會經常用到)的功能:将表達式轉化為結果(如下圖所示)
表達式轉結果
對于這個問題。我們有三種方式可以實現:
1、基礎操作;2、函數公式;3、VBA自定義函數。
接下來我分别給大家演示這三種方法:
基礎操作是利用分列功能實現的,有兩種方式可以實現效果,大家直接看動圖演示:
1、使用【轉換Lotus 1-2-3公式】
轉換Lotus 1-2-3公式
2、通過添加等号的方式
表達式前添加等号,然後分列
這裡需要給大家介紹一個函數【EVALUATE】:
這個函數在微軟的Excel中,是宏表函數,要在工作表中使用,就必須先把函數定義成名稱;
這個函數在WPS中,是工作表函數,直接在工作表中就可以使用。
所以,有些朋友收到别人用WPS做的文件時,如果對方在工作表中用了這個函數,就會造成結果錯誤。
接下來我們還是用動圖給大家演示效果:
1、用EVALUATE函數
定義名稱方式實現
2、計算式中有注釋的情況
計算式中帶注釋
遇到上圖中的情況,我們也可以用EVALUATE函數實現,隻是公式變複雜了:
=EVALUATE(SUBSTITUTE(SUBSTITUTE($A1,"【","*ISTEXT(""【"),"】","】"")"))
我們根據公式使用的三個函數,來分解這個很長的公式組合(從裡往外分解):
1、結果1 =SUBSTITUTE($A1,"【","*ISTEXT(""【")="198*ISTEXT(""【長】*138*ISTEXT(""【寬】"
目的:将左邊的“【”,用SUBStitute函數替換成"*ISTEXT(""【",即添加一個ISTEXT函數在注釋符号前面;
2、結果2=SUBSTITUTE(結果1,"】","】"")")="198*ISTEXT(""【長】"")*138*ISTEXT(""【寬】"")"
目的:在後面的“】”後,添加一個括号,這個括号是ISTEXT函數的括号。從第2步的分解可以看出來,通過替換,将注釋内容放到了ISTEXT函數裡面了。
3、結果3=EVALUATE(結果2)=198*ISTEXT(""【長】"")*138*ISTEXT(""【寬】"")=198*1*238*1
目的:通過ISTEXT函數判斷被分離出來的注釋部分,判斷出是文本格式,得到結果TRUE,轉換為數值即為1。
我們用動圖演示下效果:
定義複雜的公式
看到這裡 ,有人會有疑問:既然通過函數公式完美解決了帶注釋的計算式計算的問題。還有必要用VBA嗎?
我大答案是:很有必要,原因有以下幾點:
所以,給各位普及下用VBA自己寫一個函數:
1、定義一個解決不帶注釋計算式的函數,代碼如下(代碼要放在模塊中):
Function Value1(Rng As Range, i As Integer)
Dim a As Double, Str As String '申明變量
Str = "(" & Rng & ")" '将表達式用括号括起來
a = Application.Evaluate(Str) '用EVALUATE函數計算結果
Value1 = Application.Round(a, i) '設置小數位數
End Function
這個代碼包含以下信息:
定義的函數名稱為:Value1,
這個函數包含兩個參數:Rng是引用的單元格,i是要保留的小數位數
初級自定義函數
通過幾句簡單的代碼 ,我們就多了一個可以使用的函數,是不是很神奇?其實,微軟内置的函數也是這樣一個一個用代碼寫出來的。隻是内置的函數代碼更複雜,且代碼是經過封裝的。
2、計算帶注釋的計算式,代碼怎麼寫呢?
從上面動圖可以看出來,簡單的自定義函數,就像簡單的定義名稱公式一樣,不能進行更複雜的判斷,所以,要計算帶注釋的計算式,還需要添加幾句處理注釋信息的代碼:
增加了幾句用于判斷【】符号的代碼,大家從動圖直接看效果:
升級版自定義函數
設置自定義函數的優勢:
在有些時候,計算比較複雜内容時,會造成計算式特别長,EXCEL中,如果計算式長度達到255字符時,就無法再執行計算了,這時,我們就需要一個更高級的自定義函數,不受計算式長度的影響。
剛好,我在工作中寫過這麼一個自定義函數,可以實現。
由于函數代碼較多,有150餘行,不方便貼在文章裡面,有需要的朋友,關注我,然後私信發送關鍵字【表達式計算】獲取代碼,代碼中有注釋,大家可以參考。我給大家演示效果:
可以計算3萬多字符計算式的函數
這個函數可以計算超級長的計算式。演示中字符串長度到3萬多,提示錯誤,并不是函數不支持那麼多的計算,而是計算式的字符數超過了單元格容量的限制了。由于計算式出錯,導緻公式計算結果的錯誤。
最後再說下:需要代碼的朋友,可以關注我後,私信發送關鍵字【表達式計算】獲取文件和代碼。
好了,今天就到這裡,感謝各位朋友的關注和支持。
如果你喜歡我分享的内容,請點個贊支持下;
如果你覺得我分享的内容對你有幫助,可以關注我;
如果要看我以前分享過的好玩的内容,大家可以去我的主頁查看曆史文章。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!