使用 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 中最好的动态事物。
下面的公式可以在单元格 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)
在我的工作簿 (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 中最好的动态事物。
下面的公式可以在单元格 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)