具有可变数量的列的列中的值总和

时间:2016-07-11 13:58:00

标签: excel vba excel-vba excel-formula sum

我有一个物品需求'表有3种不同的东西:

包含对象部件号的列,多个列,其中Dates为标题,数量为其中的值。

Part Number |  Date1 |    Date2 | Date3  |    Date4 ... | Lead Time

2003032.........201.........63.......54..........63.............3  

2145631..........54.........21........53..........21............2

4563214.........23..........121.......12.........31.............5

但这是我需要做的事情,我不知道如何。

因此,如果提前期为3个月,我需要采取今天的日期并总计3个月,而不是选择与此总和的结果相对应的列(仅在同一个月不是同一天),而不是获取此列中的值以及它之前的所有列并将所有列相加。

我不确定自己是否已经清楚了,如果我没有,我很抱歉。如果有任何问题,我会尝试进一步解释。

希望有人可以提供帮助。

Excel 2002

2 个答案:

答案 0 :(得分:0)

鱼翅。根据您的情况,您不需要VBA,公式SUM和OFFSET应该这样做。我做了一个非常简单的表格来说清楚:

Printscreen

答案 1 :(得分:0)

假设

  • 日期按从左到右的升序排列

  • 日期在连续范围内(它们之间没有空格)

  • 日期是其行中唯一的数字

  • 提前期是其专栏中唯一的数字

然后你可以试试这个

Option Explicit

Sub main()
    Dim cell As Range, datesRng As Range
    Dim jMonth As Variant
    Dim mySht As Worksheet: Set mySht = Worksheets("leadtimes") '<--| change "leadtimes" with your actual sheet name
    Dim leadCol As String: leadCol = "N" '<--| change "N" to your actual lead times column index

    With mySht
        Set datesRng = .Rows(1).SpecialCells(xlCellTypeConstants, xlNumbers)
        For Each cell In .Columns(leadCol).SpecialCells(xlCellTypeConstants, xlNumbers)
            jMonth = Application.Match(CLng(DateAdd("m", cell.Value, Date)), datesRng, 1)
            If Not IsError(jMonth) Then cell.offset(, 1) = WorksheetFunction.Sum(datesRng.offset(cell.Row - datesRng.Rows(1).Row).Resize(, jMonth))
        Next cell
    End With
End Sub