我有一个经过筛选的值列表。假设我有从0
到 的数字5
,并且2
被筛选掉:
A (with auto-filter against "2")
0
1
3
4
5
现在我想知道另一张表中的某个值是否属于该值已过滤列表。但是,尽管此行不在过滤范围内,MATCH(2;A;0)
我仍然得到输出。3
3
该MATCH()
函数不知道过滤器,这就是为什么我得到的匹配结果不在过滤范围内。
如何将排序函数MATCH()
仅应用于已筛选的范围?或者还有其他方法可以得到所需的输出?
从答案可以看出,这个问题对于 Microsoft Excel 来说几乎是相同的(在较新的 Excel 版本中,变化很小,您可能不再需要矩阵触发器Ctrl
+ Shift
+ Enter
,而只需要Enter
)。这就是为什么它也获得 Excel 标签的原因。
答案1
如果你正在使用,那么你可以使用和MS365
使上述公式更短LET()SEQUENCE()
对于旧版本的 Excel -->
• 单元格中使用的公式G5
=MATCH(1,IF(SUBTOTAL(3,OFFSET(Sheet1!$A$2:$A$7,
ROW(Sheet1!$A$2:$A$7)-ROW(Sheet1!$A$2),0,1))>0,
IF(Sheet1!$A$2:$A$7=Sheet1!F5,1)),0)
或者,在MS365
• 单元格中使用的公式G6
=LET(α,Sheet1!A2:A7,MATCH(1,IF(SUBTOTAL(3,OFFSET(α,SEQUENCE(ROWS(α))-1,0,1))>0,IF(α=F5,1)),0))
- 因此,基本上,我尝试使用该SUBTOTAL()函数实现的是获取未隐藏或过滤掉的值列表,在下面的函数中,表示
3
有助于COUNTA()创建OFFSET()动态范围。以下屏幕截图和公式将为您提供清晰的思路。此外,由于我使用的是,因此MS365
不需要点击CTRL++ ,但旧版本需要点击。SHIFTENTER
=SUBTOTAL(3,OFFSET(Sheet1!$A$2:$A$7,ROW(Sheet1!$A$2:$A$7)-ROW(Sheet1!$A$2),0,1))
以上内容与
=SUBTOTAL(3,OFFSET(α,SEQUENCE(ROWS(α))-1,0,1))
α
范围在哪里Sheet1!A2:A7
- 从上面的截图中可以看出,被过滤掉的那个
2
显示为0
,因为找到的是1
s,当对公式的这一部分进行求值时,它显示为全部,FALSE
因为在这里找不到匹配的值2
- 因此,当我们包装内部MATCH()以获取所有
TRUE
ie时,由于无法找到它1
,我们#N/A无法获得它。
但如果我们尝试查找其他值,它将通过显示行位置为我们提供所需的输出。所应用的逻辑对于其他版本以及对于LibreOffice
也相同。
现在由提问者对德国自由办公室(作品)进行检查:
- 去
G5
。 - 粘贴
VERGLEICH(1;WENN(TEILERGEBNIS(3;VERSCHIEBUNG($A$2:$A$7;ZEILE($A$2:$A$7)-ZEILE($A$2);0;1))>0;WENN($A$2:$A$7=F5;1));0)
。 - 按
Ctrl
+Shift
+Enter
。 - 查看矩阵(
{}
)函数{=VERGLEICH(1;WENN(TEILERGEBNIS(3;VERSCHIEBUNG($A$2:$A$7;ZEILE($A$2:$A$7)-ZEILE($A$2);0;1))>0;WENN($A$2:$A$7=F5;1));0)}
:
为了理解主要的技巧,下面是矩阵中小计的工作方式:
- 标记
G7
到G12
(或任何其他位于彼此下方的 5 个空单元格)。 F2
在 5 个单元格被标记时按下。- 现在您将位于 5 个牢房中的第一个牢房中。
- 粘贴
TEILERGEBNIS(3;VERSCHIEBUNG($A$2:$A$7;ZEILE($A$2:$A$7)-ZEILE($A$2);0;1))
。 - 按
Ctrl
+Shift
+Enter
。 - 参见
0
中填充的 5 个单元格矩阵:G9
2