在财务工作过程中,很大时候需要使用到凑数的需求,花了两三天时间认真研究了一下,本人水平也只能做代码搬运工,在用户体验上作了一下完善。完成了Excel版的凑数功能。

文章出处说明

原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。

更新及修复

  • 20180812
    重新修复一下函数,加入判断原始数据的小数点位数问题,原来的方式粗爆地对其乘10000,致使要凑数的数值变得虚大,一般财务的数据也就两位小数。修复后性能提升明细(凑数原理:输入的数值越大,两个数值之间的间隙越大,中间值越多,如10和20两个数,中间值有10个,但扩大10000倍后,中间值变为10万个,对底层算法影响很大)
    为Google的Or-Tools正名,修复后的性能不比EH差,初测貌似更快一些。

业务场景

有财务的朋友分享了一需求,开发票的过程中,需要一张发票发多个商品明细,有可能累计了许多的款项一次性给予开具发票,而同时发票又有面额最大的限制要求。

企业的每月可开发票数量也有限,故很需要有一个凑数的功能,帮助其从众多记录中抽取出部分记录,然后汇总求和得到接近或相等于发票最大开票面额。

其他的凑数场景略感觉还是有,一下子没想得太清晰,有相关的应用场景欢迎反馈补充,供后来人更多了解和使用。

功能演示

凑数的问题,涉及到规划求解类的知识,本人在数学方面造诣太浅,翻看ExcelHome论坛得知香川群子大神是这方面的专家,也无私公开了源代码,具体链接可查看:
http://club.excelhome.net/thread-1359141-1-1.html

同时顺藤摸瓜,按着这个背包算法,在师傅水晶鸡翼的指导下,得知Google的OR-Tools工具包里有同样的算法实现。抱着对Google科学家们的敬仰,学习了一点皮毛,也放到插件里使用了。

使用方式

本篇的功能,仍然采用自定义函数的方式实现,自定义函数较功能区按钮优越的地方,在前面29波中已有阐述,不再重复。

规划求解类函数,暂时做了两个同一功能不同来源

因凑数计算量大,而使用函数向导的方向输入的话,每输入一个参数都运算一遍,还有可能卡机报错等,建议使用手动输入的方式,输入两个参数。

  1. 参数srcRange
    数据源的部分,就是引用用于凑数的记录对应的数量或金额字段,最多处理4位小数点,且需要正数。
  2. 参数groupRange
    用于分组的部分,有可能不止凑一个组合,且多个组合间有可能不一定是相等的,开发此设置,方便处理各种灵活场景。

手动输入时,可利用名称功能,输入更方便,输入某个参数时,若已经定义好名称,可按F3快捷键调出粘贴名称来选择。同时函数的可读性也得到加强。

手动输入时,可利用名称功能,输入更方便

请务必输入区域时,不要全选整列数据,自定义函数没作整列的较验处理,整列选择意味着运算量是几万倍的增加,已经用到这些功能的表哥表姐们,也很必须学习好规范的Excel操作,减少不必要的麻烦和性能损耗

同样的引用的数据源,请务必保证是数字格式,最多4位小数点精度, 正数,中间没有空数据和字符等,不然函数计算会报错!

函数输入参数说明

计算的结果存放在记录表的某一列中,用的是数组公式的方式返回多个值,故若需要修改删除,请使用功能区的数组函数相关的删除、数值化、选择等快捷操作。

B列存放的是分组的标记,组1的和为90,和右边定义一致

若使用OR-TOOLS函数,在B列上可以看到更多的信息,如组名,组的大小,组的实际记录和和期望和的差异(0为无差异)

用OR-Tools函数可以看到更多的信息

同一功能两个函数差异

EH版香川群子大神的代码,在分组的大小较大时,性能仍然保持优异,而用OR-TOOLS实现的函数,就有很大的性能瓶颈。

例如某300条记录,总和是1000,我要分一个900的组,不知道为何OR-TOOLS的函数很慢,甚至最后报超时错误(OR-TOOLS因大小太大了,做了个网络版部署,网络访问太久会超时,同时也需要有连接外网的能力)。

EH版的函数,因原代码没有太多的封装,部分细节不太会改写,故没法做成像OR-TOOLS的分组形式,其实其他额外信息,大可用透视表汇总一下组名,很快得到,也非必须的信息。

建议使用EH版的凑数函数,OR-TOOLS版可能后续其他应用场景再开发其他的函数。

总结

Excel的原生功能并非万能,虽然自带了规划求解功能,但貌似比较鸡肋的功能,经常报找不到结果,借助代码的力量,结合网络世界中一些现成的轮子,Excel的使用也能玩出很高的、很出乎意料、超越常规的事情来。

凑数功能就是其中一例,用人工的方法去做,那不是一般的累人,可能到某几年之后才能算出来的结果。大胆地去想吧,脑洞大开一下,许多的不可能将成为可能。

系列文章

