Excel多列OR条件筛选表格并按关联列修改数值的方法
Excel 双需求解决方案(筛选+金额置0)
核心公式(适配Table1结构)
=LET( 数据源, Table1, YN列, Table1[P1_YN]:Table1[P12_YN], 金额列, Table1[P1_val]:Table1[P12_val], 筛选条件, BYROW(YN列, LAMBDA(行数据, OR(行数据="Yes"))), 筛选后数据集, FILTER(数据源, 筛选条件), 提取筛选后YN列, INDEX(筛选后数据集, , MATCH("P1_YN", Table1[#Headers], 0):MATCH("P12_YN", Table1[#Headers], 0)), 提取筛选后金额列, INDEX(筛选后数据集, , MATCH("P1_val", Table1[#Headers], 0):MATCH("P12_val", Table1[#Headers], 0)), 调整后金额列, IF(提取筛选后YN列="Yes", 提取筛选后金额列, 0), 最终结果, HSTACK( INDEX(筛选后数据集, , 1:MATCH("P1_val", Table1[#Headers], 0)-1), 调整后金额列, 提取筛选后YN列, INDEX(筛选后数据集, , MATCH("P12_YN", Table1[#Headers], 0)+1:COLUMNS(数据源)) ), 最终结果 )
公式说明
LET函数:封装所有变量,避免重复引用,让逻辑更清晰- 筛选逻辑:通过
BYROW+OR逐行检查所有_YN列,仅保留至少一个为"Yes"的行 - 金额调整:用
IF数组判断,将_YN列为"No"对应的金额列批量置为0,保留"Yes"列的原金额 - 结果组合:用
HSTACK把调整后的金额列、原表其他列(如标识列)重新拼接成完整结果表
简化版(适用于金额列与YN列连续对应)
如果Table1中P1_val-P12_val和P1_YN-P12_YN是连续排列的相邻列,可使用更简洁的写法:
=LET( 筛选后数据, FILTER(Table1, BYROW(Table1[P1_YN]:Table1[P12_YN], LAMBDA(x, OR(x="Yes")))), 金额列区域, 筛选后数据[[P1_val]:[P12_val]], YN列区域, 筛选后数据[[P1_YN]:[P12_YN]], HSTACK( DROP(筛选后数据, , COLUMNS(金额列区域)), IF(YN列区域="Yes", 金额列区域, 0), DROP(筛选后数据, , -COLUMNS(YN列区域)) ) )
注意事项
- 输入公式后,Excel会自动溢出生成完整结果表,无需手动下拉填充
- 原表格数据完全不受影响,可继续用于其他报表计算
内容的提问来源于stack exchange,提问作者Postino
相关产品推荐
相关产品推荐

