Excel – 具有数据集中存在的某个特性的SUM / COUNT值

所以,在Excel中,想象一下这种情况:

在Sheet1上,你有一个庞大的数据集,是关系到A的列(让我们称它为组列,用数字标识)和B(让我们称之为值列)。 举个例子:

GROUP VALUES 1 3 1 2 2 -2 1 -1 3 4 2 5 

在Sheet2上,你有一个表,A列上有组号,B列上,如果你不想包括这个组,那么你把0表示,如果你想要包括它。 例:

 GROUP ACTIVE 1 1 2 0 3 2 //like I said, any number bigger than 0 

现在,在Sheet3上,您想要获得属于任何包含组的值的总和/数量。 在这个例子中,它应该返回8。

有什么function,或function的组合,可以帮助我解决上述情况? 我已经尝试了COUNTFS和SUMIFS的几种组合,但无济于事…

您将工作簿视为关系数据库,工作表将履行表的angular色,所以我认为数据库样式解决scheme是最好的。

 Sub Sheets_Inner_Join() 'Dim cnx As ADODB.Connection, rs As ADODB.Recordset Dim cnx As Object, rs As Object Dim sWB As String, sCNX As String, sSQL As String Dim ws1TBLaddr As String, ws2TBLaddr As String Dim vRNG As Variant ws1TBLaddr = Sheet1.Cells(1, 1).CurrentRegion.Address(0, 0) ws2TBLaddr = Sheet2.Cells(1, 1).CurrentRegion.Address(0, 0) sWB = ThisWorkbook.FullName sCNX = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sWB _ & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" Set cnx = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cnx.Open sCNX sSQL = "SELECT SUM(w1.[values]) FROM [Sheet1$" & ws1TBLaddr & "] w1" sSQL = sSQL & " INNER JOIN [Sheet2$" & ws2TBLaddr & "] w2 ON w1.[group] = w2.[group]" sSQL = sSQL & " WHERE w2.[active]>0" 'Debug.Print sSQL rs.Open sSQL, cnx Sheet3.Range("A2") = CLng(rs.GetString) rs.Close: Set rs = Nothing cnx.Close: Set cnx = Nothing End Sub 

我已经使用了后期绑定,以便不必将其他库引用添加到VBA项目。 这可以很容易地转化为许多用户定义的函数,以方便在整个工作簿中使用。

如果您更喜欢公式解决scheme,请调整范围以适应:

 =SUMPRODUCT(--(Sheet2!B2:B4>0),SUMIF(Sheet1!A2:A7,Sheet2!A2:A4,Sheet1!B2:B7))