【问题标题】:sum all rows and headers if row and header dates are less than or equal to a particular date如果行和标题日期小于或等于特定日期,则对所有行和标题求和
【发布时间】:2019-04-13 01:48:14
【问题描述】:

我有一个表格,其中日期作为行和列的标题 - 每个单元格将交易与行中的起始日期和列中的清算日期相加。

例如

               31/1/2019    28/2/2019    31/3/2019
31/1/2019           -100         -200         -300
28/2/2019            -10          -20          -30
31/3/2019             -1           -2           -3

我想要一个公式来对列标题和行标题小于或等于特定日期的矩阵求和。

使用上面的例子:

31/1/2019 = -100
28/2/2019 = -330
31/3/2019 = -666

【问题讨论】:

    标签: excel-formula


    【解决方案1】:

    一段时间以来,我一直在尝试使用公式来满足您的要求,但我做不到,所以我编写了一个小函数,可以将其用作公式。您需要输入以下代码:

    Option Explicit
    Function MySumIf(SumRange As Range, Criteria As Range) As Double
    
        Dim arr, i As Long, j As Integer
    
        arr = SumRange.Value
        For i = 2 To UBound(arr)
            For j = 2 To UBound(arr, 2)
                If arr(i, 1) <= Criteria.Value And arr(1, j) <= Criteria.Value Then MySumIf = MySumIf + arr(i, j)
            Next j
        Next i
    
    End Function
    

    在 VBA 内的模块上。你怎么能那样做?在你的excel上按ALT+F11,会弹出一个带有VBA的窗口->在左边你会看到一个名为Projects的窗口,在那里你用鼠标右键单击任何东西,然后去插入->模块->粘贴代码它将出现的空白窗口。

    要使用该功能,只需写=MySumIf(RangeToSumWithDates,DateCriteria) 像这样:

    结果是:

    希望对您有所帮助。唯一的缺点是您需要共享此代码才能为他人工作或共享工作簿。

    【讨论】:

      【解决方案2】:

      也许是这样的公式:

      =IF(AND($A$2<=$A6,$B$1<=$A6),SUM($B$2:INDEX($B$2:$D$4,MATCH($A6,$A$2:$A$4,1),MATCH($A6,$B$1:$D$1,1))),0)
      

      或稍作修改:

      =IFERROR(SUM($B$2:INDEX($B$2:$D$4,MATCH($A6,$A$2:$A$4,1),MATCH($A6,$B$1:$D$1,1))),0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-30
        • 2017-12-02
        相关资源
        最近更新 更多