计算过去和将来数据的正数和负数

时间:2018-06-29 08:42:42

标签: excel vba excel-vba

我正在尝试创建数据集,发现很难手动进行操作。我只是想知道我们是否有办法在Excel中自动进行操作。

enter image description here

如上图所示,我需要52周。例如201703; 201704; 201705 ...... 201752。

在这方面的任何帮助将不胜感激!

谢谢, Ganesh

3 个答案:

答案 0 :(得分:1)

我认为您已经确定了WeekDiff的模式,该模式始终从5到-5。 由于您具有201701的数据,因此可以基于这些数据生成从201702开始的数据。 一旦插入201701的数据,就可以对CRW,Snapweek和WeekDiff单元格使用以下公式。 拖动直到获得首选结果。

Cell#A14 =IF(A2<>"",A2+1,"") 单元格B14 =IF(NUMBERVALUE(RIGHT(B2,2))<52,IF(B2<>"",B2+1,""),B2+49) 单元格C14 =IF(C2<>"",C2,"")

enter image description here

答案 1 :(得分:0)

您的weekdiff公式可能是:

=(MIN(DATE(LEFT(A2,4)+1,1,0),DATE(LEFT(A2,4),1,1)-WEEKDAY(DATE(LEFT(A2,4),1,1),2)+RIGHT(A2,2)*7)-MIN(DATE(LEFT(B2,4)+1,1,0),DATE(LEFT(B2,4),1,1)-WEEKDAY(DATE(LEFT(B2,4),1,1),2)+RIGHT(B2,2)*7))/7

但是我不确定您是否还希望自动填写年份-星期,如果是这样,请尝试以下操作:

Sub tst()
Dim startweek As Long, i As Long, j As Long, k As Long, arr(1 To 624, 1 To 3)

startweek = 201701

    For j = 1 To 52
        For i = 1 To 12
        k = k + 1
            If i = 12 Then Exit For
                arr(k, 1) = startweek: arr(k, 3) = 6 - i: arr(k, 2) = startweek - arr(k, 3)
                    If Val(Right(arr(k, 2), 2)) > 52 Then arr(k, 2) = arr(k, 2) - 48
        Next i
    startweek = startweek + 1
    Next j

    Sheet1.Cells(2, 1).Resize(UBound(arr), UBound(arr, 2)) = arr

End Sub

答案 2 :(得分:0)

我与@Surani同时进行了挖掘并得到

在A2中

=201700+INT((ROW()-2)/11)+1

在C2中

=5-MOD(ROW()-2,11)

在B2中

=IF((MOD(A2,100)-C2)<1,201652-(C2-MOD(A2,100)),IF((MOD(A2,100)-C2)>52,201800+(MOD(A2,100)-C2)-52,201700+MOD(A2,100)-C2))

但是其他解决方案看起来更短!