针对特定条件提取数据的数组公式

时间:2018-03-20 09:29:16

标签: arrays excel vba if-statement excel-indirect

以下是我正在使用的公式:

=IFERROR(IF(ISBLANK($A$1),IF(ROWS(A$2:A2)>$F$3, "", INDEX(INDIRECT("'"&C$1&"'!$D$4:$D$1000"),SMALL(IF(INDIRECT("'"&C$1&"'!$J$4:$J$1000")=$D$3, ROW(INDIRECT("'"&C$1&"'!$D$4:$D$1000"))-ROW(INDIRECT("'"&C$1&"'!$D$4"))+1),ROWS(A$2:A2)))),IF(ROWS(A$2:A2)>$F$3, "", IF(ISNA(MATCH(1,($A$1=(INDIRECT("'"&C$1&"'!$X$4:$X$1000")))*($D$3=(INDIRECT("'"&C$1&"'!$J$4:$J$1000"))),0)),"",INDEX(INDIRECT("'"&C$1&"'!$D$4:$D$1000"),SMALL(IF((INDIRECT("'"&C$1&"'!$J$4:$J$1000")=$D$3)*($A$1=(INDIRECT("'"&C$1&"'!$X$4:$X$1000"))), ROW(INDIRECT("'"&C$1&"'!$D$4:$D$1000"))-ROW(INDIRECT("'"&C$1&"'!$D$4"))+1),ROWS(A$2:A2)))))),"")

  • 公式正在做的是根据" $ D $ 3"
  • 中提到的标准提取数据
  • 但它只是从一张纸上提取它,因为我使用了间接公式并用工作表名称引用它
  • 我还给了它一个表格标准
  • 我想要的是一个检查" $ D $ 3"中提到的标准的公式。在特定工作表中可用,如果是,则提取所有项目,然后转到下一个工作表检查标准。如果这些物品在那里也可以提取它们并重复它直到31张..
  • 如果我想根据特定标准在单独的工作表中从多个工作表中提取数据列表,那么VBA代码是什么

提前致谢

其他信息: 我提到的答案,但它不是问题的解决方案,这是宏记录

Sub ExtractValues()
'
' ExtractValues Macro
'

'
    Range("B5").Select
    Selection.FormulaArray = _
        "=IFERROR(IF(ISBLANK(R1C1),IF(ROWS(R2C[-1]:R[-3]C[-1])>R3C6, """", INDEX(INDIRECT(""'""&R1C[1]&""'!$D$4:$D$1000""),SMALL(IF(INDIRECT(""'""&R1C[1]&""'!$J$4:$J$1000"")=R3C4, ROW(INDIRECT(""'""&R1C[1]&""'!$D$4:$D$1000""))-ROW(INDIRECT(""'""&R1C[1]&""'!$D$4""))+1),ROWS(R2C[-1]:R[-3]C[-1])))),IF(ROWS(R2C[-1]:R[-3]C[-1])>R3C6, """", IF(ISNA(MATCH(1,(R1C1=(INDIRECT(""'""&R1" & _
        "C[1]&""'!$X$4:$X$1000"")))*(R3C4=(INDIRECT(""'""&R1C[1]&""'!$J$4:$J$1000""))),0)),"""",INDEX(INDIRECT(""'""&R1C[1]&""'!$D$4:$D$1000""),SMALL(IF((INDIRECT(""'""&R1C[1]&""'!$J$4:$J$1000"")=R3C4)*(R1C1=(INDIRECT(""'""&R1C[1]&""'!$X$4:$X$1000""))), ROW(INDIRECT(""'""&R1C[1]&""'!$D$4:$D$1000""))-ROW(INDIRECT(""'""&R1C[1]&""'!$D$4""))+1),ROWS(R2C[-1]:R[-3]C[-1])))))),""""" & _
        ")" & _
        ""
    Range("B5").Select

End Sub

提前致谢

0 个答案:

没有答案