目录
引言
下图所示的表格中增加“进度”一列,要求根据目标和已完成数据自动计算完成进度,按照百分比显示在D列。另外,D列中还要增加进度条,直观显示完成情况,进度条需要自适应单元格的宽度:100%完成则进度条充满整个单元格,完成50%则填充单元格的一半,其他进度则按照此比例换算。对于进度条的颜色也有要求:
- 小于50%,进度条是红色的
- 大于等于50%,小于60%进度条是橙色的
- 大于60%进度条是绿色的
问题的分析与设计
要求还是很多的而且很琐碎,不慌,咱们把这些需求拆分出来,逐条来分析并理清思路
数字百分比实现
如果是用数字百分比的形式显示进度,这个功能很好实现,只需要将C列数据除以B列数据,得出的结果再乘以100,最后面加上百分号就行了。我们正常手工计算的话也是这个流程,那么如何转换成编程语言表达出来呢?
VBA中乘号用*表示,除号用/表示,使用除号时需要注意精度问题,如果不进行特殊的处理,会显示一堆小数位,如下图
实际我们并不需要如此高精度的数据,可以使用 Round函数指定小数位数。在VBA中Round 函数用于将数值四舍五入到指定的小数位数,尤其是在处理财务数据或需要精确控制数字格式的情况下这个函数非常有用, Round 函数的语法:Round(number, numdigits)
- number:必需参数。要进行四舍五入的数值。可以是任何有效的数值表达式。
- numdigits:必需参数。表示要将数值四舍五入到的小数位数。如果为正值,则表示小数点后的位数;如果为零,则表示四舍五入到最接近的整数;如果为负值,则表示小数点前的位数(即对十位、百位等进行四舍五入)。
例如Round(231 / 297 ,2) ,执行后返回0.78
图形化的进度条实现
进度条利用Shapes实现的,实现步骤如下&#