Excel VBA:对另一个工作表中多个工作表中的相同列求和(概述)
我是VBA新手,希望快速学习:) 我有6张Excel表格(1-6个月),数据相同(如表所示),但行数不同Excel VBA:对另一个工作表中多个工作表中的相同列求和(概述),excel,vba,sum,sumifs,Excel,Vba,Sum,Sumifs,我是VBA新手,希望快速学习:) 我有6张Excel表格(1-6个月),数据相同(如表所示),但行数不同 我想创建一个以月(1-6)为行、以卷和储量为列的表 还有,有没有一种方法可以让我编写一个代码,根据储量(F列)列出前三大客户群,并给出相应的数量(E列)——比如sumif(),但使用vba 我已经研究了好几天,没有发现太多…我很高兴能得到任何帮助!非常感谢:)这就是使用adodb对象的方式。只需添加3张纸并运行它 数据表作为获取top3的临时表 非常感谢你!!但是,excel给了我一
我已经研究了好几天,没有发现太多…我很高兴能得到任何帮助!非常感谢:)这就是使用adodb对象的方式。只需添加3张纸并运行它 数据表作为获取top3的临时表
非常感谢你!!但是,excel给了我一条关于
Rs的错误消息。打开strSQL,strConn
我需要下载什么吗?谢谢:)@Rome,有什么错误消息。
Sub exeSQL(Ws As Worksheet, strSQL As String)
Dim Rs As Object 'ADODB.Recordset
Dim strConn As String
Dim i As Integer
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=Excel 12.0;"
Set Rs = CreateObject("ADODB.Recordset") 'New ADODB.Recordset
Rs.Open strSQL, strConn
If Not Rs.EOF Then
With Ws
.Range("a2").CurrentRegion.ClearContents
For i = 0 To Rs.Fields.Count - 1
.Cells(1, i + 1).Value = Rs.Fields(i).Name
Next
.Range("a2").CopyFromRecordset Rs
.Columns.AutoFit
End With
End If
Rs.Close
Set Rs = Nothing
End Sub
Sub Main()
Call sumVolume
Call sumTop3
End Sub
Sub sumVolume()
Dim Ws As Worksheet
Dim strSQL As String, strU As String
Dim sName(1 To 6) As Variant
Dim i As Integer
Set Ws = Sheets("Resultsum")
For i = 1 To 6
sName(i) = Sheets(i).Name
Next i
For i = 1 To 5
strU = strU & "select '" & sName(i) & "' as sday, [Volume], [Reserves] from [" & sName(i) & "$] union all "
Next i
strU = strU & "select '" & sName(6) & "' as sday, [Volume], [Reserves] from [" & sName(6) & "$] "
strSQL = "SELECT sday, sum([Volume]) as [sum of volume], sum([Reserves]) as [sum of Reserves ] "
strSQL = strSQL & " FROM (" & strU & " )"
strSQL = strSQL & "WHERE not isnull([Volume]) "
strSQL = strSQL & "GROUP BY sday "
exeSQL Ws, strSQL
End Sub
Sub sumTop3()
Dim Ws As Worksheet
Dim strSQL As String, strU As String
Dim i As Integer
Call sumData
Set Ws = Sheets("ResultTop3")
strSQL = "SELECT * "
strSQL = strSQL & " FROM [Data$] as a "
strSQL = strSQL & "WHERE [Reserves] in ( "
strSQL = strSQL & "SELECT TOP 3 [Reserves] FROM [Data$] as b "
strSQL = strSQL & "ORDER BY b.[Reserves] DESC ) "
strSQL = strSQL & "ORDER BY a.[Reserves] DESC "
exeSQL Ws, strSQL
End Sub
Sub sumData()
Dim Ws As Worksheet
Dim strSQL As String, strU As String
Dim sName(1 To 6) As Variant
Dim i As Integer
Set Ws = Sheets("Data")
For i = 1 To 6
sName(i) = Sheets(i).Name
Next i
For i = 1 To 5
strU = strU & "select [Customer Group Nr] as [Customer Group], [Volume], [Reserves] from [" & sName(i) & "$] union all "
Next i
strU = strU & "select [Customer Group Nr] as [Customer Group], [Volume], [Reserves] from [" & sName(6) & "$] "
strSQL = "SELECT [Customer Group], sum([Volume]) as Volume , sum([Reserves]) as Reserves "
strSQL = strSQL & " FROM (" & strU & " )"
strSQL = strSQL & "WHERE not isnull([Volume]) "
strSQL = strSQL & "GROUP BY [Customer Group] "
exeSQL Ws, strSQL
End Sub