如何以日期为列标题实现动态YTD change计算
动态计算YTD涨跌幅的解决方案
原表格
| Sector | 1/1/2022 | 5/1/2022 | 6/1/2022 | 1Y Min |
|---|---|---|---|---|
| X | 10 | 05 | 12 | 05 |
| Y | 18 | 20 | 09 | 09 |
| Z | 02 | 09 | 12 | 02 |
需求说明
新增「YTD涨跌幅」列,计算逻辑为最新日期对应数值 - 当年首个可用日期对应数值,且公式需支持动态适配:后续新增日期列时,无需手动修改公式,自动识别最新/首个日期列并更新计算结果。
预期效果
| Sector | 1/1/2022 | 5/1/2022 | 6/1/2022 | 1Y Min | YTD涨跌幅 |
|---|---|---|---|---|---|
| X | 10 | 05 | 12 | 05 | 2 |
| Y | 18 | 20 | 60 | 09 | 42 |
| Z | 02 | 09 | 12 | 02 | 10 |
动态公式实现(Excel环境)
方案1:兼容全版本Excel的数组公式
假设表格数据从A1单元格开始,在F2单元格(对应X行的YTD涨跌幅)输入以下公式,输入完成后按 Ctrl+Shift+Enter 确认数组公式,再下拉填充至所有行:
=INDEX($2:$2,MAX(IF(ISNUMBER($B2:$D2),COLUMN($B2:$D2),0))) - INDEX($2:$2,MIN(IF(ISNUMBER($B2:$D2),COLUMN($B2:$D2),0)))
逻辑说明:通过ISNUMBER筛选出数值列(日期对应的数值),用MAX/MIN+COLUMN定位最新/首个日期列的位置,再用INDEX提取对应数值做差。新增日期列时,可直接将公式中$B2:$D2的范围扩大为$B2:$ZZ2,预留足够列数避免重复调整。
方案2:Excel 365/2021及以上版本简化公式
利用动态数组函数,无需手动调整范围,新增列自动适配:
=TAKE(FILTER($B2:$ZZ2,ISNUMBER($B2:$ZZ2)),,-1) - TAKE(FILTER($B2:$ZZ2,ISNUMBER($B2:$ZZ2)),,1)
逻辑说明:FILTER自动筛选当前行的所有数值列,TAKE(...,,-1)取最后一列(最新日期数值),TAKE(...,1)取第一列(首个日期数值),二者做差得到YTD涨跌幅。
内容的提问来源于stack exchange,提问作者Saanchi
相关产品推荐
相关产品推荐

