最近处理的CBOT程序中,有一个CBOT的历史数据需要导入到数据库里,可是表的格式比较特别,先来看一下。
这个是从CBOT交易软件中导出的数据,从B到H对应的合约是1,3,5,7,8,9,11月,但是年份不是固定的,比如2010-1-12对应的合约时2010年的1月合约,也就是SF10,但是同样一列的下几行2010-1-17就是2011年的1月合约,就是SF11,也就是下一年的合约。
要把这个表导入到数据库中形成CBOT的历史记录来使用,需要把它变成下面的样子。
简单起见,根据换月规则,换月月份的14号是个节点,把原始数据按照这个规则先拆分成多个文件,由于历史数据不是很多这样也能处理得过来,如果特别多的话这个方法还需要改进。
将合约对应放到第一行后面点的位置,这个每个文件需要对应调整一下。
通过下面的程序进行变换,将每一行的数据循环写到新的表中。
Sub GetDate() Dim pDate As String Dim HeYue(10) As String Dim price(1000) As String '将合约存入数组 HeYue(1) = Sheets(1).Range("J1").Value HeYue(2) = Sheets(1).Range("K1").Value HeYue(3) = Sheets(1).Range("L1").Value HeYue(4) = Sheets(1).Range("M1").Value HeYue(5) = Sheets(1).Range("N1").Value HeYue(6) = Sheets(1).Range("O1").Value HeYue(7) = Sheets(1).Range("P1").Value '按行循环 For i = 1 To 8 pDate = Worksheets(1).Cells(i, 1) '循环列 For k = 1 To 7 Worksheets(2).Cells(i * 7 - 7 + k, 1) = pDate '日期 Worksheets(2).Cells(i * 7 - 7 + k, 2) = HeYue(k) '合约 Worksheets(2).Cells(i * 7 - 7 + k, 3) = Worksheets(1).Cells(i, k + 1) '收盘价 Next Next End Sub
由于表格数据比较特殊,采用了一下手工辅助处理的方法,期待你有更好的方法。