excel里如何用vba实现如下图所示的凑数功能?
看过这个表,有两点意见:
由于不知道你双击时有哪些组合已经产生过了(因为你可以点击几次后关闭操作,第二天打开继续操作)所以,【穷尽组合】唯一可能就是对应你指定的H列单元格(也就是某个合计值),计算在各种组合下,A列的余数。。。照这个思路,其实,你需要的是对应这A~G的七列的总共144种组合,你只要测试某个合计数能不能满足分配就可以了的。分配时,A列作为最后的分配余额接受点。你的问题就很容易解决了。
至于填充颜色方面,不知道你的样例中的前三行中为什么有些单元格不填色,不知道逻辑。建议你建立一张7列144行的表,对于你的这个问题而言,其实这张表是固定的。然后在某个固定单元(比如A1)输入合计值,让公式自动完成每一种组合下A列各行的值。并设立条件格式,如果A列在100~200之间(也就是合计值成功分配在总分配阀值中),就把整行染黄色,如果A列小于100(也就是合计值少于需要的分配值),就染蓝色,如果A列大于200(也就是合计值太多了没法全部分配),就不染色。
以上,针对你的问题这个问题就解决了,不必要去编写宏代码(当然,要想精确生成这张表,既可以手工也可以写段代码完成,貌似手工还会比较快呢)
不好意思把问题说的复杂了,其实就是根据确定的合计数和充电宝的数,寻找A到G列充电宝数和各个相对固定数之和等于合计数的单元格并将其染色,如果有多种组合,双击合计数这一栏某一个单元格,自动循环用颜色标示该单元格所在行的各种组合
如图,
一、你必须在第一行设定原始参数的结构:
B1:任意自定义参与分配数据的起始行(这里是商品A所在行:3)
D1:任意自定义所有参与分配的商品的个数(示例中为:9)
二、第二行的每个单元,你可以自己设定总分配值(500/600/715/311……)
三、第三行起,是每个参与分配的商品(个数必须符合D2指定,否则结果没法预料)的设定分配数
1)除了第一个商品外,所有的商品的分配方式(任意N种),每种分配的数量和次序都可以自定义,你只要保证每个商品分配数量安排结束后的右边一个单元格为空
(注意:空的意思和0是不一样的,空:如果曾经输入过数据,选中单元格然后按Del键就是空单元格了)
2)第一个商品,作为分配数量调整商品,你也可以自行设定它的数值,并将作为分配结果是否完成的判断依据。在结果中:
2.1)小于0或者大于该设定值,整个结果不染色;
2.2)结果大于零并且小于等于该设定值,整个结果会被染成黄色。
四、运行时双击第二行你自己定义的总分配数即可,下面会列出所有可能的组合,并根据商品A的设定值判断每个分配结果是否在范围内
详细请看附件