vba - 如何仅在过滤的数据/可见单元格上应用 vlookup 公式

标签 vba excel

我已经过滤了“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/

相关文章:

excel - 将字符串数组传递给 Excel VBA 中的 Range().Formula

Javascript 使用 SheetJS 在服务器上读取 Excel 文件

vba - 复制工作表而不复制代码

arrays - 在VBA中声明数组变量

excel - 类实例的字典,如何分配新值?

java - 标签单元格到数字单元格

c# - Range 类的自动填充方法失败

vba - Excel 不会自动适应 45º 文本

vba - 在 Visual Basic for Applications (VBA) 中设置全局 Scripting.Dictionary

Excel:使用公式进行单元格引用