在一维表转二维表里介绍了使用字典来转换表格的方法,可以看到使用字典的方法代码量还是有一点多的,有点复杂。
让我们看看使用ADO怎么来实现这个功能:
Sub ADOTransformData()
Dim AdoConn As Object
Set AdoConn = VBA.CreateObject("ADODB.Connection")
'打开数据库
AdoConn.Open "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"
Dim rst As Object
Set rst = VBA.CreateObject("ADODB.Recordset")
Set rst = AdoConn.Execute("transform sum(数据) select 项目 from [Sheet1$A1:C21] group by 项目 pivot 姓名", , 1)
'输出标题
Dim i As Long
For i = 0 To rst.Fields.Count - 1
Range("E1").Offset(0, i).Value = rst.Fields(i).name
Next
'输出数据
Range("E2").CopyFromRecordset rst
rst.Close
AdoConn.Close
Set rst = Nothing
Set AdoConn = Nothing
End Sub
代码和前面的汇总数据、查找数据一样,仅仅是修改了sql语句,其中8-15行ADODB.Recordset是为了输出标题才使用。
这个代码使用很简单,但是需要注意的是transform 这个语句不是所有的数据库驱动程序都能够支持的,像SQLite数据库就不能够支持。