引用上一个可见行中的单元格

问题描述 投票:0回答:2

如何从筛选范围中引用上一个可见行中同一列中的单元格?

excel vba excel-formula excel-2010
2个回答
9
投票

这很容易如果我们准备好的话。

假设我们有这样的数据:

enter image description here

第一步是引入“助手”栏目。 在E2中我们输入:

=IF(SUBTOTAL(3,A2:A2)=0,MIN($E$1:E1)-1,SUBTOTAL(3,$A$2:$A2))

并抄下:

enter image description here

现在“helper”列最酷的一点是,无论您如何过滤它,它总是显示一个简单的顺序序列......让我们过滤Alice

enter image description here

这意味着任何细胞都可以:

  1. 检索第E
  2. 列中的值
  3. 从中减去1
  4. Index()/Match() 公式中使用此值来检索上一个可见行中的任何值

编辑#1:

为了回答您的问题,在 C5 中我们输入:

=INDEX($C$2:$C$21,MATCH(E5-1,$E$2:$E$21,0))

并且没有过滤 C5 将显示 $391.00
但是使用 Alice 过滤 C5 将显示 $446.00


0
投票

我遇到了同样的问题并设法找到了解决方案(在 GPT 的帮助下)。这是我的解决方案,用于找到具有正确单元格的正确可见行。

目的: 考虑到可能应用的任何过滤器,目标是从 G3 正上方且可见的 G 列中的单元格中检索值。如果 G2 可见,则公式应返回 G2 的值。如果 G2 隐藏且 G1 可见,则应返回 G1 的值。

=INDEX(G$1:G2; MAX(IF(SUBTOTAL(3; OFFSET(G$1; ROW(G$1:G2)-MIN(ROW(G$1:G2)); 0; 1)); ROW(G$1:G2))))

注意:此公式必须作为数组公式输入。为此,请在输入公式后按 Ctrl + Shift + Enter。然后 Excel 会自动在公式两边放置大括号 {}。

公式分解:

G$1:G2:
这指定了 G 列中的范围,我们在其中查找 G3 之上的最高可见行。

MAX(IF(...))
:公式的这部分查找指定范围 (G1:G2) 中的最高可见行号。

SUBTOTAL(3; OFFSET(...))
:函数编号为 3 的 SUBTOTAL 函数用于检查行是否可见。 OFFSET 函数有助于在指定范围内调整行。

ROW(G$1:G2):返回 G1:G2 范围内单元格的行号。

INDEX(G$1:G2; MAX(...))
:最后,INDEX 函数使用 MAX 函数返回的行号从 G1:G2 范围内的正确单元格中检索值。

示例: 如果 G2 包含一个值(例如 100)并且可见,而 G1 是隐藏的,则公式将返回 100。 如果 G2 隐藏且 G1 可见,则它将返回 G1 的值。 当处理筛选数据时,此公式非常有用,其中只有特定行可见,并且您希望动态引用列中特定行上方的可见数据。

© www.soinside.com 2019 - 2024. All rights reserved.