根据多个条件对列值求和的公式

问题描述 投票:0回答:1

我需要创建一个公式来根据两个不同的标准对列的值进行求和,但这里有一个我无法弄清楚的技巧。这是表格的一个例子 在这里,我的“Valor1”总和是 18 enter image description here 但是,我需要该过滤器是动态的,这样它就会向我显示所有“材料”过滤器的总和,例如,如果我只过滤“Mat1”,我应该得到 10,我知道我可以使用小计(109)来做到这一点,但是仅当我具有相同的行过滤器时才有效,即使并非所有单元格都可见,我也需要对材质上的所有值进行某种恢复,这是我需要的示例 enter image description here 正如您所看到的,我只有一行 Mat1,但我获得了与该可见值相关的所有值,我需要能够过滤多个材质并获得所有材质的总和

excel excel-formula formula
1个回答
0
投票

解决办法是:

Public Function GetFilters(Ref As Range) As Variant
  Dim i As Integer, av As Variant, cnt As Integer
  On Error GoTo NoFilterHndlr
  cnt = Sheet1.AutoFilter.Filters(1).Count
  On Error GoTo 0
  Select Case Sheet1.AutoFilter.Filters(1).Count
    Case 1:
      GetFilters = Array(Mid$(Sheet1.AutoFilter.Filters(1).Criteria1, 2))
    Case 2:
      GetFilters = Array(Mid$(Sheet1.AutoFilter.Filters(1).Criteria1, 2), Mid$(Sheet1.AutoFilter.Filters(1).Criteria2, 2))
    Case Else:
      ReDim arr(cnt - 1)
      For i = 1 To cnt
        arr(i - 1) = Mid$(Sheet1.AutoFilter.Filters(1).Criteria1(i), 2)
      Next
      GetFilters = arr
  End Select
  Exit Function
NoFilterCode:
  On Error GoTo 0
  av = Application.WorksheetFunction.Unique(Ref)
  cnt = UBound(av, 1) - 1
  ReDim arr(cnt)
  For i = 0 To cnt
    arr(i) = av(i + 1, 1)
  Next
  GetFilters = arr
  Exit Function
NoFilterHndlr:
  Resume NoFilterCode
End Function

公式为:

[F1:F6]=SUM(SUMIFS($C$9:$C$38;$B$9:$B$38;E1;$A$9:$A$38;getfilters($A$9:$A$38)))

它有效,但我想改进公式。待更新。

© www.soinside.com 2019 - 2024. All rights reserved.