我如何重复几行的function

我承认我不是Excel的专家,所以也许有人可以帮助我。

在我的工作表上,我有几块数据。

我计算该区块D栏内所有项目的总和。 在每个块中,我检查C列中的单元格的值,如果它包含字母“y”,并且该行的D列中的值等于零,则必须排除列D的总和。

目前,我正在通过将总和值乘以1或0(通过对单元格内容运行testing而产生)来完成此操作。

下面是我用来testing第24行数据的第23行到第25行的一个例子。我也对E列和G列执行同样的操作,但是“y”字符总是在列C中,因此绝对path列参考。

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

必须有一个更有效的方法来做到这一点。

理想情况下,我想写一个函数,我可以粘贴到一个单元格,然后select行或单元格,我运行testing。

任何人都可以指向正确的方向吗?

我不确定我是否能100%理解这个问题,但是无论如何,这是一个答案:

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

不要input花括号,而是使用Ctrl + Shift + Enterinput公式,使其成为数组公式。 以下是它的作用:

首先,它计算C是“y”和D是零的所有行。 这将返回(在这个例子中)0,1,2或3. NOT将零改变为1,并改变任何其他的零。 那么那一个或零将被乘以列D的总和。

因此,如果零行同时具有“y”和0,则将SUM乘以1.如果多于零的行同时具有“y”和0,则将SUM乘以0。

这个function应该工作:

 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)

我看到的唯一的其他select是结合c和d中的值,如=C23&";"&D23和sumifsearch“y; 0”的VLOOKUP返回一个错误。