Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据另一单元格中的筛选器返回数据选择_Excel_Vba_Filter_Excel Formula - Fatal编程技术网

Excel 根据另一单元格中的筛选器返回数据选择

Excel 根据另一单元格中的筛选器返回数据选择,excel,vba,filter,excel-formula,Excel,Vba,Filter,Excel Formula,我试图查找,但在网站的任何地方都找不到这些信息 我正在尝试返回符合另一个单元格中条件的选定数据 我有一张表(Sheet1),里面有我所有的数据(大约38000行),我需要在另一张表(Sheet2)上筛选这些数据中的一列。例如,如果我想返回Sheet1上P列中有7的所有成员?并返回在Sheet2的Sheet1中出现的所有列 到目前为止,我正在尝试索引(array,MATCH())的工作方式,但这只是返回第一个在p列中有7的人,而不是每个成员。如果我一行一行地做,数据中会有不匹配的空白,希望它们都集

我试图查找,但在网站的任何地方都找不到这些信息

我正在尝试返回符合另一个单元格中条件的选定数据

我有一张表(Sheet1),里面有我所有的数据(大约38000行),我需要在另一张表(Sheet2)上筛选这些数据中的一列。例如,如果我想返回Sheet1上P列中有7的所有成员?并返回在Sheet2的Sheet1中出现的所有列

到目前为止,我正在尝试索引(array,MATCH())的工作方式,但这只是返回第一个在p列中有7的人,而不是每个成员。如果我一行一行地做,数据中会有不匹配的空白,希望它们都集中到顶部。(我希望这是有道理的)

表2中显示的结果使用了以下公式:

=INDEX(Sheet1!A:A,MATCH($B$1,Sheet1!I:I,0))
这真的是可以实现的吗


如果我问的任何问题都不清楚,请告诉我。

您使用
索引的方法是正确的,但是
匹配
只会得到第一个结果也是正确的。您需要一个数组公式,它将遍历要检索的行。下面是一个简单的例子:

要获取此值,请选择H2:J21并将其作为数组公式输入(使用
Ctrl
+
Shift
+
enter
)提交:

更新: 正如@OverflowStacker指出的,对于您的示例问题,由于您的表标题位于第1行,并且看起来您的查找列数据中永远不会有列标题,因此您可以使用一个更简单的公式:

=IFERROR(INDEX(A1:C21,SMALL(IF(C1:C21=E2,ROW(A1:A21),FALSE),ROW(A1:A21)),COLUMN(A1:C1)),"")

一些具有预期输出的示例数据会很好。@GMalc-由于数据的大小,以及数据的使用,我试图停止移动该数据所需的任何人类交互。谢谢,这可能是一个解决办法。@OverflowStacker我不知道如何在问题中提供示例数据,抱歉。在此示例中,Sheet1中的P列的值介于1和12之间。我想在Sheet2中有一个字段,我输入一个值,它返回P列为该值的所有行。我需要从原始数据复制所有行(目前,我将在稍后日期将其删除)抱歉,不知道如何显示其他行。我不知道如何提供示例数据,抱歉。正如我对@OverflowStacker的评论所述,我在Sheet1上有大约40000行数据,每个月我都需要更新这些数据并提供输出。哪些行需要更新取决于它们在P列中的值,该值介于1和12之间。我希望有一个单独的工作表,我可以在其中输入一个介于1和12之间的值,然后它在Sheet1上的数据中搜索那些在P列中有该值的成员。然后它将在第二个工作表上返回所有符合此条件的成员。@GMalc-I have try=INDEX('Sheet1'!a:a,match($B$1,'Sheet1'!P:P,0))并复制了40000行,但它只返回满足条件的第一个成员。然后我尝试了=INDEX('Sheet1'!A2:A2,MATCH($B$1,'Sheet1'!P2:P2,0)),然后为每一行复制,但是对于那些不满足条件的行,这将返回错误。正如我所说,我希望这是自动的,而不是手动的,目前我正在做一个类似的事情,以自动筛选,所以不确定这将使任何比我目前更有效。如果你让所有范围从第1行开始,你不必减去第一行。此外,如果列的顺序不同,则最好使用
MATCH
进行列计算。@OverflowStacker我建议的公式是广义的,可以让表从任何一行开始,当列标题出现在数据中的奇数情况下,它的行为与预期的一样。但是是的,对于OP的例子问题,这两个问题似乎都不起作用,所以你可以得到一个稍微简单一些的公式。我添加了一个更新。
=IFERROR(INDEX(A1:C21,SMALL(IF(C1:C21=E2,ROW(A1:A21),FALSE),ROW(A1:A21)),COLUMN(A1:C1)),"")