Excel 2010中如何保留单元格值实现月度累计计算?
解决Excel跨工作簿月份数值留存与累计计算问题
问题说明
有两个Excel工作簿:
source-book.xlsx:B4是January、February、March的下拉菜单,C4用来输入对应月份的数值destination-book.xlsx:- B4到B6用公式
=IF('[source-book.xlsx]source '!$B$4="January ";'[source-book.xlsx]source '!$C$4*10%;F4)(January后面带空格是手机输入自动添加的),仅在source选中对应月份时更新数值 - C4到C6固定显示三个月份
- D4到D6原公式为
=B4、=B5、=B6,但切换source的月份时,D列会随B列同步变化,无法留存每个月份的历史数值 - D7用
=(D4+D5+D6)*35%计算累计值,因D列无法留存数值,无法得到正确结果
- B4到B6用公式
需求:切换source的月份并输入数值后,D4-D6需分别保留对应月份的数值(如January输入500000、February输入700000、March输入800000后,D4-D6固定保留这三个值),确保D7能准确计算累计。
纯Excel解决办法(无需VBA)
方法一:用迭代计算实现数值留存
Excel迭代计算允许单元格引用自身,可实现「符合条件时更新,否则保留原值」的效果,步骤如下:
- 启用迭代计算
打开destination-book.xlsx,点击「文件」→「选项」→「公式」,勾选「启用迭代计算」,将「最多迭代次数」设为1,点击确定。 - 修改D4-D6的公式
每个D列单元格对应一个月份,公式逻辑为:若source选中当前月份,则同步B列数值,否则保持当前D列数值不变。- D4(对应January):
=IF('[source-book.xlsx]source '!$B$4="January ";B4;D4) - D5(对应February):
=IF('[source-book.xlsx]source '!$B$4="February";B5;D5) - D6(对应March):
=IF('[source-book.xlsx]source '!$B$4="March";B6;D6)
- D4(对应January):
- 验证效果
打开source-book.xlsx,选中January输入500000,切换到destination-book.xlsx,D4会自动更新为500000;切换source到February输入700000,D5更新为700000,D4保留500000;同理输入March的800000后,D6更新,D4、D5数值不变。D7原公式无需修改,即可正确计算累计值。
方法二:用辅助列存临时值(无需启用迭代)
若不想开启迭代计算,可在destination-book.xlsx新增辅助列(比如F列)存储source当前数值,再通过公式匹配留存到D列:
- F4单元格输入公式:
='[source-book.xlsx]source '!$C$4*10% - D4-D6分别使用以下公式:
- D4:
=IF('[source-book.xlsx]source '!$B$4="January ";F4;D4) - D5:
=IF('[source-book.xlsx]source '!$B$4="February";F4;D5) - D6:
=IF('[source-book.xlsx]source '!$B$4="March";F4;D6)
(首次输入每个月份数值时,需确保source选中对应月份,D列会自动更新,后续切换月份不会覆盖已留存的数值)
- D4:
内容的提问来源于stack exchange,提问作者SIMBIOSIS surl
相关产品推荐
相关产品推荐

