2012-08-31

Excel中A欄顯示計算式,B欄自動顯示數值

在工程數量計算的時候,有時候要顯示計算列式以供第三方檢核使用,要如何做才能自動顯示數值呢?



一般手動作法最快的作法,是將左欄複製,右欄貼上,然後在右欄增加一個"="號,這樣就OK!!

不過若項目很多!這樣的作法就不切實際,或許您會想說,才差個等號,就用字串手法處理,例如[A2]:3+5 那[B2]中就填入"="&A1,不過很慘,Excel認定是純字串而給你顯示 =3+5。

目前在下知道的方式有三個,

1. 利用儲存格的名稱定義來處理:

先想一個你記得住的名稱(中文也可以),就先以ev做範例好了,點選[B2],在下拉式工具表中,找到 插入-名稱-定義 ,點選後會彈出對話框,




對話框中,上頭現有名稱填入ev,下頭參照到填入=EVALUATE(A2),然後按確定。


其中,EVALUATE是Excel巨集中的一個方法,他會將計算式轉換成數值,至於將哪個儲存格的資訊轉成數值呢,是他左邊那個儲存格。之所以一開始先點選[B2]再定義名稱,且指定參照[A2]就是這個用意,若有需要利用$號鎖欄或鎖列,因個人需要自行變通。

定義完後按確定後,[B1] 儲存格並沒有變化,你需要鍵入 =ev,就會有您需要的數據了。其他[B3]以下的也鍵入 =ev,或用拖拉複製等,就可以達到需求。

或許您會想說,那幹嘛不直接在[B2]儲存格打=EVALUATE(A2),你可以試試,應該不行吧,"拍謝"!!EVALUATE這個方法不是Excel內定的函數,沒辦法這樣使用。

2. 利用自建的函數

上頭說到沒法運用 =EVALUATE(A2)來達到需求,不過呢,自己建函數總可以吧,假設我的函數叫 eval(要如何自建函數請參這篇)

Function eval(rng As Range)
    eval = Application.Evaluate(rng.Value)
End Function

這樣您就可以在[B2]利用=eval(A2)來達成數值的顯示了。
這樣的作法比第一種作法好,第一種作法目前只能達到左邊隔壁儲存格的數據顯示,若是要跳一格或兩格....,你就要重新定義名稱嚕。

3. 利用VBA去掃描填入資料

這個方法彈性比較差, 但程式功能比較強,比如計算式中有某些註解以方便檢核等等額外功能,就需要利用程式去篩選註解字串,然後再行運算成數值。像我有個數量計算表的案例,就是利用這樣的作法達成。

2 則留言: