VBA 是一种很久远的编程语言,但并不过时。在满足以下两个条件时,借助 VBA 可以极大的提升生产率,降低出错率:
- 你的电脑上不允许自主安装软件;
- 你需要执行的工作中大部分的步骤都是固定且重复的。
项目背景
近期接到一个工作任务,在运行设备中,会定期生成数据记录文件(txt 格式),我需要将这个文件中的 1000 个数据导入到 Excel 中,通过公式计算,得到需要的另外两列数据,将这两列数据作为数据源,设置一个组合图表(折线图+折线图),设置好图表的格式,最后将图表转换为图片,保存到指定位置。同时在主表中新建一行记录本次的相关数据。
拿到手的数据如下如所示:
最终得到的图片如下图所示:
整个过程看起来并不复杂,一套流程操作下来大概也只需要不到 10 分钟的时间。但是当这个工作变成每天 100 次的话,就是一个相当考验人的任务了。那么借助 VBA,可以将这个过程缩减到 10 秒钟,看一下是如何实现的。
任务分解
首先对文档数据进行分析,它的数据内容是变化的,但是遵循了固定的格式:
- 文档包含1004个数据,数据以“,”来进行分割;
- 第1-1000个数据代表测量数据,也是需要进行进一步处理的数据
- 第1001个数据代表测量序号,需要手动设置到图标上,同时图片的保存文件名也需要用到;
- 第1002-1004个数据是相关的状态型号,需要记录存档。
然后是对数据进行的处理:
- 新建一列B,取值为对应记录数据的奇偶性,(奇数为100,偶数为0);
- 再新建一列C,取值为对应记录数据除以4096,是实际的测量值。
以BC列为数据源,插入一个组合图表:
- 图表类型选择“组合图表”,
- 将序列1(B列)设置为“折线图”,设置在“次坐标轴”上;
- 将序列2(C列)设置为“折现图”,设置在“主坐标轴”上;
- 为序列2(C列)添加一条趋势线(移动平均、周期20);
- 修改主标题、主/次坐标轴标题,主/次横轴标题的文字;
- 修改次坐标轴的坐标刻度(只保留0,100);
- 设置3条折线的颜色、宽度、透明度等,让数据显示更加明显。
VBA 实现
根据分解的任务,就可以编写VBA程序来实现整个过程。
这个项目中,VBA程序中涉及到的知识点包括:
- 数据文件读取
- “打开文件”对话框的调用
- 筛选指定格式文件
- 设置默认打开路径
- 工作簿、工作表的概念及VBA中对其进行的操作的方法
- 文件属性的获取
- EXCEL中表格内容到VBA数组的相互转换
- VBA中的“For Next”循环结构
- 数据类型及强制转换数据类型
- 文本格式化函数Format的使用
- 词典的创建和使用
- 在EXCEL中使用VBA来创建图表,指定位置和大小;
- 图表元素的添加、删除和修改;
- 图表属性的设定
- 图表转换为图片的方法