问题:
我正在编写一个宏来为我做一些数据输入。这些数据报告都具有相同的格式(第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语句。必须有一个更好的方式来编写它,我只是无法想到它。
感谢任何和所有帮助。我确定正确方向的推动会有所帮助!
答案 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: