Excel 多行中每行的多个条件(欢迎使用数组或脚本解决方案)(企业营业额阈值)
Excel multiple conditions per row in multiple rows (array or script solutions welcome) (Enterprise Turnover Thresholds)
我正在整理一个 sheet 来计算一组企业是否满足多个国家/地区的特定营业额门槛。
A 列是国家(第 2 行=全球;第 4-34 行=欧盟成员国); C-H 列是每个企业的营业额(全球和每个欧盟成员国)。
必须满足四个条件,我正在为否 (iii) 而苦苦挣扎。作为背景,标准 (ii) 是:
(ii) 至少三个成员国中每个成员国的所有合并公司的总营业额超过 1 亿欧元
我找到了这个 here 的解决方案。
{=IF(SUM(IF(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6; 1; 0))>=3; TRUE; FALSE)}
标准 (iii) 是
(iii) 在 (ii)[=16= 项下的三个成员国中,每家至少两家公司的营业额超过 2500 万欧元]
在各自的数组中拆分两个条件时,我得到了每个国家/地区的正确 true/false 值:
会员国累计营业额超过100Mio
{=IF(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6;TRUE;FALSE)}
和
成员国中至少两家超过 25 Mio 的公司的营业额
{=IF((MMULT(IF(C4:H31>=25*10^6;1;0);TRANSPOSE(COLUMN(C7:H34)^0)))>=2;TRUE;FALSE)}
然而,使用 IF(AND()) 将这两个公式合二为一是行不通的
{=IF(AND(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6;(MMULT(IF(C4:H31>=25*10^6;1;0);TRANSPOSE(COLUMN(C4:H31)^0)))>=2);TRUE;FALSE)}
有没有办法做到这一点,使用数组(首选)或 VBA?
非常感谢!
埃尔西多
正如您所说,您的两个公式分别运行良好。他们都在做的是给你一个 1 和 0 的列向量,你可以通过对元素求和来得到一个计数。
要组合它们,您需要对每对元素进行标量乘法,以便最终得到另一个列向量,您可以用相同的方式对其进行计数,因此它看起来像这样:-
=SUM(IF(MMULT(C4:H10+0,TRANSPOSE(COLUMN(C4:H10)^0))>=100, 1, 0)*IF((MMULT(IF(C4:H10>=25,1,0),TRANSPOSE(COLUMN(C7:H10)^0)))>=2,1,0))
为简单起见,我只在几行数据上对其进行了测试,因此您需要将其扩展到您的实际数据,然后再投入数百万。
我正在整理一个 sheet 来计算一组企业是否满足多个国家/地区的特定营业额门槛。
A 列是国家(第 2 行=全球;第 4-34 行=欧盟成员国); C-H 列是每个企业的营业额(全球和每个欧盟成员国)。
必须满足四个条件,我正在为否 (iii) 而苦苦挣扎。作为背景,标准 (ii) 是:
(ii) 至少三个成员国中每个成员国的所有合并公司的总营业额超过 1 亿欧元
我找到了这个 here 的解决方案。
{=IF(SUM(IF(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6; 1; 0))>=3; TRUE; FALSE)}
标准 (iii) 是
(iii) 在 (ii)[=16= 项下的三个成员国中,每家至少两家公司的营业额超过 2500 万欧元]
在各自的数组中拆分两个条件时,我得到了每个国家/地区的正确 true/false 值: 会员国累计营业额超过100Mio
{=IF(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6;TRUE;FALSE)}
和
成员国中至少两家超过 25 Mio 的公司的营业额
{=IF((MMULT(IF(C4:H31>=25*10^6;1;0);TRANSPOSE(COLUMN(C7:H34)^0)))>=2;TRUE;FALSE)}
然而,使用 IF(AND()) 将这两个公式合二为一是行不通的
{=IF(AND(MMULT(C4:H31+0;TRANSPOSE(COLUMN(C4:H31)^0))>=100*10^6;(MMULT(IF(C4:H31>=25*10^6;1;0);TRANSPOSE(COLUMN(C4:H31)^0)))>=2);TRUE;FALSE)}
有没有办法做到这一点,使用数组(首选)或 VBA?
非常感谢!
埃尔西多
正如您所说,您的两个公式分别运行良好。他们都在做的是给你一个 1 和 0 的列向量,你可以通过对元素求和来得到一个计数。
要组合它们,您需要对每对元素进行标量乘法,以便最终得到另一个列向量,您可以用相同的方式对其进行计数,因此它看起来像这样:-
=SUM(IF(MMULT(C4:H10+0,TRANSPOSE(COLUMN(C4:H10)^0))>=100, 1, 0)*IF((MMULT(IF(C4:H10>=25,1,0),TRANSPOSE(COLUMN(C7:H10)^0)))>=2,1,0))
为简单起见,我只在几行数据上对其进行了测试,因此您需要将其扩展到您的实际数据,然后再投入数百万。