
我想在一定範圍內添加公式的組成部分。我們有一個部分顯示特定項目和多個特定項目的淨現金流量。
例如,=8+9-5
在多個儲存格中顯示“12”。如果這些值不是在單元格級別上進行淨值化的,則可以輕鬆使用公式SUMIF
僅添加正值和負值單元格,但由於它是在單元格級別上進行淨值化的,所以我正在嘗試深入研究基礎值並使用與SUMIF
公式等效,但適用於所有基礎組件。
對於上面的範例,我試圖取得一個表示「+17」的範圍的總計儲存格,以及一個顯示「-5」的儲存格。
我怎樣才能做到這一點?
答案1
最重要的問題是如何從工作表存取另一個單元格的公式字串。沒有現有的工作表函數可以執行此操作。因此,您必須先執行以下兩件事之一:1)使用查找和替換來更改單元格的內容,以便它們不再保存公式而是保存字串,或者 2)使用 VBA訪問單元格的公式字串。
(1) 可以透過選擇要操作的儲存格然後按Ctrl+H開啟「取代」對話方塊來完成。搜尋=
(假設您感興趣的唯一公式與您的範例類似,並且不包含後續的等號),然後不替換任何內容。這會將公式=8+9-5
顯示值 12 的儲存格變更為顯示字串 的儲存格8+9-5
。
(2)可以透過存取單元格屬性來完成.Formula
。例如,要取得儲存格 A1 的公式,您可以使用非常簡單的 UDF,如下所示:
Public Function GetFormula(r as Range) as String
GetFormula = r.Formula
End Function
一旦獲得這些字串,無論透過哪種方法,您都必須巧妙地使用字串操作函數,例如 、FIND
和LEN
,VALUE
以提取所需的值。因為這樣做會浪費你我的時間,所以我不會在這裡這樣做。
答案2
將工作表新增至您的工作簿;我們稱之為「設定」。
在A1 中放置8
,在A2 中放置9
,在A3 中放置-5
。複製與原始工作表中各列中存在的具有常數的公式一樣多的列。 (根據範圍的組織方式,您可能需要設定表格使用 A1、B1、C1 並向下複製。其想法是建立與原始表上的範圍形狀相符的範圍。)
在原始工作表上將所有公式替換=8+9-5
為=Setup!A1+Setup!A2+Setup!A3
。這可以透過計算公式的尋找和取代操作來完成。
現在,您可以在「設定」表上建立條件公式,而不是在原始表中建立硬編碼值。
=sumif(Setup!A1:A3,">0")
=sumif(Setup!A1:A3,"<0")