使用VBA快速创建非规则数据图表

2024-08-26 04:28

本文主要是介绍使用VBA快速创建非规则数据图表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实例需求:工作表中共有4组数据,第一组数据涵盖所有日期,其他3组均为断续数据。

在这里插入图片描述

现在需要创建如下图所示的线图,由于数据区域是非连续的,因此无法直接创建图表。

在这里插入图片描述

需要先将数据表按照日期对齐,如下图所示,才能创建图表。

在这里插入图片描述

Sub Demo()Dim i As Long, j As Long, iCol As Long, ColCnt As LongDim arrData, arrData2, rngData As Range, allDateRng As RangeDim arrRes, iR As Long, oSht As Worksheet, xRng As RangeDim LastRow As Long, aRow, iMin As Long, iMax As LongaRow = Array(2, 5, 8, 11) Sheets(1).Copy After:=Sheets(Sheets.Count)Set oSht = ActiveSheetSet allDateRng = oSht.Range("A" & aRow(0)).CurrentRegionarrData = allDateRng.ValueColCnt = UBound(arrData, 2)Set xRng = allDateRng.Resize(1, ColCnt - 1).Offset(, 1)iMin = Application.Min(oSht.Rows(aRow(0)))For i = 1 To UBound(aRow)Set rngData = oSht.Range("A" & aRow(i)).CurrentRegionarrData2 = rngData.ValueReDim arrRes(1, 1 To ColCnt)arrRes(0, 1) = arrData2(1, 1)arrRes(1, 1) = arrData2(2, 1)For j = 2 To UBound(arrData2, 2)iCol = CLng(arrData2(1, j)) - iMin + 2arrRes(0, iCol) = arrData2(1, j)arrRes(1, iCol) = arrData2(2, j)NextrngData.Resize(, ColCnt).Value = arrResNextDim oShp As Shape, oCht As Chart, oSer As Series, serRng As RangeFor i = 1 To UBound(aRow)Set serRng = allDateRng.Rows(1).Offset(aRow(i) - aRow(0) + 1)Set allDateRng = Application.Union(allDateRng, serRng)NextSet oShp = ActiveSheet.Shapes.AddChart2(332, xlLineMarkers)oShp.Top = oSht.Range("A15").Top: oShp.Left = 0Set oCht = oShp.ChartoCht.SetSourceData allDateRng
End Sub

【代码解析】
第6行代码创建数组,其中每个元素代表一个图表数据的起始行号。在此示例中,数据间隔是规律化的,也可以使用循环获取数据区域。
第7行代码将数据表复制一份,并保存在当前工作簿中的最后位置。
第8行代码获取新创建的工作表对象。
第9行代码获取第一个数据区域。
第10行代码将数据区域的值加载到数组中。
第11行代码获取数据的列数。
第12行代码获取首行数据区域,注意此处不保护首列。
第13行代码获取首行数据区域中的最小日期。
第14~26行代码循环处理后续数据区域。
第15行代码获取数据区域。
第16行代码将数据加载到数组中。
第17行代码声明一个用于保存结果的数组。
第18~19行代码用于读取数据区域的首列两个单元格内容。
第20~24行代码循环处理后续数据。
第21行代码获取当前日期所在列的序号。
第22~23行代码用于将指定列两个单元格内容填充到对应的列,实现日期对齐。
第25行代码将整理后的数据区域写入工作表。
第28~31行代码循环遍历数据区域,将数据单元格区域组合为一个Range对象allDateRng。
第32行代码创建一个线图。
第33行代码调整图表的位置。
第34行代码获取图表对象。
第35行代码设置图表的数据源单元格区域。

运行示例代码,效果如下图所示。

在这里插入图片描述

这篇关于使用VBA快速创建非规则数据图表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107538

相关文章

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为