VBA总和有2个条件

时间:2016-08-19 10:42:35

标签: vba excel-vba excel

enter image description here

Sub Tsum()
Dim int001 As Range
Dim int002 As Range
Dim int003 As Range
   Dim data1 As Date
    Dim data2 As Date
    Dim data3 As Date
Dim dates As Date
Dim nr_rows As Integer

'--------------------------------------------------------------

nr_rows = Cells(Rows.Count, "A").End(xlUp).Row
Set int001 = Range("B2:B" & nr_rows)
Set int002 = Range("C2:C" & nr_rows)
Set int003 = Range("D2:D" & nr_rows)
    data1 = "01/02/2016"
    data2 = "02/02/2016"
    data3 = "03/02/2016"
Set dates = Range("A2:A" & nr_rows)
'--------------------------------------------------------------

Range("H2:H" & nr_rows) = Application.WorksheetFunction.SumIfs(dates, Range("B2:B" & nr_rows), data1 & data2 & data3, Range("B2:B" & nr_rows), ">0")


End Sub

我需要一点帮助vba。

我只有桌子" A1:D10",我做了专栏" H"了解我想要的结果。

所以,列中的总和" H"表格由#34; A1:D10"但这是必要的2条件:

  • 汇总具有相同日期的列中的所有数据
  • 该列的值必须为> 0

并将此结果设置为" H"就像在图片中一样。

上面我尝试启动脚本但直到现在都没有结果。

2 个答案:

答案 0 :(得分:0)

SUMIFS或数组公式可以执行此操作SUMIFS($B$1:$B$3,$A$1:$A$3,"01/02/2016",$B$1:$B$3,">0"),例如

答案 1 :(得分:0)

你可以使用公式。

我假设表的大小会随着额外天数的增加而增加,并且该表在A列中不会有任何空白行,并且表下方不会有额外的数据。

首先要设置一个公式来考虑这一点:

使用以下公式创建命名范围:=Sheet1!$A$2:INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A))
确保在公式中包含工作表名称。我把这个范围称为ReportDates

Excel 2007 + 中,您可以使用:
=SUMIFS(OFFSET(ReportDates,,1),ReportDates,DATEVALUE("01-Feb-2016"),OFFSET(ReportDates,,1),">0")

或者您可以为 int001 设置命名范围... int003 (int001是一个无效的命名范围,所以你不能指出它 - 我'使用 into001
=Sheet1!$B$2:INDEX(Sheet1!$B:$B,COUNTA(Sheet1!$A:$A))(注意我还在计算A栏。)

您的公式将是:
=SUMIFS(into001,ReportDates,DATEVALUE("01-Feb-2016"),into001,">0")

如果您使用 Excel 2003 ,则可以使用:
=SUMPRODUCT((ReportDates=DATEVALUE("01-Feb-2016"))*(into001>=0)*into001)

=SUMPRODUCT((ReportDates=DATEVALUE("01-Feb-2016"))*(OFFSET(ReportDates,,1)>=0)*OFFSET(ReportDates,,1))