目录
引言
问题的分析与设计
数据条的实现
列宽及单元格的显示设置
代码入口设计
代码实现
运行结果
回顾总结
引言
下图表格中,需要填充D列内容,要求使用不同颜色的数据条显示完成百分比,并根据数据条的长短直观的显示目前完成的一个状态。(备注:数据条就是“|||||||||||||||”,其中”|”个数不固定)

D列数据完成后的预期效果如下图

这个预期效果是不是比直接填入百分比数据更方便查看?说不定领导看后一高兴直接让你升职加薪了呢,想想心里都美滋滋的。如果你也想把它应用到工作中,那么一起来看看是如何通过VBA一键实现的吧
问题的分析与设计
相信大家最关心的内容就是数据条这一部分了吧,那么首先来讲讲清楚
数据条的实现
说穿了不值一提,其实就是文本格式的一串符号,关键就是控制符号显示的数量,每个单元格里到底输入多少个呢?
那就需要用到完成百分比这个数据,自然是完成百分比数据越大,数据条就越长。再结合调试输出,计算出合适的比例就可以了,具体如下,如果有兴趣动手操作的话可以参考:
首先根据代码调试,发现列宽在50~70比较美观,不至于太短了没有变化,也不至于太长来回拉动滚动条增加不必要的麻烦。当然这个设置也因人而异,毕竟审美观都不相同,结合实际情况调整即可
其次计算具体的个数。刚开始我也是按照百分比数据扩大100倍后取整设置的,例如40%(即0.4),那么实际的个数为:0.4×100=40个,实际发现数据条比较长,因此调整成20个,也就是又减了一半:0.4×50,感觉长度刚刚好。如果乘以50计算出来的数据不是整数,可以使用Int函数取整即可
最后就是通过For Next 循环语句输出已经计算好的数据条个数即可
列宽及单元格的显示设置
那么又是如何做到完成百分比数据紧挨着数据条后面显示的呢?通过现象看本质,如果注意到D列显示内容的数据类型是字符串(文本),那么你就能理解了,没错,就是用的字符串拼接符号“&”拼接在一起的,如代码:ws.Cells(2, “D”).Value = sResults & nResults * 100 & “%”
Cells(2, “D”)代表D2单元格
sResults变量里存放的就是已经生成的数据条,如“|||||||||||||||||||”
nResults变量里面的值就是C列实际完成数据除以B列计划生产量,即完成进度(已处理,保留小数点后4位),如:0.4356。想要将0.4356显示成百分比,只需要将该数据乘以100再加上百分号%即可
整行代码执行完成后,就会将“|||||||||||||||||||43.56%”填入到D2单元格中
另外,为了更清晰显示出来,同时还对D列单元格字体通过设置.Font.Bold属性进行了加粗处理,字体的颜色也都经过仔细的挑选使用RGB设置的(也可以使用.ColorIndex设置),不至于太亮刺眼睛,也不至于太暗看不清楚。如果没有这方面的要求,都可以忽略,代码中做相应的简化即可
代码入口设计
考虑使用方便,还是选取在Sheet页面插入命令按钮(Active x控件)
第一步:Excel文件首先要另存为.xlsm格式文件,第一次打开.xlsm文件会有安全警告,选择启用即可
第二步:顺次选择工具栏 –开发工具–插入–命令按钮(Active X控件),在表单中的适当位置拖动鼠标即可插入。如果该步骤有问题,可以查看我前期写的公众号文章,里面有详细的步骤:如何快速开始编程还不用搭建环境,那一定就是它了……
第三步:双击添加的命令按钮,快速打开VBA代码并且默认会创建类似如下的两行代码,然后我们只要在中间添加代码就可以通过命令按钮调用了
Private Sub CommandButton1_Click()
End Sub
Sheet页面插入命令按钮后显示

代码实现
以下代码调试通过,可以直接复制粘贴使用,如果想自己写代码实现,可以参考如下的代码分析
首先通过ColumnWidth属性设置D列宽度,最后的D列字体加粗也可以一起设置,都涉及同一个Range对象
接着通过Do while循环顺次读取表格数据,这样做的好处就是不需要提前计算数据量,通过读取下一行数据判断表格数据是否结束,具体以哪一列数据为准,根据实际情况来,保证一条:该行数据是必填项目,中间不会出现空的内容即可
最后是数据条处理,通过For Next循环控制数据条的长短。使用If Else分支语句确定数据条显示的颜色,当然也可以直接使用.Font.ColorIndex = 3 设置为红色,10为绿色
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim iRow As Integer
Dim nResults As Double '计算完成率后保存数据用
Dim sResults As String '完成率及数据条|||"组合处理使用
Dim n As Integer '控制输出多少个“|”,按比例计算
Set ws = Worksheets("Sheet1")
iRow = 2
'设置D列的列宽,方便增加数据条显示
ws.Range("D1").ColumnWidth = 56
Do While ws.Cells(iRow, 1) <> ""
nResults = Round(ws.Cells(iRow, "C").Value / ws.Cells(iRow, "B").Value, 4)
For n = 1 To Int(nResults * 50)
sResults = sResults & "|" '这里可以自由选择喜欢的符号,其他不用动,将"|"替换掉即可
Next
ws.Cells(iRow, "D").Value = sResults & nResults * 100 & "%"
'根据完成进度设置显示颜色
If nResults < 0.6 Then '进度不足60%显示红色
With ws.Range("D" & iRow)
.Font.Color = RGB(255, 0, 0) ' 红色
End With
ElseIf nResults >= 0.6 And nResults < 0.8 Then '进度大于等于60%小于80%显示橙色
With ws.Range("D" & iRow)
.Font.Color = RGB(247, 150, 70) ' 橙色
End With
Else '进度大于等于80%显示绿色
With ws.Range("D" & iRow)
.Font.Color = RGB(0, 176, 80) ' 绿色,稍微加点蓝色,不发亮不刺眼
End With
End If
iRow = iRow + 1
sResults = "" '清除掉上一个数据
Loop
'设置D列单元格内字体加粗,比较清晰方便查看
With ws.Columns("D").Font
.Bold = True
End With
MsgBox "百分比数据条生成完毕,查看D列数据!"
End Sub
运行结果
在Sheet1页面点击命令按钮“生成百分比数据条”后程序开始运行,运行结束会有提示框,关闭提示框查看Sheet1表单中表格
D列列宽自动调整,增加数据条,根据数据条长度直观显示完成情况
进度小于60%数据条显示红色,大于等于80%显示绿色,其他显示橙色,根据颜色就可以区分完成情况
具体完成百分比数据也展示出来了,并紧挨着数据条在其后按照百分比显示,方便核对具体数据

若B列或是C列数据有变化,只需要点击“”按钮重新生成即可,省时省力,交给新手小白都能独立完成数据刷新操作
回顾总结
使用百分比数据条形式显示进度进展状况,在编码实现上相对来说简单一些,非常适用新手做练习使用。总之一句话,有需求有目标才会有动力,告别纸上谈兵从现在做起吧
如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想着提升自我,都可以已关注我的公众号,解锁更多的VBA技能
我的分享对你有帮助的话,麻烦点赞、加已关注支持一下吧,你的支持就是我最大的创作动力!
最后,再提醒一下大家,如果你有需求但因为各种问题搁置,可以把你的问题反馈给我,一起帮你出谋划策哦!搜索公众号“努力鸭是黑色的”,已关注我的公众号能够更加及时沟通反馈哦!














暂无评论内容