Excel按条件计算日期与匹配行日期的最小差值(股票洗售判定场景)
Excel洗售(Wash Sale)判定最小日期差公式解决方案
以下公式直接写在F2单元格,可根据你的数据范围调整行号上限(示例默认取到第100行,可改为你实际的最大行号):
适用Excel 365/2021及以上版本(支持动态数组,无需额外按键)
=IF(D2>=0,"",LET(filter_range,FILTER($C$2:$C$100,($A$2:$A$100=A2)*($D$2:$D$100<0)*(ROW($A$2:$A$100)<>ROW())),IFERROR(MIN(ABS(filter_range-B2)),"无匹配记录")))
适用Excel 2019及更早版本(输入后需按Ctrl+Shift+Enter三键触发数组计算)
=IF(D2>=0,"",IFERROR(MIN(IF(($A$2:$A$100=A2)*($D$2:$D$100<0)*(ROW($A$2:$A$100)<>ROW()),ABS($C$2:$C$100-B2),9^9)),"无匹配记录"))
公式逻辑说明
- 第一层
IF(D2>=0,"",xxx):直接过滤收益为正的行,符合规则1要求 - 筛选条件
($A$2:$A$100=A2)*($D$2:$D$100<0)*(ROW($A$2:$A$100)<>ROW()):同时满足「同股票代码」「其他行是亏损」「排除当前行自身」三个条件,解决原公式计入自身行的问题 - 用
MIN(ABS(筛选出的卖出结束日期 - 当前行买入日期))直接计算最小绝对差值,无需下拉填充后再汇总,直接返回单个结果。Excel日期为序列值,差值绝对值即为自然天数,和DATEDIF按先后顺序计算的结果完全一致 - 外层
IFERROR用于处理无符合条件匹配行的场景,返回自定义提示内容
内容的提问来源于stack exchange,提问作者user9753814
相关产品推荐
相关产品推荐

