Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數據處理軟件。 Excel界曾經流行的一個經典問題是求算式計算結果。這個問題的源頭很可能來自于工程預算工作。工程預算中的材料規格經常用算式表達,比如2*2、40*50、3.14*15*15等等。預算人員需要把這些算式計算出結果。類似的問題如下圖一,第2行算式為1+1,計算結果應為2。盡管算式是小學水平,但表格若有上千行算式,逐行計算手工填列結果非常費時。 ? ?? 經典問題的經典解法是,使用宏表函數EVALUATE。宏表函數EVALUATE經過定義名稱才能在工作表使用。假如算式和計算結果的列相對位置發生變化時,不能直接修改公式,而是要再次定義名稱,相當不便。? Excelman認為使用自定義函數是不錯的替代方法。下面是自定義函數EVALUATEVBA的代碼。函數的代碼只有三行!諸位幾乎不需要考慮任何VBA代碼邏輯,簡單易用。總之,名副其實拿來即用!? 代碼如下:?Public Function EVALUATEVBA (ByVal s As String) As Variant? ? EVALUATEVBA = Application.Evaluate(s)End Function? 自定義函數EVALUATEVBA怎么樣使用呢?? 先把自定義函數的三行代碼添加到工作簿的模塊中。之后就能在工作簿里使用自定義函數EVALUATEVBA了。代碼添加到工作簿的模塊具體操作步驟請看下圖二。? ?? 那么,函數EVALUATEVBA有什么作用呢?它的作用與宏表函數EVALUATE相似,但用起來方便多啦!? 比如上述圖一求算式的計算結果問題,B1單元格直接填寫公式 =evaluatevba(A2),向下填充公式,OK!?? ?? 之前Excelman在窩窩的微信公眾號發表過一篇《奇招解難題,另類使用Max函數求最大值》。(請點擊教程最下面左下角的“閱讀原文”訪問)。文中表妹的問題若用EVALUATEVBA,做法來得更直接。? 如圖四,要求從B列的裝箱號“1,3,4,5”得到最大值5顯示在C列的裝箱號最大值。C1單元格填寫公式 =evaluatevba("=max({"&B2&"})") 或=MAX(evaluatevba("{"&B2&"}")),向下填充公式,又OK!?? ?? 從=MAX(evaluatevba("{"&B2&"}"))這個公式可以看出,自定義函數evaluatevba和宏表函數evaluate一樣,可以將符合數組書寫規則的字符文本,如“{1,3,4,5}”這樣的字符文本,轉為讓Excel函數能夠識別的作為計算數據的數組。? Evaluatevba有時給填充公式提供相當大的便利。比如下圖四,假設工作簿中有名為“1月、2月、3月”的工作表,A列列示的是工作表名,現在需要在B列分別計算出3個工作表B列的數量(數字)的合計數。可以這樣做:B2單元格填寫公式?=evaluatevba("=SUM('"&A2&"'!B:B)")&T(NOW())? 然后向下填充公式。T(NOW())的作用是令Excel在工作表數據變動時重新計算更新計算結果。B2單元格的公式,其效果與 =SUM('1月'!B:B) 相同,但是使用自定義函數EVALUATEVBA的好處是可以直接向下復制填充公式。?? ?? 請大家試試簡單易用的自定義函數EVALUATEVBA吧,如果喜歡,為我點個贊。
Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |