2010-12-21 95 views
1

是否有一個公式只會計算包含一個值的單元格(不是具有公式的單元格)?例如,假設在電子表格的A列中,我輸入了值和返回值的公式的混合。如果我在最後使用總和公式,它自然會將所選數組中的所有數字相加,無論它們是輸入的值還是從公式得到的值。 (也許某種SUMIF & VBA代碼組合的。)如果我的描述是不明確的,這裏是一個假設性的電子表格建立在那裏我會需要這個公式:Excel公式/ VBA代碼將僅彙總僅包含值的單元格(跳過任何包含公式的單元格)?

 A 
1| 400 
2| =SUM(B1:B3) 
3| =AVERAGE(B1:B3) 
4| 200 
5| 100 
6| =COUNT(B1:B3) 
7| I want the sum Formula in this cell (A7) to return the value 700 (the sum of the values above). 

回答

1

澄清馬丁的答案。

無法知道單元格是否包含使用Excel公式的公式。

您必須定義一個UDF(用戶定義函數)。 Tutorial here.。 來自教程:

  1. 打開一個新的工作簿。
  2. 獲取到VBA(按下Alt + F11)
  3. 插入一個新的模塊(插入>模塊)
  4. 複製和粘貼Excel用戶定義的函數的例子
  5. 滾出VBA(按下Alt + Q)的
  6. 使用的功能(他們將出現在粘貼函數對話框中,按住Shift + F3,在「用戶自定義」分類)

你的UDF看起來類似:

Public Function isformula(rng As Range) As Variant() 
    Dim aryIn() As Variant 
    Dim a As Variant 
    Dim i As Integer, j As Integer 
    Dim temp() As Variant 

    aryIn = rng.Value 
    ReDim temp(LBound(aryIn) To UBound(aryIn), _ 
       LBound(aryIn, 2) To UBound(aryIn, 2)) 
    For i = LBound(aryIn) To UBound(aryIn) 
     For j = LBound(aryIn, 2) To UBound(aryIn, 2) 
      If (Left(rng(i, j).Formula, 1) = "=") Then 
       temp(i, j) = True 
      Else 
       temp(i, j) = False 
      End If 
     Next j 
    Next i 
    isformula = temp() 
End Function 

然後你可以在你的代碼中使用它。喜歡的東西:

{=SUM(IF(NOT(isformula(A1:A6)),A1:A6,0))} 

凡括號{}表示數組公式(按Ctrl鍵進入移 - 輸入)

HTH!

+0

謝謝。如果有其他人使用它,請確保在創建公式時(而不僅僅是Shift-Enter)按下Ctrl-Shift-Enter時的ARRAY公式( – Jack 2010-12-22 13:14:42

+0

@Jack)。糾正。謝謝。 – 2010-12-22 15:41:22

0

有一個HasFormula Property你可能能夠與SUMIF結合做你想做的事情。

+0

你必須做一個UDF,然後你可以使用它,因爲馬丁建議 – 2010-12-21 19:45:12

0

這會起作用,但不知何故,它感覺馬虎,肯定有更好的方法。通過一些額外的工作,你可以把它變成UDF。

Sub SumNumbersOnly() 
    Dim sumAllCells As Long 
    Dim sumFormulaCells As Long 
    Dim sumNumberCells As Long 

    sumAllCells = Application.Sum(Selection) 
    sumFormulaCells = Application.Sum(Selection.Cells.SpecialCells(xlCellTypeFormulas)) 

    sumNumberCells = sumAllCells - sumFormulaCells 

    Debug.Print sumNumberCells //Returns 700 (400 + 200 + 100 as in your example) 

End Sub 
3

如果您對所有功能使用SUBTOTAL,則可以這樣做。 SUBTOTAL將忽略該範圍內的任何其他SUBTOTAL功能。在A2

=SUBTOTAL(9,B1:B3) 

在A3

=SUBTOTAL(1,B1:B3) 

在A6

=SUBTOTAL(2,B1:B3) 

在A7

=SUBTOTAL(9,A1:A6) 

A7將是700(這是我假定你的意思)。如果您的公式不是SUBTOTAL中的選項,那麼它將不起作用。

相關問題