利用VBA+ADO转置及合并CSV

SUB 转置()
Transfrom 统计项 select 行字段 from (数据源) group by 列字段 pivot 行字段


Set cnn = CreateObject("ADODB.CONNECTION")
Set RS = CreateObject("ADODB.RECORDSET")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    
'SQL = "transform DATE_ID SELECT  " & Worksheets("使用说明").Cells(15, 2) & Worksheets("使用说明").Cells(15, 2) & "  FROM [合并结果$] GROUP BY DATE_ID  pivot DATE_ID  "
SQL = "Transform SUM(Voice_Erl) select DATE_ID from [合并结果$]  GROUP BY DATE_ID pivot HOUR_ID IN (8,10)"

Set RS = cnn.Execute(SQL) '将SQL语句获得的数据

Sheets("分析").Cells.ClearContents       '清理保存数据的区域
    For i = 0 To RS.Fields.Count - 1
      Worksheets("分析").Cells(1, i + 1) = RS.Fields(i).Name
     Next
Sheets("分析").Range("a2").CopyFromRecordset RS
Sheets("分析").Range("a2:AA2").SpecialCells(xlCellTypeBlanks).Delete

RS.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
     
End Sub




SUB 合并CSV()
 MyPath = ThisWorkbook.Path & "\"
 MyName = Dir(MyPath & "*.csv")
 Worksheets("合并结果").Cells.Clear
  k = 1
 Do While MyName <> ""
 
  Open MyPath & MyName For Input As #1
  
     Do While Not EOF(1)
         Line Input #1, txtline
         R_NUM = Split(txtline, ",")
         i = i + 1
            For J = 0 To UBound(R_NUM)
                Worksheets("合并结果").Cells(i, J + 1) = R_NUM(J)
                Next
                If i = 1 Then
                    Worksheets("合并结果").Cells(i, J + 1) = "filename"
                    Else
                    Worksheets("合并结果").Cells(i, J + 1) = MyName
                End If
        Loop
       Close 1#
       MyName = Dir
       
       Loop
END SUB

你可能感兴趣的:(VBA)