2011-07-13 127 views
4

我很惊讶,我无法找到这个地方,这让我觉得我必须错误地解​​决这个问题。我希望能够在sumifs中包含一系列值,因此它对条件中的每个值都执行一个循环(而不必为每个值写一个“+ sumifs(....)”。下面是一个示例迄今不工作
带数组条件的Sumifs

`=SUMIFS(Sum,Range1,Criteria1, '[Stores.xlsx]Sheet1'!$H:$H, "Store #"&Regions!$T:$T&"*")` 

所以我试图通过在地区的每个值T:!T作为一个标准
例如“商店#150洛杉矶”和“商店#155圣迭戈“都需要通过论证,目前这个公式只是返回匹配的第一个项目,并不会延续到下一个项目
我希望这是有道理的,请询问是否需要更清晰

+0

你正在收到什么错误?我假设你将公式复制到与列T相同行数的列中? – jonsca

+0

谢谢你的回应!我只获得第一个匹配值。在这种情况下,我会得到Store#150而不是Store#155的结果。 我不使用相同数量的列,因为我试图在一列上添加所有匹配的商店。我看到的唯一选择是将代码写为 '= SUMIFS(Sum,Range1,Criteria1,'[Stores.xlsx] Sheet1'!$ H:$ H,“Store#”&Regions!$ T3&“*”)+ SUMIFS(Sum,Range1,Criteria1,'[Stores.xlsx] Sheet1'!$ H:$ H,“Store#”&Regions!$ T4&“*”)' etc ..但有40个不同的行,我会有用这样做。 – Zombian

+0

我确定有一种方法可以使用公式来完成它,但我不确定那会是什么。使用循环范围内的VBA函数可能会更容易。 Sum,Range1和Criteria1的值是多少? – jonsca

回答

1

我认为最简单的方法是在T列旁边启动一个“中间”列,为该列的每一行做一个sumifs,然后将该列求和到另一个单元格中。表格甚至只是数组总和在这里也可能有所帮助。

我想出了VBA以下,但我不能完全测试:同样

Option Explicit 
Function SumSumIfs(ByVal inp As Range) As Integer 

    Dim i As Integer 
    Dim QBData As Worksheet 
    Dim Stores As Worksheet 

    Set QBData = Workbooks.Open("QBData.xlsx").Sheets("Sheet1") 
    Set Stores = Workbooks.Open("Stores.xlsx").Sheets("Sheet1") 

    Dim QBRange1, QBRange2, SalesRange As Range 

    Set QBRange1 = QBData.Range("H1:H" & Range("H1").End(xlDown).Row) 
    Set QBRange2 = QBData.Range("I1:I" & Range("I1").End(xlDown).Row) 
    Set SalesRange = QBData.Range("H1:H" & QBData.Range("H1").End(xlDown).Row) 


    For i = 1 To inp.End(xlDown).Row 
     SumSumIfs = SumSumIfs + Application.WorksheetFunction.SumIfs(QBRange1, QBRange2, _ 
        "=" & Stores.Cells(16, 5), StoreRange3, "=" & inp.Cells(i, 19)) 
    Next i 

End Function 

,我敢肯定有办法做到这一点用式循环,而是围绕搜索,它是对我来说不是很明显。

+0

它并没有直接解决我的问题,但我确实决定在VBA中解决我的问题。感谢您花时间致力于帮助我。 – Zombian