求助构建Excel公式:基于购股日期与金额计算平均持股年限
核心逻辑
你需要的是按投资金额加权的平均持股年限——简单说,投资金额越高的笔数,对平均年限的影响越大。计算公式本质是:加权平均持股年限 = (每笔投资的持股时长 × 对应金额的总和) ÷ 总投资金额
假设你的数据结构
先假设Excel里的基础数据排布:
- A列:每笔投资的购股日期(比如A2到A6是5次买入的日期)
- B列:对应每笔的投资金额(B2到B6是每次投的钱)
- D1单元格:设置计算基准日期(就是你要算到哪一天的平均年限,比如当前日期可以用
=TODAY())
分步计算(新手友好,方便验证)
计算每笔投资的持股天数:在C2单元格输入公式,下拉填充到所有投资行
=DATEDIF(A2, $D$1, "D")
这个公式会算出从买入日到基准日的总天数。计算每笔的加权天数:在E2单元格输入公式,下拉填充
=C2 * B2
得到“天数×金额”的乘积,用来体现这笔投资的权重。计算总加权天数:在F1单元格输入
=SUM(E2:E6)计算总投资金额:在F2单元格输入
=SUM(B2:B6)转成“年+月”格式的平均年限:在F3单元格输入
=INT(F1/F2/365) & "年零" & INT(MOD(F1/F2,365)/30) & "个月"
(注:用30天近似1个月,日常使用足够;如果要更精确的月数,可以用DATEDIF计算月数加权,不过复杂度会高一些)
一步到位的合并公式
如果不想分步计算,直接用下面的数组公式(Excel 365/2021直接回车,旧版本按Ctrl+Shift+Enter确认):=INT(SUM(DATEDIF(A2:A6, D1, "D")*B2:B6)/SUM(B2:B6)/365)&"年零"&INT(MOD(SUM(DATEDIF(A2:A6, D1, "D")*B2:B6)/SUM(B2:B6),365)/30)&"个月"
如果只需要年数的小数形式,用这个:=SUM(DATEDIF(A2:A6, D1, "D")*B2:B6)/SUM(B2:B6)/365
验证你的示例
示例1:每年等额投资
2019-2023年每年1月投10000美元,基准日期设为2023年5月1日:
总加权天数=10000×(1581+1219+855+490+120)=42650000,总金额50000,平均天数=853天,换算后就是2年零4个月,和你说的一致。
示例2:早期大额+后续小额投资
2019年1月投10000,2020-2023年每年1月投2000,基准日期2023年5月1日:
总加权天数=10000×1581 + 2000×(1219+855+490+120)=21178000,总金额18000,平均天数≈1176天,换算后约3年零3个月,确实超过2年。
内容的提问来源于stack exchange,提问作者Jake

