ここに、ADOを使用するアプローチがあります。 1つの条件は、ワークブックが保存されている必要があるということです.ADOには作業する道が必要です。
Sub SqlSummary()
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim sPath, icount
Dim f As ADODB.Field
Dim sSQL As String
Dim sRange1 As String
Dim rngresults As Range
sSQL = " select a.[GroupA],a.[GroupB], sum(a.[Value1]) as [Value1], " & _
" sum(a.[Value2]) as [Value2], sum(a.[Value3]) as [Value3] from <r1> a " & _
" group by a.[GroupA], a.[GroupB] "
sRange1 = RangeName(shtData.Range("A1").CurrentRegion)
If ActiveWorkbook.Path <> "" Then
sPath = ActiveWorkbook.FullName
Else
MsgBox "Workbook being queried must be saved first..."
Exit Sub
End If
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sPath & _
";Extended Properties='Excel 8.0;HDR=Yes'"
sSQL = Replace(sSQL, "<r1>", sRange1)
Debug.Print sSQL
oRS.Open sSQL, oConn
If Not oRS.EOF Then
shtDump.UsedRange.ClearContents
Set rngresults = shtDump.Range("A1")
icount = 0
For Each f In oRS.Fields
rngresults(1).Offset(0, icount).Value = f.Name
icount = icount + 1
Next f
rngresults(1).Offset(1, 0).CopyFromRecordset oRS
Else
MsgBox "No records found"
End If
End Sub
Function RangeName(r As Range) As String
RangeName = "[" & r.Parent.Name & "$" & _
r.Address(False, False) & "]"
End Function
Excelでテーブルを並べ替えることができます。 – Paparazzi
サポートする必要のある集計タイプは何ですか?基本的なsum()などしかない場合は、ADOを使用してワークシートを照会し、 'GroupA [GroupA]、[GroupB]' –
でピボットテーブルを使用していますか?そのような分析のために設計されたピボットテーブル。 – Fink