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