使用 drop-down 匹配来自 matrix-like-table 的所有组合(值)

Matching all combinations (values) from matrix-like-table using drop-down

在我的工作簿 (WB) 上有 2x sheets。一个是 Test1 或者我有我的 drop-downs(来自 A22 及以下)并且在 A8-A11 上是匹配字段,如果相应匹配被“命中”,则匹配字段被着色。在我的例子中,如果您在 sheet2.

上查看 Matrix table,则 FALSE 是 (_) 和 TRUE (1)

On sheet 2 (Matrix) 是 matrix-table 具有 horizontal/vertical 轴相同 (headers),并且 (_'s) (1's) 如果有交叉点.意思是,它必须全部为 FALSE,以便系统处于“绿色(全部为 FALSE)”并且可以出售,如果只有一个部分为“红色(TRUE)”则不支持组合。

矩阵示例:

070FX 在 CE0、D01 上有 (_) 相交有 (1),在这种情况下它应该为 TRUE。所以这三个部分都应该是“红色(真)”,因为它在第 3 张图片上。

如果你检查我的 TRUE/FALSE 公式的结果(在 A13 和 A14 中),你可以更好地理解它:

=SUMPRODUCT((Matrix!$A:$A3=A12)*((Matrix!$B:$CV=$A)+(Matrix!$B:$CV=$B)+(Matrix!$B:$CV=$C)+(Matrix!$B:$CV=$D)+(Matrix!$B:$CV=$E)+(Matrix!$B:$CV=$F)+(Matrix!$B:$CV=$G)+(Matrix!$B:$CV=$H)+(Matrix!$B:$CV=$I)+(Matrix!$B:$CV=$J)+(Matrix!$B:$CV=$K)+(Matrix!$B:$CV=$A)+(Matrix!$B:$CV=$B)+(Matrix!$B:$CV=$C)+(Matrix!$B:$CV=$D)+(Matrix!$B:$CV=$E)+(Matrix!$B:$CV=$F)+(Matrix!$B:$CV=$G)+(Matrix!$B:$CV=$I)+(Matrix!$B:$CV=$J)+(Matrix!$B:$CV=$K))*(NOT(ISERROR(1/VALUE(Matrix!$B:$CV3)=1))))>0

可能你会问为什么要分两行公式(A13和A14),其实是一个公式但是我因为打印的原因分成了两行,这个文档应该只写一页。

*我遇到的问题是让这个更动态,更容易 read/understand。如果您看到我的公式,它是 SUMPRODUCT 但它确实有 hard-coded 数组,而这不是我需要的,我最近意识到我们的文档中有很多更改,有时会添加或删除部分内容。但是我的数组是hard-coded,所以你可以想象调整它需要付出多大的努力。 ss.

向某人解释它是如何工作的也是痛苦的

我希望有一些不同的方法来做到这一点,也许是另一组函数,或者甚至将 Power Query 作为 Excel 中最好的动态事物。

https://docs.google.com/spreadsheets/d/1UC0cgsVCm0ekbtu7Wsjpy8PdJ76o8HNq/edit?usp=sharing&ouid=101738555398870704584&rtpof=true&sd=true

下面的公式可以在单元格 A13 中使用,然后复制到其他单元格

=SUMPRODUCT((_0359_matrix[_]=A9)*(IFNA(IF(MATCH(COLUMN(_0359_matrix[[#Headers],[070FX]:[YS1]])-1,MATCH($A:$K,_0359_matrix[[#Headers],[070FX]:[YS1]],0),0),1,0),0)+IFNA(IF(MATCH(COLUMN(_0359_matrix[[#Headers],[070FX]:[YS1]])-1,MATCH($A:$K,_0359_matrix[[#Headers],[070FX]:[YS1]],0),0),1,0),0))*(NOT(ISERROR(1/VALUE(_0359_matrix[[070FX]:[YS1]])=1))))>0

下面的公式可以用在单元格 A14 中,然后复制到

=SUMPRODUCT((_0359_matrix[_]=A12)*(IFNA(IF(MATCH(COLUMN(_0359_matrix[[#Headers],[070FX]:[YS1]])-1,MATCH($A:$K,_0359_matrix[[#Headers],[070FX]:[YS1]],0),0),1,0),0)+IFNA(IF(MATCH(COLUMN(_0359_matrix[[#Headers],[070FX]:[YS1]])-1,MATCH($A:$K,_0359_matrix[[#Headers],[070FX]:[YS1]],0),0),1,0),0))*(NOT(ISERROR(1/VALUE(_0359_matrix[[070FX]:[YS1]])=1))))>0

这两个公式都比它们可能的要长,因为它们使用的是 table 引用,但是,由于您希望您的公式是动态的,我认为这是合适的(没有 table 引用公式大约是原件长度的一半)。

这些公式只是原始版本的较短版本,但两组中有很多重复计算,即所有 22 个单元格计算中间部分(中间被乘数)和最后部分(最后一个被乘数)所以,为了性能,有 2 个辅助单元(或 2 个命名公式)计算这些值 一次 是明智的,然后只有 22 个公式引用这些,因此大大缩短了公式。

(table 引用可能会使公式的可读性降低,也可能不会,因此我在下方包含了我的 'research' 的屏幕截图

第 1 行中的数据是 table headers 的代理,第 3 行中的数据是第 9 行(测试 1)的代理 - 该公式有效地完成了所有匹配汇总为一行,而不是像原始公式中那样必须对单个结果求和;这样就有 2 个 'copies' 的公式,因为你的 headers (在 Test1 上)由于你的 'printing constraint' 而在 2 个不同的行上 - 如果所有 headers 在一行中,例如通过将公式 =A12 放入单元格 L9,将 =B12 放入 M9 等(并可能隐藏这些列,以保留 sheet 'clean') - 如果您实施了此建议,则单元格 A13 的公式可以缩短为这个

=LET(hdrs,_0359_matrix[[#Headers],[070FX]:[YS1]],SUMPRODUCT((_0359_matrix[_]=A9)*(IFNA(IF(MATCH(COLUMN(hdrs)-1,MATCH($A:$V,hdrs,0),0),1,0),0))*(NOT(ISERROR(1/VALUE(_0359_matrix[[070FX]:[YS1]])=1))))>0)

小于原始公式长度的 1/3)