2010-04-01 52 views
1

我承認我不是Excel專家,所以也許這裏有人可以幫助我。如何在多行重複功能

在我的工作表上有幾個數據塊。

我計算該塊的D列內所有項目的總和。 在每個塊內,我檢查C列中的單元格的值,如果它包含字母「y」,並且該行的D列中的值等於零,則必須排除列D的總和。

目前我正在通過將總和值乘以1或0來完成此操作,這是通過對單元格內容運行測試而生成的。

下面是我用來測試列D中數據的第23行到第25行的示例。我也對列E和G執行相同的操作,但「y」字符始終在列C中,因此絕對列參考。

=IF(AND($C23="y",D23=0),0,1)*IF(AND($C24="y",D24=0),0,1)*IF(AND($C25="y",D25=0),0,1) 

必須有一個更有效的方法來做到這一點。

理想我想寫,我可以粘貼到一個細胞,然後選擇在其上運行測試的行或細胞的功能。

任何人都可以指向正確的方向嗎?

回答

2

我不知道如果我理解的問題100%,但在這裏是一個答案呢:

{=NOT(SUM((C23:C25="y")*(D23:D25=0)))*SUM(D23:D25)} 

不要輸入大括號,而使用Control + Shift鍵輸入公式+ Enter進行它是一個數組公式。下面介紹一下它的作用:

首先,計算其中C爲「Y」的所有行和d爲零。這將返回(在這個例子中)0,1,2或3. NOT會將零改爲1,並將其他值改爲零。那麼這個或零將乘以列D的總和。

因此,如果零行同時具有'y'和0,則將SUM乘以1.如果多於零行具有'y'和0,將SUM乘以0.

+0

我非常喜歡這個。 我曾閱讀過有關這些CSE數組公式,但尚未得到它的工作。 – ChrisBD 2010-04-01 13:53:55

1

這個功能應該工作:

Option Explicit 

Public Function getMySum(src As Range, sumColumn As Integer) 
Dim iRow As Range 
Dim yColumn As Integer 

    yColumn = 1 
    getMySum = 0 

    For Each iRow In src.Rows 

     If (Strings.StrConv(iRow.Cells(1, yColumn), vbLowerCase) <> "y") Or (iRow.Cells(1, sumColumn) <> 0) Then 
      getMySum = getMySum + iRow.Cells(1, sumColumn) 
     Else 
      getMySum = 0 
      Exit For 
     End If 
    Next iRow 
End Function 

您需要將此代碼添加到VBA 模塊

函數調用你的例子是:=getMySum("C:23:D25", 2)

唯一的其他選擇我看到將結合c和d中的值,如=C23&";"&D23和sumif VLOOKUP搜索「y; 0」返回錯誤。

+0

謝謝,這給了我一個很好的起點。我的下一步是看看我能否得到它,格式是:getMySum($ C23,D23:D25) – ChrisBD 2010-04-01 13:29:04