ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2286|回复: 6

[求助] VBA批量画折线图的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-10-13 21:52 | 显示全部楼层 |阅读模式
各位高手,本人最近有一个需求,需要根据动态数据批量画出折线图进行分析。

大致介绍一下:
有3组数据,其中每4条数据作为一个组,循环套那种,比如数据:1,2,3,4,5,6,那么,1234为一组,2345为一组,3456为一组,分别编号为1234为组1,2345为组2,3456为组3,要求如下:
1. 按列画折线图,每组数据一共有3列,第一列作为x轴数据,第二列和第三列,作为系列1和系列2
2. 图表标题要求为组号,例如,1234组数据画出来的折线图标题为1,2345组数据画出来的折线图标题为2,以此类推
3. 数据是动态的,意味着,当数据源变动的时候,组的数量也会发生变化,那么要求VBA设计的时候,图的数量和组的数量必须要随着数据源的变动而进行对应的变化。类似下图,右边是我手动画的图,也是我期望能画出来的效果。左边的图是我自己写的VBA做出来的图,数据源和x轴以及系列的设定都已经实现,但是有两个问题,第一,图表标题我做不到。具体原因我也清楚,但是不知如何解决,第二,VBA画的图只能画到第39组数据,后面的出不来。不知道为什么。

image.jpg


参考论坛大佬们以前的类似问题的回答,我自己参考写了一个VBA。

Option Explicit

Sub AddChart()
    Dim i
    For i = 2 To Sheets("图形分析-4").Range("$E$2").Value
        Charts.Add
        '增加一个图表
        ActiveChart.ChartType = xlLine
        '设置图表类型为折线图
        ActiveChart.Location Where:=xlLocationAsObject, Name:="图形分析-4"
        '设置图表的位置为当前工作表中
        ActiveChart.SetSourceData Source:=Sheets("图形分析-4").Range("H" & i & ":J" & i + 3), PlotBy:=xlColumns
        '设置图表的数据源
        ActiveChart.FullSeriesCollection(1).XValues = "='图形分析-4'!$H$" & i & ":$H$" & i + 3
        ActiveChart.FullSeriesCollection(3).Delete
        ActiveChart.FullSeriesCollection(1).Values = "='图形分析-4'!$I$" & i & ":$I$" & i + 3
        ActiveChart.FullSeriesCollection(2).Values = "='图形分析-4'!$J$" & i & ":$J$" & i + 3
        ActiveChart.Legend.Select
        Selection.Delete
        '删除图例
        ActiveChart.SetElement (msoElementChartTitleAboveChart)
        '添加图表标题位于图表上方
        ActiveChart.ChartTitle.Select
        ActiveChart.ChartTitle.Text = i
        '设置图表标题为对应组号
        ActiveChart.Parent.Top = 220 * (i - 2) / 4
        '设置图表的上下间隔为220磅
        ActiveChart.Parent.Left = 456
        '设置图表距左为456磅
    Next i
End Sub

Sub DelChart()
    Dim ch As ChartObject
    For Each ch In ActiveSheet.ChartObjects
        ch.Delete
        '删除图表对象
    Next
End Sub


这里,图表标题的问题我知道。直接赋值为i,肯定不对,我也尝试过添加一个参数n,将n赋值给图表标题,然后n=n+1,放在i的循环外面,再循环n,结果一运行就死机。估计循环锁了。
至于图表标题的数量,如果用以上的VBA运行,只能画到39组,
我尝试过把i的值改为:i = 2 To Sheets("图形分析-4").Range("$E$2").Value * 4,但是会报错,我估计是i+3的值超过了范围,
但是假如说,i = 2 To Sheets("图形分析-4").Range("$E$2").Value*3 就不会报错,但是也只能画到116组,很奇怪
我用的是office2019,所以有些对象名可能不一样,不过这个不重要。

还有一些细节,比如设定折线图Y轴的固定刻度之类的,那些不重要,我自己去找资料。

求大佬指点以下2个问题
1. 如何把图表的标题按组号顺序生成
2. 完整的画完所有组别的图。

请查看附件




批量生成折线图.rar

59.7 KB, 下载次数: 31

TA的精华主题

TA的得分主题

发表于 2021-10-14 09:42 | 显示全部楼层
图表的例子:
  1. Sub AddChart()
  2.     Dim i%, Myr%, ht, tp, lf, wd, myChart, n%
  3.     Sheet14.Activate
  4.     Myr = Cells(Rows.Count, 7).End(xlUp).Row
  5.     ht = [a1].Resize(15, 1).Height
  6.     wd = [a1].Resize(1, 7).Width
  7.     lf = [j1].Left
  8.     For i = 1 To Cells(Myr, 7).Value Step 4
  9.         n = n + 1
  10.         tp = Cells(15 * n - 14, 1).Top
  11.         Set myChart = ActiveSheet.ChartObjects.Add _
  12.                     (Left:=lf, Top:=tp, _
  13.                     Width:=wd, Height:=ht)
  14.         '增加一个图表
  15.         With myChart.Chart
  16.             .ChartType = xlLine
  17.             '设置图表类型为折线图
  18.             .SetSourceData Source:=Range("H" & i + 1 & ":J" & i + 4), PlotBy:=xlColumns
  19.             '设置图表的数据源
  20.             .FullSeriesCollection(1).XValues = "='图形分析-4'!$H$" & i + 1 & ":$H$" & i + 4
  21.             .FullSeriesCollection(1).Values = "='图形分析-4'!$I$" & i + 1 & ":$I$" & i + 4
  22.             .FullSeriesCollection(2).Values = "='图形分析-4'!$J$" & i + 1 & ":$J$" & i + 4
  23.             .Legend.Delete
  24.             .Axes(xlValue).Format.Line.Visible = msoFalse
  25.             '删除图例
  26.             .SetElement (msoElementChartTitleAboveChart)
  27.             '添加图表标题位于图表上方
  28.             .ChartTitle.Text = Cells(i + 1, 7).Value
  29.             '设置图表标题为对应组号
  30.         End With
  31.     Next
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-14 21:49 | 显示全部楼层
我在我自己的excel里面运行了一下。结果报错。 image.png

image.png

不知道是不是office版本的原因,我的是office2019

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-14 21:51 | 显示全部楼层

蓝版好,运行时报错,下面我有列出截图。麻烦看看是不是版本的问题。
另外,你的代码我看了,有好几个地方看不懂,我准备自己查资料学习一下你代码里面不懂的部分。重点是学习你的思路。

TA的精华主题

TA的得分主题

发表于 2021-10-15 09:09 | 显示全部楼层
应该不是版本的问题。你可以查看Myr=?,G列有数据的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-15 22:56 | 显示全部楼层
蓝桥玄霜 发表于 2021-10-15 09:09
应该不是版本的问题。你可以查看Myr=?,G列有数据的?

这也是我奇怪的地方,G列没有数据,是空列,间隔用的。

TA的精华主题

TA的得分主题

发表于 2024-11-24 19:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
收藏了,怎么删除呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 08:49 , Processed in 0.031767 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表