用于日历化数据的宏

时间:2016-10-05 19:07:23

标签: excel vba

问题:

我正在编写一个宏来为我做一些数据输入。这些数据报告都具有相同的格式(第1列中的日期,第2列中的值),但数据从客户端更改为客户端的顺序除外。目前我已经编写了宏来从另一张表中获取数据并将其带入当前工作表。但现在我需要写一些东西来获取数据并将其变为正确的格式。

示例:此客户是从4月到3月组织的(再次,它可能是任何12个月的组合),我需要将其纳入1月至12月,无论年份如何。

在:

Apr-14  37,645

May-14  47,000

Jun-14  11,600

Jul-14  33,503

Aug-14  38,550

Sep-14  36,063

Oct-14  39,246

Nov-14  30,315

Dec-14  28,403

Jan-15  25,799

Feb-15  24,302

Mar-15  27,873

后:

Jan-15  25,799

Feb-15  24,302

Mar-15  27,873

Apr-14  37,645

May-14  47,000

Jun-14  11,600

Jul-14  33,503

Aug-14  38,550

Sep-14  36,063

Oct-14  39,246

Nov-14  30,315

Dec-14  28,403 

尝试解决方案:

我很犹豫是否发布,因为它不完整,很难遵循。它所做的只是解析第一个日期单元格以获得对应于一个月的前3个字母,然后检查12个if / elseif语句。必须有一个更好的方式来编写它,我只是无法想到它。

感谢任何和所有帮助。我确定正确方向的推动会有所帮助!

1 个答案:

答案 0 :(得分:0)

我最终只是创建了一个寻找" Jan"并从那里获取所有数据。

'Loop to dynamically calendarize data
''Loop returns 2 arrays, length 12, index 0-11, "electic" and "heating" in Jan to Dec format
complete = False
For i = 9 To 20
    If Left(target.Sheets("Sheet1").Cells(i, 1).Value, 3) = "Jan" Then
        For j = 0 To (20 - i)
            carryOver = i + j
            electric(j) = target.Sheets("Sheet1").Cells(carryOver, 2).Value
            heating(j) = target.Sheets("Sheet1").Cells(carryOver, 5).Value
        Next j
        complete = True
    ElseIf complete = True Then
        For k = j To 11
            electric(k) = target.Sheets("Sheet1").Cells(9 + (k - j), 2).Value
            heating(k) = target.Sheets("Sheet1").Cells(9 + (k - j), 5).Value
        Next k
        GoTo end_of_for
    End If
Next i
end_of_for: