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