Excel - 多对列的缩小数组公式

Posted

技术标签:

【中文标题】Excel - 多对列的缩小数组公式【英文标题】:Excel - Downsize Array Formula For Multiple Pairs of Columns 【发布时间】:2018-10-20 16:19:56 【问题描述】:

我有以下示例矩阵:

A   B   C   D   E
1   1   1   1   1
2   1       1   
3   1   1       
4           1   1
5       1       1

我的任务是计算除 A 行之外的至少一对列在两列中都包含条目的行数(例如,B 和 C 组成一对,D 和 E 组成另一个)。在上面的示例中,答案是 3:第 1 行包含两对列的条目,第 3 行包含第一对列 (B & C) 的条目,第 4 行包含第二对列的条目 (D & E )。那是 3 行,其中至少包含一对指定的列的数据。

下面的数组公式达到了预期的效果:

=COUNT(IFS(SUBTOTAL(2,OFFSET(B1,ROW(B1:B5)-ROW(B1),0,1,COLUMNS(B1:C1)))>1,SUBTOTAL(2,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1))),SUBTOTAL(2,OFFSET(D1,ROW(D1:D5)-ROW(D1),0,1,COLUMNS(D1:E1)))>1,SUBTOTAL(2,OFFSET(A1,ROW(A1:A5)-ROW(A1),0,1,COLUMNS(A1)))))

问题是,我有大约 30 对列(一些不相邻)和一个相对较大的数据集(最多 10,000 行)。我正在寻找一种更有效的方法来在 Excel 公式中实现所需的结果。 请注意,我希望避免创建新的行或列,这就是我使用数组公式的原因

【问题讨论】:

【参考方案1】:

不太清楚为什么在示例中包含 A 列,如果它实际上无关紧要。

因此,对于B1:E5 范围:

=SUMPRODUCT(N(MMULT((B1:D5<>"")*(C1:E5<>"")*ISEVEN(COLUMN(C1:E5)-MIN(COLUMN(C1:E5))),ROW(INDEX(A:A,1):INDEX(A:A,COLUMNS(B1:D5)))^0)>0))

根据需要扩展范围,但请注意INDEX 结构中的A:A 部分应保持不变。

以上都不需要CSE。

问候

【讨论】:

MMULT 的有趣使用,谢谢。如果我的列不相邻,我将如何调整这一点,例如,两对列是 B 和 E 而不是 B 和 C? 对于连续的列,即 F 和 I、J 和 M 等类似?还是您的数据仅限于 B:E 列? 如果您询问非相邻列之间的间距,那么它并不总是恒定的,例如,有时它的间距为 12,有时为 9,有时为 4,具体取决于数据库中列的位置位于。实际数据范围从 A 到 BD!! 那么任何解决方案都必然需要了解在整个范围内要“配对”哪些列。 我明白了。不知何故,我试图通过使用条件值对列组之间的距离进行索引来对某些代码的部分进行分组来避免这种情况(例如,对于 12 列,计算每列中有多少条目,然后对于相隔 9 列的列,计算如何许多有条目等)。某种分块代码。但我太新手了,不知道。因此,为什么我最初发布的代码如此吝啬和不吝啬

以上是关于Excel - 多对列的缩小数组公式的主要内容,如果未能解决你的问题,请参考以下文章

Excel公式,如果一列中存在重复且另一列中存在特定文本,则对列进行求和

Excel - 计算多对非连续列中的条目的公式

Excel公式计算小数位数

在Excel中,要用公式提取该数值小数点后面的数字

方法ROUND(A1,2)试了,但excel公式自动生成的数有的是一位小数有的是二位小数。

在Excel中,要用公式提取该数值小数点后面的数字