如何仅对过滤后的数据/可见单元格应用vlookup公式

时间:2016-10-25 18:29:33

标签: vba excel-vba excel

我已经过滤了“A”列,我需要在“A”列的可见单元格中应用vlookup公式。我如何在vba中实现这一目标。工作表中的总行数为30,000,过滤后的行将关闭为100。

1 个答案:

答案 0 :(得分:1)

如果没有VBA,只需使用Excel数组公式即可解决此问题 但是,如果您希望使用VBA设置此公式,只需使用Range.FormulaArray属性。

我们正在使用这个数组公式:

{=VLOOKUP(A2,IF(SUBTOTAL(3,OFFSET(Table2!$B$2:$B$5,ROW(Table2!$B$2:$B$5)-ROW(Table2!$B$2),0,1)),Table2!$B$2:$C$5,0),2,0)}

要在Excel中使用它,您需要粘贴它而不使用括号大括号,然后按 ctrl + shift + 输入(Windows)或 cmd + shift + 输入(Mac)以激活数组公式。

该公式如何运作?

数据表Table2如下所示:

  Column A    Column B    Column C
┌  ─  ─  ─  ┬  ─  ─  ─  ┬  ─  ─  ─  ┐
│   Month   │   Store   │  Revenue  │
├  ─  ─  ─  ┼  ─  ─  ─  ┼  ─  ─  ─  ┤
│    Jan    │     1     │   6.000   │
├  ─  ─  ─  ┼  ─  ─  ─  ┼  ─  ─  ─  ┤
│    Jan    │     2     │   8.000   │
├  ─  ─  ─  ┼  ─  ─  ─  ┼  ─  ─  ─  ┤
│    Feb    │     1     │  10.000   │
├  ─  ─  ─  ┼  ─  ─  ─  ┼  ─  ─  ─  ┤
│    Feb    │     2     │  12.000   │
└  ─  ─  ─  ┴  ─  ─  ─  ┴  ─  ─  ─  ┘

数据表按月过滤,因此2月仅可见 结果将如下所示:

  Column A    Column B
┌  ─  ─  ─  ┬  ─  ─  ─  ┐
│   Store   │  Revenue  │
├  ─  ─  ─  ┼  ─  ─  ─  ┤
│     1     │   10.000  │ Formula: {=VLOOKUP(A2,IF(SUBTOTAL(3,OFFSET(Table2!$B$2:$B$5,ROW(Table2!$B$2:$B$5)-ROW(Table2!$B$2),0,1)),Table2!$B$2:$C$5,0),2,0)}
├  ─  ─  ─  ┼  ─  ─  ─  ┤
│     2     │   12.000  │ Formula: {=VLOOKUP(A3,IF(SUBTOTAL(3,OFFSET(Table2!$B$2:$B$5,ROW(Table2!$B$2:$B$5)-ROW(Table2!$B$2),0,1)),Table2!$B$2:$C$5,0),2,0)}
└  ─  ─  ─  ┴  ─  ─  ─  ┘

我的回答基于此solution