一文带你全面认识Excel催化剂系列功能
安装过程详解及安装失败解决方法
第1波-工作表导航
第2波-数字格式设置
第3波-与PowerbiDesktop互通互联
第4波-一大波自定义函数高级应用,重新定义Excel函数的学习和使用方法
第5波-使用DAX查询从PowerbiDeskTop中获取数据源
第6波-导出PowerbiDesktop模型数据字典
第7波-智能选区功能
第8波-快速可视化数据
第9波-数据透视表自动设置
第10波-快速排列工作表图形对象
第11波-快速批量插入图片
第12波-快速生成、读取、导出条形码二维码
第13波-一键生成自由报表
第14波-一键生成零售购物篮分析
第15波-接入AI人工智能NLP自然语言处理
第16波-N多使用场景的多维表转一维表
第17波-批量文件改名、下载、文件夹创建等
第18波-在Excel上也能玩上词云图
第19波-Excel与Sqlserver零门槛交互-查询篇
第20波-Excel与Sqlserver零门槛交互-数据上传篇
第21波-Excel与Sqlserver零门槛交互-执行SQL
第22波-Excel文件类型、密码批量修改,补齐Power短板
第23波-非同一般地批量拆分工作表
第24波-批量发送邮件并指点不同附件不同变量
第25波-小白适用的文本处理功能
第26波-正确的Excel密码管理之道
第27波-Excel工作表设置快捷操作
第28波-工作薄瘦身,安全地减少非必要冗余
第29波-追加中国特色的中文相关自定义函数
第30波-工作表快捷操作(批量创建、命名、排序、工作表目录)

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1gC6joqGY_SIg_yONga9PaQ

因插件使用VSTO开发技术完成,插件的安装需要电脑满足相关的环境配置才能运行,且需可连接外网的方式实现自动更新机制,若下载安装过程中有任何疑问或需要离线版安装等,尽量不单独私聊询问,加QQ群可高效解决(群内已汇集了VSTO开发、Powerbi技术、Sqlserver商业智能等方面的国内顶尖大牛人物,进群的好处不用多说了)

Excel催化剂插件交流群群二维码

联系作者.png

公众号.png

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。)

个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第105波-批量调整不规范的图形对象到单一单元格内存储

    在日常制表过程中,一个不得不面对的问题,许多的工作起点是基于其他人加工过的表格,无论自己多大的本领,面对不规范的其他人的制作的表格,经过自己的手,该擦的屁股还是要自己去亲手去擦,而带出来的也只会是一堆 ...

  2. 个人永久性免费-Excel催化剂功能第104波-批量选择多种类型的图形对象

    在Excel的日常操作过程中,选择绝对是一个高频的操作,之前开发过一些快速选择单元格区域的辅助功能,除了单元格区域,Excel强大之处在于,类似PhotoShop那般可以存放多种图形,并且有图层先后顺 ...

  3. 个人永久性免费-Excel催化剂功能第102波-批量上传本地图片至网络图床(外网可访问)

    自我突破,在100+功能后,再做有质量的功能,非常不易,相对录制视频这些轻松活,还是按捺不住去写代码,此功能虽小,但功课也做了不少,希望对真正有需要的群体带来一些惊喜. 背景介绍 图床的使用,一般是写 ...

  4. 个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接

    有时简单的东西,却带来许多的便利,为了让大家可以记住并容易找寻到此功能,也将这么简单的功能归为一波,反正已经100+波了,也无需为了凑功能文章而故意罗列一些小功能带忽悠性地让人觉得很强大. 使用场景 ...

  5. 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)

    数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...

  6. 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询

    高潮过往趋于平静,送上简单的手机号码归属地查询,因接口有数量限制,仅能满足少量数据需求,如有大规模数据却又想免费获得,这就成为无解了,数据有价,且用且珍惜. 业务使用场景 除了日常自带的手机各种管家为 ...

  7. 个人永久性免费-Excel催化剂功能第100波-透视多行数据为多列数据结构

    在数据处理过程中,大量的非预期格式结构需要作转换,有大家熟知的多维转一维(准确来说应该是交叉表结构的数据转二维表标准数据表结构),也同样有一些需要透视操作的数据源,此篇同样提供更便捷的方法实现此类数据 ...

  8. 个人永久性免费-Excel催化剂功能第98波-零代码零距离轻松接触并拥有金融大数据

    数据产生价值的一个最突出的领域-金融领域,股票.证券.上市公司财务报表等,多少人在其中发掘出宝贵的数据价值.今天Excel催化剂联合Tushare金融大数据平台,让这一切的数据都能成为你我普通人零代码 ...

  9. 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息

    电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...

随机推荐

  1. 利用BLCR加速android的启动(android4.2)

    BOSS要求提高安卓系统的启动速度,优化bootloader和kernel后,发现还是达不到要求,没办法才打起zygote的注意. ================================== ...

  2. sklearn中LinearRegression使用及源码解读

    sklearn中的LinearRegression 函数原型:class sklearn.linear_model.LinearRegression(fit_intercept=True,normal ...

  3. Bokeh 0.9.0dev 发布,交互式可视化库

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  4. linux log rotate

    今天老大提醒我产线kafka自身的log文件积累了好几个月了,我才发现原来kafka的log4j并删除old log. 第一反应是采用linux自带的logrotate功能,在/etc/logrota ...

  5. Using VNC on a debian/Ubuntu server with a OS X Mac

    I got a brand new MacBook Pro 13" 2016. I used to work on GNU/Linux for decades. I don't want t ...

  6. ajax,文件上传,分页器

    一.Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  7. shell日期整理

    date 当前日期+时间 # 日期格式化:date+"" - date +"%Y%m%d" 不带横杠分隔符的日期20160107 date +"%Y% ...

  8. python算法与数据结构-双向链表(40)

    一.双向链表的介绍 一种更复杂的链表是“双向链表”或“双面链表”.每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. ...

  9. spring与springmvc父子容器

    转载地址:http://www.tianshouzhi.com/api/tutorials/spring 1.spring和springmvc父子容器概念介绍 在spring和springmvc进行整 ...

  10. 【小记整理】mybatis配置多个扫描路径写法

    百度得到,但是很乱,稍微整理下: 最近拆项目,遇到个小问题,稍微记录下: <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id ...