我已经过滤了“A”列,我需要在“A”列中的可见单元格上应用 vlookup 公式。我如何在 vba 中实现这一点。工作表中的总行数为 30,000,过滤的行数接近 100。
最佳答案
无需 VBA,只需使用 Excel 数组公式即可解决此问题。
但是如果你想用 VBA 设置这个公式,只需使用 Range.FormulaArray属性(property)。
我们正在使用这个数组公式:
{=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 + enter (Windows) 或 cmd + shift + enter (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 .
关于vba - 如何仅在过滤的数据/可见单元格上应用 vlookup 公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247140/