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程序中涉及到的知识点包括:

  1. 数据文件读取
  • “打开文件”对话框的调用
  • 筛选指定格式文件
  • 设置默认打开路径
  • 工作簿、工作表的概念及VBA中对其进行的操作的方法
  • 文件属性的获取

数据清洗处理

  • EXCEL中表格内容到VBA数组的相互转换
  • VBA中的“For Next”循环结构
  • 数据类型及强制转换数据类型
  • 文本格式化函数Format的使用
  • 词典的创建和使用

图表绘制及调整

  • 在EXCEL中使用VBA来创建图表,指定位置和大小;
  • 图表元素的添加、删除和修改;
  • 图表属性的设定
  • 图表转换为图片的方法

.net 从txt中读取行数据_【VBA项目】从指定文件中读取数据并绘制图表相关推荐

  1. python从文件中读取数据_【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  2. 在jmeter中怎么提取数据_如何使用JMeter从文件中提取数据

    在性能测试方面,重用响应数据至关重要.几乎(如果不是全部!)负载测试场景假设您: 从先前的响应中提取有趣的方面,并在下一个请求中重用它们(也称为相关) 确保实际响应符合预期(又称断言) 因此,如果您是 ...

  3. python读取一个图像_从图像处理python的文件中读取多个图像

    嗨,我有一个脚本来运行图像处理.但是我想用一个循环或者其他方法从一个文件中读取多个图像 例如C:\Users\student\Desktop\Don\program (opencv version)\ ...

  4. 向对象中添加数据_在RMarkdown编译HTML文件中添加数据下载按钮

    介绍一个工具包, 主要是用来解决我平常写文档时文档和结果分离的问题. 它可以在 RMarkdown 输出的 HTML 文件中添加下载数据的按钮, 而不需要运行 shiny 模式. 安装 install ...

  5. python入门文件读取与写入_使用Python对Dicom文件进行读取与写入的实现

    Pydicom 单张影像的读取 使用 pydicom.dcmread() 函数进行单张影像的读取,返回一个pydicom.dataset.FileDataset对象. import os import ...

  6. vue样式中背景图片路径_解决vue打包css文件中背景图片的路径问题

    vue-cli写完的静态页面我们在node环境中引入没有问题,但是打包后放在Apache环境下,路径却有问题了 如一个简单css语句 .welcome { width: 420px; height: ...

  7. 第一个小项目 - 去掉指定文件中的注释

    1 //功能: 2 //去掉指定cpp源文件中的注释 3 4 //思路: 5 //与一cpp源文件建立关联 6 //以字符形式打开 7 //依次检测它的每一个字符,直到遇到eof(文件结束符) 8 / ...

  8. python怎样清除csv中的数据_使用d清除CSV文件中的数据

    我试图从GCS读取一个CSV(带头)文件,该文件大约有150列,然后 1为特定列设置列数据 2用空值更新所有列的NaN 三.将csv文件(带标题)写入GCS 这里有一个棘手的部分:处理是在云数据流上完 ...

  9. python从文件中提取特定文本_使用Python从HTML文件中提取文本

    我发现最好的一段代码用于提取文本,而不需要javascript或不需要的东西:import urllibfrom bs4 import BeautifulSoupurl = "http:// ...

  10. 将文件中所有数读到一个数组中_「数据结构与算法」将5个文件中的一千万年龄合并到一个新文件中...

    现在有5个文件,文件里面分别存储着1千万个用户年龄,并且每个文件中的年龄都是有序的(从小到大),现在需要将这5个文件整合到一个文件中,新文件的内容依然要保持有序(从小到大). 初始化数据 1.数据生成 ...

最新文章

  1. 详解jQuery对象与DOM对象的相互转换
  2. Markdown 如何实现空行、空格?
  3. 忽然觉得照着技术文档一个demo一个demo的写是一个十分好的学习方式
  4. SQL注入到EXP编写
  5. OpenWrt——Could not lock /var/lock/opkg.lock: Resource temporarily unavailable.
  6. [html] canvas生成图片有没有跨域问题?如果有如何解决?
  7. CentOS6.5 搭建 LNMP (linux + nginx + mysql + php)
  8. jq ajax traditional,jQuery ajax - param() 方法
  9. 小程序多端开源框架黑马!它是如何做到快应用小程序自由转译的?
  10. final 在java,final 在java中的注意点
  11. c#中如何删除数组中的元素_C中的数组
  12. jquery easyui里datagrid用法记录
  13. 10月| R社区原创作者免费赠书
  14. Spring之AOP面向切面编程
  15. Git/Gitlab项目开发使用简介
  16. 将视频或动态壁纸设置成桌面
  17. php spider 参数详解,利用phpspider爬取网站数据
  18. 【VBA研究】关于工作表单元格复制粘贴的语句
  19. exceptions - Pitfall: the Lost Exception
  20. 题都城南庄---中华诗词-唐五代-崔护

热门文章

  1. spring整合rabbitMQ最新版
  2. 使用PLSQL 远程连接oracle数据库
  3. flowable用户组的处理
  4. 玩转 Linux 常用命令
  5. String类、StringBuffer类、StringBuilder类的区别
  6. 第十篇:Spring Boot整合mybatis+Mysql 入门试炼02
  7. 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器
  8. git commit -m 提交时报错husky pre-commit (node v12.18.2)
  9. Java-变量、常量
  10. 网络发现协议服务器,关于 DHCP 服务器和网络发现