从Excel数据库中提取前10个产品(多个条件)

时间:2017-08-14 12:51:08

标签: excel vba excel-vba

我有一个数据库(附带示例),可以按月从其他70个文件中自动更新。

我想根据不同的标准提取十大订购产品。(附带示例)该文件将更加复杂,只是为了使演示保持简单。

我使用了一些公式=LARGE('Part numbers'!A3:A301,ROW(INDIRECT("1:"&ROWS('Part numbers'!A3:A301))))& =SUMPRODUCT((Combine!B1:B10000='DATA '!Y3)*(Combine!C1:AB1=A1)*(Combine!D1:D10000=AC2),Combine!C1:AB10000)当我使用INDEX MATCH来提取产品的名称时,如果有两个相同的值,公式总是在第一个产品名称上弯曲+我需要添加一个新标准,即month

提前感谢您提出任何建议

如果是宏或公式

,则可以

Database image

List with criteria image

3 个答案:

答案 0 :(得分:0)

也许枢轴表可以帮到你吗? 有一些自动过滤器显示顶部x 如果你想在数据透视表上设置一个动态过滤器你可以使用:

Sub UpdateFilter()
Dim m As String
m = Month(Now())
[filPivot] = m
End Sub

答案 1 :(得分:0)

问题解决得更少。 我现在遇到的另一个问题是公式=SUMPRODUCT((Combine!$B$1:$B$5000='DATA '!Y3)*(Combine!$C$1:$AB$1=$C$1)*(Combine!$D$1:$D$5000=$AC$2),Combine!$C$1:$AB$5000)最初我有公式 = 5000 的范围,但每当我的数据库更新时,这个数字会减少,直到达到 = 10

我的数据库是由每次删除空白的宏更新的,我相信这可能是个问题。

如何让 = 5000 范围稳定?

答案 2 :(得分:0)

尝试使用INDIRECT - 函数

进行参考来修复范围
=SUMPRODUCT((INDIRECT("Combine!$B$1:$B$5000")='DATA '!Y3)*(Combine!$C$1:$AB$1=$C$1)*(INDIRECT("Combine!$D$1:$D$5000")=$AC$2),INDIRECT("Combine!$C$1:$AB$5000"))

这可确保您引用的范围,例如例如,当删除第2行时,$B$1:$B$5000不会成为$B$1:$B$4999