使用 vlookup 按类别筛选值到新表中

使用 vlookup 按类别筛选值到新表中

我有以下数据,其中包含代理及其各自经理的列表:

在此处输入图片描述 我需要按经理筛选代理并将他们放入每个经理的新表中吗?

我尝试使用图中所示的 vlookup,但似乎只要函数找到一个值,它就会坚持那个值。

蓝色表格是我想要得到的结果。我猜它必须是每个新表格的一个函数 - 没问题!

我可以尝试使用带有 for 循环的 VBA,但我认为如果可能的话我宁愿不重新发明轮子。

谢谢你!

答案1

VLOOKUP()将始终找到 lookup_value 的第一次出现。

INDEX(array, row_num,[column_num])row_num如果您按照填写的内容提供了每个代理商的信息,那么您就可以列出代理商。

让我们先来大批(列表)Mark 的代理的行号。此表达式

IF($E$2:$E$9=I$1,ROW($E$1:$E$8))

检查 E 列等于I$1(Mark) 的位置,无论它在哪里,它都会从 1 到 8 行的行号列表中返回一个数字。在 E 列不等于 Mark 的位置,表达式返回False。因此,此表达式给出的实际数组是{1,FALSE,3,FALSE,5,FALSE,7,FALSE}。请注意,为 Mark 的每个代理返回的数字实际上比他们的行号小一。

接下来,我们要列出这些数字,因为公式向下填充,同时忽略值FALSESMALL(array, k)返回从中第 k 个最小的值array。随着它向下填充,ROW(I1)增量和数字按顺序列出:

SMALL(IF($E$2:$E$9=I$1,ROW($E$1:$E$8)),ROW(I1))

现在我们可以row_num在函数中使用该表达式INDEX()来获取马克的经纪人的姓名:

=INDEX($F$2:$F$9,SMALL(IF($E$2:$E$9=I$1,ROW($E$1:$E$8)),ROW(I1)))

F2:F9此表达式返回 中与 提供的数字相对应的值SMALL()。因此,当它被填满时,它会列出 Mark 的代理人的姓名。您可以使用此公式列出代理人,但请参阅下面的注释。

如果填充的内容超出 Mark 拥有的 Agent 数量,则会出现错误#N/A!。可以通过将整个公式包装在 中来将这些内容转换为空白IFERROR()

=IFERROR(INDEX($F$2:$F$9,SMALL(IF($E$2:$E$9=I$1,ROW($E$1:$E$8)),ROW(I1))),"")

此公式从 I2 向下和向右填充,给出如下所示的结果。

在此处输入图片描述

请注意,这是一个数组公式,因此必须用 来输入CTRL ShiftEnter,而不仅仅是Enter

这是对公式的冗长解释,但我希望它能有所帮助。祝你好运。

相关内容