| A | B| C | D | E | F | G |H| I | J | K | L
---|-------|--|-------|--------|------|------|------|-|---------|----------|----------|-----
| | | ratio | tested | 2023 | 2024 | 2025 | | RowCrit | ColCrit1 | ColCrit2 |
2 |Brand A|P1| 7% | yes | 500 | 70 | 60 | | 2023 | Brand A | P1 |
3 |Brand A|P2| 8% | yes | 100 | 47 | 300 | | | Brand B | |
4 |Brand A|P2| 10% | yes | 800 | 21 | 200 | | | | |
5 |Brand B|P1| 5% | yes | 90 | 56 | 150 | | | | |
6 |Brand C|P4| 3% | no | 45 | 700 | 790 | | | | |
7 |Brand C|P2| 8% | no | 600 | 150 | 40 | | Result | 39.5 | |
8 |Brand D|P1| 12% | yes | 900 | 90 | 980 | | | | |
9 |Brand D|P1| 20% | yes | 125 | 854 | 726 | | | | |
10 |Brand D|P3| 19% | yes | 70 | 860 | 614 | | | | |
11 |Brand D|P3| 2% | yes | 842 | 250 | 85 | | | | |
12 |Brand E|P4| 6% | no | 300 | 324 | 450 | | | | |
我Cell J7
想SUMPRODUCT
根据多列条件和一行条件来计算:
- 您可以在其中找到该行的条件
Cell I2
Range J2:J3
您可以在和中找到列的条件Range K2:K3
。
在上面的例子中,结果是:
J7 = 500x7% + 90x5% = 39.5
到目前为止,我已经能够SUM
使用以下公式根据标准提取:
=SUM(IF(COUNTIF(I2;C1:G1)*COUNTIF(J2:J3;A2:A12)*COUNTIF(K2:K3;B2:B12);C2:G12))
但是,我不知道如何更改此公式,以便它计算SUMPRODUCT
并包含列和行的所有条件?
因此,尝试实现以下内容以获得所需的输出,我不确定列
ratio
索引是否应该在此处进行硬编码:• 使用
LAMBDA()
名为的辅助函数BYROW()
• 或者不使用
LAMBDA()
辅助函数:用例一: --> 当
ColCrit1
为空时用例二: --> 当
ColCrit2
为空时类似的想法来自OP帖子的最后一个答案:Using a list (range) of columns criteria (not single cells) in FILTER Formula
LAMBDA()
使用 Custom + 的另一种方法MMULT()
:尝试:
要考虑 中没有条目
ColCrit1
,或者 中没有条目ColCrit2
,您可以修改它:SUMPRODUCT
使用,COUNTIF
和FILTER
, 和 with 的版本COUNTIF
多个单元格中的标准可用于标准的常用功能计算结果:
创建以下命名范围和函数(这些将在工作簿的所有工作表中可用):
_data
=SO_74776702!$A$1:$G$12
_brands
=INDEX(DROP(_data,1),,1)
_col_crit_1
=SO_74776702!$J$2:$J$5
_col_crit_2
=SO_74776702!$K$2:$K$5
_row_crit
=SO_74776702!$I$2:$I$5
_years
=TAKE(DROP(_data,,4),1)
_products
=INDEX(DROP(_data,1),,2)
_ratios
=DROP(TAKE(DROP(_data,,2),,1),1)
_filter_by_year
=LET(_yd, DROP(_data,1, 4), _filtered, IF(_all_blanks(_row_crit), _yd, FILTER(_yd, fx_countifs_or(_years,_row_crit))), _sum_cols(_filtered) )
_all_blanks
=LAMBDA(range, COUNTBLANK(range) = ROWS(range))
_include_all
=LAMBDA(range, IFERROR(range * 0, 0) + 1)
_include
=LAMBDA(_range,_criteria, IF(_all_blanks(_range), _include_all(_range), fx_countifs_or(_range,_criteria)) )
_sum_cols
=LAMBDA(_cols,BYROW(_cols,LAMBDA(_row,SUM(_row))))
fx_countifs_or
=LAMBDA(_range,_criteria, MAP(_range, LAMBDA(_row, N(OR(COUNTIF(_row, _criteria))) )))