Excel 通过索引查找值,但不会被删除

Excel 通过索引查找值,但不会被删除,excel,excel-formula,delete-row,excel-2016,Excel,Excel Formula,Delete Row,Excel 2016,我有一个输入表,其中包含几个不同的变量,其中包括名称、位置和作业。我想在不同的工作表上显示这些值,在其中我按组汇总数据。因此,输入如下 A B C 1 NAME CIYY WORK 2 Bart NY Plumber 3 Emily NY Firefighter 4 Daniel LA Firefighter 5 Cohen NY Firefighter 6 Sasha LA

我有一个输入表,其中包含几个不同的变量,其中包括名称、位置和作业。我想在不同的工作表上显示这些值,在其中我按组汇总数据。因此,输入如下

    A        B     C
1   NAME     CIYY  WORK
2   Bart     NY    Plumber
3   Emily    NY    Firefighter
4   Daniel   LA    Firefighter
5   Cohen    NY    Firefighter
6   Sasha    LA    Plumber
7   Dirk     LA    Plumber
8   Molly    LA    Plumber
现在我想从洛杉矶的水管工那里找到名字,意思是它需要看起来像这样:(没有
#NA
,中间没有空单元格)

索引、匹配等操作应该很容易。但是,只需删除行并添加行即可更改输入我如何才能在没有错误风险的情况下实现这一点。例如,当删除Dirk时,输出应如下所示:

    A     
1   NAME
2   Sasha 
4   Molly
非常接近,但当条件不满足时,给我留下了一个
#NA

虽然这些价值观将是独一无二的,但我有一种感觉,这将是有益的,但无法将它们结合起来

试试这样,给出整个范围、单元格和列:

=INDEX(1:1048576,MATCH("Bart",A:A,0),MATCH("NY",2:2,0))

因此,您可以从
A:A
2:2
中删除,范围将保持不变。

您需要使用索引和聚合进行两列匹配

=INDEX(A:A, AGGREGATE(15, 6, ROW(A$1:INDEX(A:A, MATCH("zzz", A:A)))/((B$1:INDEX(B:B, MATCH("zzz", A:A))=G$2)*(C$1:INDEX(C:C, MATCH("zzz", A:A))=H$2)), ROW(1:1)))
为连续的比赛填充。如果不希望在匹配项用完后出现错误代码,请使用IFERROR包装


我找到了一种使用INDRECT解决此问题的方法。然而,我不喜欢这个函数,我仍然建议使用Jeeped提出的解决方案

解决方案需要三个步骤

  • 添加一个包含两个字符串组合的额外列:即
    D2=B2&C2
    ,并使用
    =MATCH($M$17;D:D;0)
  • 现在,以迭代方式查找下一次出现的laplower的行:
    =IFERROR(MATCH($M$17;INDIRECT($D$)&SUM($N$17:$N17;1)和:$D$16“TRUE);0);”)
    。此函数使用前面的行号以间接方式重新定义数组注意,这些值的结果与前一行相关。
  • 对于每一行,找到相应的名称:
    =INDEX($A$1:$C$15;SUM($N$17:N18);O$16)
    。sum函数用于组合相对行号 在图片中,我添加了步骤3的屏幕截图。单元H3包含步骤1。列
    H
    中的其他单元格显示步骤2中的行号。

    您没有列标题标签。您需要一个永远不会被删除的最上面一行,否则您将冒#REF!错误。*列标题标签用于通知。我在示例中添加了列标题标签。它们存在于实际文件中,但这并没有让我更接近答案。太棒了。这就像一个咒语。我还发现了一些使用间接和附加子变量的方法,但这一个要好得多!谢谢为了完整起见,我将很快发布我的解决方案。顺便问一下,您能否解释一下聚合函数的作用?我正试图把它分离出来,但这是一个相当冗长的解释。
    =INDEX(A:A, AGGREGATE(15, 6, ROW(A$1:INDEX(A:A, MATCH("zzz", A:A)))/((B$1:INDEX(B:B, MATCH("zzz", A:A))=G$2)*(C$1:INDEX(C:C, MATCH("zzz", A:A))=H$2)), ROW(1:1)))