按一列中的值过滤数据集

时间:2013-06-01 19:15:53

标签: excel excel-vba vba

因此,我有一个参与者的excel数据集,可能有资格参与由他们的姓名,年龄,电话号码等组成的研究......如:

姓名|年龄|电话|电子邮件|地址|研究参与

我还有一列有资格参加新研究的参与者名单;它是名称列中数据的子集。

我需要做的是选择名称在子集列中的所有参与者,并将所有列中的所有信息复制并粘贴到新列中。

我尝试了类似的方法,选择一个空列并使用= IF($ Name-column = $ Subset-column,First-Column:Last-Column,“”)但是这只检查每个单元格中的名称是名称列与子集列中的名称匹配。我需要的是检查Name列中的任何名称是否与子集列中的名称匹配,如果匹配,则将该行复制到新工作表。

2 个答案:

答案 0 :(得分:1)

使用VLOOKUP应该可以解决问题。

在名称表旁边的空列中,您需要输入一组公式,例如:

  =IFERROR(VLOOKUP(<name_from_current_row_of_name_table>,<subset_column_range>,1,FALSE),0)

然后,您可以将过滤器应用于名称表,并将条件设置为排除新列中的0。将过滤后的数据复制到新工作表。

答案 1 :(得分:1)

您可以Index所有数据,然后Match行到子集名称,并将每个列拉过来。

例如,它看起来像这样:

=INDEX(All!A1:F4,MATCH(Subset!A2,All!A1:A4,0),2)

让我们打破这个:

index函数采用以下参数:

Index(Array, Row_Number, Column_Number)

数组将是您拥有的所有数据,行号我们将使用匹配函数(下面)来查找从中获取数据的行,列号表示索引中从哪个列中提取信息(我们将继续增加这个以获得所有列。

要返回正确的行,我们将使用匹配

Match(Lookup_Value, Lookup_Array, Match_Type)

对于查找值,我们希望将其指向子集列表的当前行,查找数组将是我们先前在主列表中定义的索引中的所有可用名称,并且匹配类型将等于0(对于完全匹配)

看看这个excel document