“不务正业的”NPV函数
2023-04-18 15:54:41 时间
标签:Excel公式
NPV是一个财务函数,基于一系列将来的收(正值)支(负值)现金流和一贴现率,返回一项投资的净现值。其语法为:
NPV(rate,value1,value2,…)
本来是计算净现值的函数,然而,却可另作它用。
如下图1所示,列A中有一系列带有单位的数值,现在想要求其中的数字之和。
图1
怎么办呢?一种思路是,如图1所示先将列A中单元格内的数字提取到列B中,然后求和。
可以使用NPV函数来实现。在单元格B1中输入数组公式:
=NPV(-0.9,,IFERROR(MID(A1,1+LEN(A1)-ROW(OFFSET(A1,,,LEN(A1))),1)%,""))
拖动复制至数据单元格末尾即可。注意,这是一个数组公式,输入完后要按Ctrl+Shift+Enter组合键。
NPV的神奇之处在于NPV计算公式,其中每项乘以(1+rate)^n的倒数,其中n是序列中的第n项,例如,(1+rate)^1、(1+rate)^2等。通过使用不同的rate值,可以得到不同的结果。在本例中,使用-0.9,提供给1+rate=1+(-0.9)=0.1,所以得到类似于{0.1;0.01;0.001;0.0001;0.00001}的值,取倒数得到{10;100;1000;10000;100000},等等,再加上NPV忽略文本值,因此可以得到了期望的结果。
下面,我们来具体分析一下。例如上图1中,单元格B3中的公式为:
=NPV(-0.9,,IFERROR(MID(A3,1+LEN(A3)-ROW(OFFSET(A1,,,LEN(A3))),1)%,""))
其中,
IFERROR(MID(A3,1+LEN(A3)-ROW(OFFSET(A1,,,LEN(A3))),1)%,"")
生成数组:
{"";"";0.04;0.03;0.02;0.01}
这样,公式就转化为:
=NPV(-0.9,, {"";"";0.04;0.03;0.02;0.01})
由于NPV函数忽略参数为空单元格、逻辑值、数字的文本表示式、错误值或不能转化为数值的文本,因此,上式相当于:
{10;100;1000;10000;100000}*{;0.04;0.03;0.02;0.01}
即:
10*0+100*0.04+1000*0.03+10000*0.02+100000*0.01
=1234
小结
本文给我的最大冲击不是公式本身,而是思路。一个函数有它本身的用途,然而,如果思路打开,也许这个函数会得到更广泛且有想象力的应用。当然,前提是我们首先要熟悉函数的基本运作原理,能够熟练地运用它们,打造扎实的基本功。
相关文章
- 有两个以上苹果设备,却不知道这5个功能?你的钱白花了
- 盘点 iOS 工程 12 和安卓 9.0 相互学习了哪些特性
- 做小程序设计,不得不说的7个坑
- 这10条认知,可能就是你和大厂UI 设计师的差距
- 苹果发布iOS 12系统第七个开发者测试版
- iOS开发中runtime常用的几种方法
- 小程序洞察报告:传统品牌几大玩法、几大困惑都在这里了
- 3D成像技术来袭,金融科技将迎来哪些变革?
- 优雅快速的搭建iOS工程框架的探讨
- 拼命鼓吹5G手机的,不是傻就是坏
- 谷歌正式推出Android P第五个开发者预览版更新
- 假如安卓“无法保持免费”,谷歌能做些什么?
- iOS 内存管理:内存优化
- 谷歌“AI猜画”朋友圈刷屏:用户参与让它变得更聪明
- 一文读懂谷歌为何遭欧盟43亿欧元的创纪录罚款
- 超详细的登录注册的业务逻辑流程梳理
- 一次因代码走查引发的思维碰撞
- 手机到底是怎样泄密的?不知道的赶紧看看
- 技术变化那么快,程序员如何做到不被淘汰?
- 你可能会忽略的Git提交规范