VBA 中的多个过滤器功能

库马尔

有人可以帮我编写 VBA 函数以使用多个过滤器从另一个工作表中获取数据吗?数据看起来像这样。

在此处输入图片说明

我想编写一个函数,根据我选择的下拉列表提取 A1 或 A2 或 A3 值。如果我选择 A3,它应该从 A3 列中选择数据。我对其他列的过滤条件是项目、ID 和位置。Item、id 和 location 的列是静态的。A1、A2、A3 的列是动态的。我想对 Ite、id 和 location 设置标准。这是三个标准,结果应该来自第四列。即基于我选择的 A1 或 A2 或 A3。

我试过了,但无法弄清楚。有人可以帮我吗?

变异

您不需要为此使用 VBA,但您需要做一些准备工作。我将在这里展示我所做的。还有其他方式,您可以选择您喜欢的方式。

  1. 我完全按照您发布的方式创建了一个表格。您可以只创建一个命名范围而不是表格,或者您可以用范围的坐标替换公式中任何一个的名称。我没有为表格命名,但建议您在使用表格时命名。在我的示例中,表的名称是Table1.
  2. 在表中,我创建了一个包含单元格 D1:F1 的命名范围。我将此范围称为“数据”,但任何其他名称也可以。如果出于某种原因需要为列提供不同的标题,您也可以将命名范围完全移动到其他地方。正如您将看到的,名称无关紧要,它们用于从它们在命名范围内的位置创建数字 1、2 和 3 Data
  3. 现在我创建了一个验证下拉列表引用=Data. 效果是我有一个包含 A1、A2 和 A3 的下拉列表。我在与Table1不同的工作表的 A10 中创建了这个下拉菜单

现在我使用以下公式从表的第 2 行中提取数据。

=INDEX(Table1[Item],2)
=INDEX(Table1[Location],2) or =INDEX(Table1,2,3) and
=INDEX(Table1,2,3+MATCH(A10,Data,0))

请注意,上述公式中的每个“2”都指的是命名范围中的第 2 行Table1我没有设置该名称的范围,但这是 Excel 在创建表格时投入的内容。但是,您还想从其他行中提取数据。

为此,您可以使用 ROW() 函数。此函数返回它所在行的编号。如果它在第 10 行它会返回 10,在第 11 行它会返回 11 等等。它是一个计数器。因此,如果您在第 10 行输入我的公式,则可以将所有“2”替换为,Row()-8并且在向上或向下复制时,您将获得来自不同行、相同列的数据。

=INDEX(Table1[Item],Row()-8)
=INDEX(Table1[Location],Row()-8) or =INDEX(Table1,Row()-8,3) and
=INDEX(Table1,Row()-8,3+MATCH(A10,Data,0))

如果您的第一个公式不在第 10 行,您必须根据公式的输入位置调整要扣除的数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章