tft每日頭條

 > 科技

 > 計算式怎麼轉換成運算結果

計算式怎麼轉換成運算結果

科技 更新时间:2025-01-19 22:13:19

各位朋友,你們好。(本文文字較多。絕大部分文字可以直接一帶而過,看動圖演示即可)

今天和大家分享個不是所有人都需要(比如我的行業是工程造價,在用excel計算工程量的時候,就會經常用到)的功能:将表達式轉化為結果(如下圖所示)

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)1

表達式轉結果


對于這個問題。我們有三種方式可以實現:

1、基礎操作;2、函數公式;3、VBA自定義函數。

接下來我分别給大家演示這三種方法:


一、基礎操作

基礎操作是利用分列功能實現的,有兩種方式可以實現效果,大家直接看動圖演示:

1、使用【轉換Lotus 1-2-3公式】

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)2

轉換Lotus 1-2-3公式

2、通過添加等号的方式

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)3

表達式前添加等号,然後分列


二、函數公式

這裡需要給大家介紹一個函數【EVALUATE】:

這個函數在微軟的Excel中,是宏表函數,要在工作表中使用,就必須先把函數定義成名稱;

這個函數在WPS中,是工作表函數,直接在工作表中就可以使用。

所以,有些朋友收到别人用WPS做的文件時,如果對方在工作表中用了這個函數,就會造成結果錯誤。

接下來我們還是用動圖給大家演示效果:

1、用EVALUATE函數

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)4

定義名稱方式實現

2、計算式中有注釋的情況

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)5

計算式中帶注釋

遇到上圖中的情況,我們也可以用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。

我們用動圖演示下效果:

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)6

定義複雜的公式


三、VBA方式

看到這裡 ,有人會有疑問:既然通過函數公式完美解決了帶注釋的計算式計算的問題。還有必要用VBA嗎?

我大答案是:很有必要,原因有以下幾點:

  1. 定義名稱對表格的位置要求限制得很緊,修改表格的布局,有可能導緻重新修改定義名稱中的公式;
  2. 此處一張工作表定義了一個名稱,如果有多張工作表都是這樣的數據要執行計算,那麼定義的名稱會非常多,不僅不便于管理,還會在使用中造成混亂;

所以,給各位普及下用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是要保留的小數位數

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)7

初級自定義函數

通過幾句簡單的代碼 ,我們就多了一個可以使用的函數,是不是很神奇?其實,微軟内置的函數也是這樣一個一個用代碼寫出來的。隻是内置的函數代碼更複雜,且代碼是經過封裝的。


2、計算帶注釋的計算式,代碼怎麼寫呢?

從上面動圖可以看出來,簡單的自定義函數,就像簡單的定義名稱公式一樣,不能進行更複雜的判斷,所以,要計算帶注釋的計算式,還需要添加幾句處理注釋信息的代碼:

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)8

增加了幾句用于判斷【】符号的代碼,大家從動圖直接看效果:

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)9

升級版自定義函數


設置自定義函數的優勢:

  1. 操作方便,就像使用内置函數一樣 ,可以在此工作薄的任意工作表使用,不受表格設計上的限制;
  2. 将函數代碼放在了文件的模塊裡面,把文件複制給其他人的時候,也能正常打開并使用這個函數;

四、複雜情況下的計算式

在有些時候,計算比較複雜内容時,會造成計算式特别長,EXCEL中,如果計算式長度達到255字符時,就無法再執行計算了,這時,我們就需要一個更高級的自定義函數,不受計算式長度的影響。

剛好,我在工作中寫過這麼一個自定義函數,可以實現。

由于函數代碼較多,有150餘行,不方便貼在文章裡面,有需要的朋友,關注我,然後私信發送關鍵字【表達式計算】獲取代碼,代碼中有注釋,大家可以參考。我給大家演示效果:

計算式怎麼轉換成運算結果(計算式轉結果的三種方法)10

可以計算3萬多字符計算式的函數

這個函數可以計算超級長的計算式。演示中字符串長度到3萬多,提示錯誤,并不是函數不支持那麼多的計算,而是計算式的字符數超過了單元格容量的限制了。由于計算式出錯,導緻公式計算結果的錯誤。


最後再說下:需要代碼的朋友,可以關注我後,私信發送關鍵字【表達式計算】獲取文件和代碼。

好了,今天就到這裡,感謝各位朋友的關注和支持。

如果你喜歡我分享的内容,請點個贊支持下;

如果你覺得我分享的内容對你有幫助,可以關注我;

如果要看我以前分享過的好玩的内容,大家可以去我的主頁查看曆史文章。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved