Excel VBA:对另一个工作表中多个工作表中的相同列求和(概述)

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给了我一

我是VBA新手,希望快速学习:)

我有6张Excel表格(1-6个月),数据相同(如表所示),但行数不同

  • 我想创建一个以月(1-6)为行、以卷和储量为列的表
  • 还有,有没有一种方法可以让我编写一个代码,根据储量(F列)列出前三大客户群,并给出相应的数量(E列)——比如sumif(),但使用vba

  • 我已经研究了好几天,没有发现太多…我很高兴能得到任何帮助!非常感谢:)

    这就是使用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