从excel工作表中提取行

时间:2017-08-01 22:14:57

标签: excel excel-formula

我想要解决的一个问题是从电子表格中提取行。电子表格有超过1200个条目。我已将它们分成相关的工作表,以便可以使用这些信息。每个单独的代码都是一个工作表

数据样本如

enter image description here

我找到的公式是尝试从单独的工作表运行

INDEX(Master!$A$2:$D$13, SMALL(IF((INDEX(Master!$A$2:$D$13,,4,1)="wap"), 
  MATCH(ROW(Master!$A$2:$D$13),ROW(Master!$A$2:$D$13)), “”), ROWS(A2:$A$2)), ,1) 

失败

MATCH(ROW(Master!$A$2:$D$13),ROW(Master!$A$2:$D$13))

获得可怕的#N / A

我需要一些帮助来解决问题,对解决方案的简要解释会有所帮助。

不幸的是,它必须通过公式来完成,因为我没有VBA查询的访问权限。

1 个答案:

答案 0 :(得分:0)

你走了:

=IFERROR(
    INDEX(Master!$A$2:$D$13, 
        SMALL(
            IF(
                INDEX(Master!$A$2:$D$13,,4)="wap",
                INDEX(Master!$A$2:$D$13,,1), 
                COUNTA(Master!$A$2:$A$13)+1
                ), 
            ROWS(A2:$A$2)
            ),
        COLUMN()
        )
    ,"")

必须将其作为数组函数输入。不是单击单元格或按Enter键退出公式,而是按Ctrl + Shift + Enter。

IF函数遍历主阵列第4列中的每个单元格。如果代码匹配,则传递ID。否则,传递主行数加1。这很重要,因为它会在最终的INDEX函数中产生错误,该函数将被转义为"" (一个空白的字符串)。

SMALL函数输出生成的数组中的当前行或键。最终的INDEX函数获取当前列和所选行的交集。只需将每个列上的列复制到每个工作表上,然后按下应返回的行数。任何其他行(或列)都将传递空字符串。为了安全起见,我要复制1200行,但这可能会减慢您的处理速度(如果确实如此,只需将计算模式设置为手动)。