首页 > 代码库 > VBA快速转换数据格式,将CBOT结算价历史数据导入数据库

VBA快速转换数据格式,将CBOT结算价历史数据导入数据库

最近处理的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

由于表格数据比较特殊,采用了一下手工辅助处理的方法,期待你有更好的方法。