利用VBA在Excel里画曲线图

虽然利用Excel的插入工具栏里的插入图表可以方便的生成曲线图,但对于数据多的时候还是觉得麻烦了一些。我想到了利用VBA来一键生成曲线图。以前从来没有接触过VBA,所以走了一些弯路,我在CSDN查了好多东西,在ExcelHome查了好多东西。现在实现了想要的东西,来反馈给CSDN。

要处理的数据

想要的结果

实现

因为对VBA的语法不熟悉,所以先依靠宏录制工具,然后再对代码做出一点修改。先画出一行,然后通过在后面追加数据来实现。直接上代码吧。

Sub 平滑线2()
'局限性:数据所在列数不能超过第702列
'   该代码可以生成带坐标标题的图表
'   要求:坐标轴标题要在数据区紧邻的上方,数据选区不能在第一行。
' 使用方法:按照上面的例子,只需先选中A2:A17单元格,然后运行代码就可以了。
'   该代码可以通过更改For i=2 To X,来自定义生成多少个系列。X对应系列数
'Dim strX, strY, temp0, temp1, row, col, pos, pos0 strX = Selection.Address    '$A$2:$A$17,选区作为X轴,地址名字就是$A$2:$A$17pos = InStr(strX, ":")      '5or6,获得字符串strX中,冒号":"的位置pos0 = InStr(2, strX, "$")  '3or4,获得第二个$的位置row = MID(strX, pos0 + 1, pos - pos0 - 1) - 1 '1,获得数据区第一行的行数,本例是第2 行。减1后得到第1行。'留着画坐标轴标题用。Call columnAdd(strX, strY) '调用列向右移动的方法,这样就得到strY=$B$2:$B$17col = MID(strY, 2, pos0 - 2)  '获得列数即col="B"'画表,这些是通过宏录制,然后删掉一些不重要的语句得到。ActiveSheet.Shapes.AddChart.SelectActiveChart.SetSourceData Source:=Range(strY)ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ' xlXYScatterSmoothNoMarkers是图表类型,可以通过录制宏'得到想到的图表类型的代码ActiveChart.SeriesCollection(1).XValues = Range(strX)   '横轴数据值是strX选区数据ActiveChart.SeriesCollection(1).Name = Range(col & row)    '系列1名称是单元格B1里面的文字内容
'加坐标轴和标题,这也是录制宏得到的。ActiveChart.ApplyLayout (1)ActiveChart.ChartTitle.Text = "自定义标题"col = MID(strX, 2, pos0 - 2)ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = Range(col & row).Value 'X轴名称为A1单元格内文字内容
'追加列数据,下面是一个for循环For i = 2 To 4    '这里的4表示Y轴有4列数据,可以根据实际情况自己定Call columnAdd(strY, strY)    '列向右移动col = MID(strY, 2, pos0 - 2)    '获得当前列比如col=B ,col=CActiveChart.SeriesCollection.NewSeries   '添加一个新的系列ActiveChart.SeriesCollection(i).XValues = Range(strX)    '新系列的X轴数据ActiveChart.SeriesCollection(i).Values = Range(strY) '新系列的Y轴数据ActiveChart.SeriesCollection(i).Name = Range(col & row)  '新系列的名称Next
End Sub
'列向右移动函数,strX 是移动前的列,strY是移动后的列
Private Sub columnAdd(strX, strY)Dim pos1, pos2, letterNum, temp, temp0, temp1pos1 = 1pos2 = InStr(pos1 + 1, strX, "$") 'strX=$A$2:$A$17 ‘获得第二个$的位置,这里写得麻烦了。letterNum = pos2 - pos1 - 1  '字符串长度If letterNum = 1 Then   '如果是一个字母temp0 = MID(strX, 2, 1)      '获得这个字母,本例这里是AIf temp0 = "Z" Then '如果是字母Z,那么下一列是AAtemp1 = "AA"strY = Replace(strX, temp0, temp1)  '直接把所有Z替换成AAGoTo LastLine  '跳到最后一行,结束End Iftemp1 = Chr(asc(temp0) + 1)  '如果不是Z,就获得ACSII码,返回加1后的值。本例是BstrY = Replace(strX, temp0, temp1) '将所有A换成BElse'如果不是一个字符,而是两个字符,这里整体替换两个字符   strX=$AZ$2:$AZ$17temp = MID(strX, pos2 - 2, 1)   '获得前面一个字符Atemp0 = MID(strX, pos2 - 1, 1)  '获得后面一个字符ZIf temp0 = "Z" Then     '如果后面字符是Z,就把前一个字符加1,得到B,后面新的字符必是A,&是字符连接temp1 = Chr(asc(temp) + 1)   'BstrY = Replace(strX, temp & temp0, temp1 & "A") 'BA整体替换AZGoTo LastLineEnd Iftemp1 = Chr(asc(temp0) + 1)     'B,如果后面的字符不是Z,就把后面的字符加1即可。strY = Replace(strX, temp & temp0, temp & temp1) 'AB替换AAEnd If
LastLine:
End Sub

利用VBA在Excel里画曲线图相关推荐

  1. 利用VBA将excel中链接转换为图片形式存放在指定的单元格中

    利用VBA将excel中链接转换为图片形式存放在指定的单元格中 VBA代码如下 Private Declare Function URLDownloadToFile Lib "urlmon& ...

  2. 用Python在Excel里画出蒙娜丽莎的方法示例

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  3. vba 输出文本 m Linux,利用VBA实现EXCEL数据输出TXT等文本文件

    VBA--Visual Basic For Application的简称,属于VB的一个子集,广泛应用于Word套件的自动化,其寄存于现有的EXCEL或word等的文件里面 日常生活中,需要做到有逻辑 ...

  4. 用poi在excel里画日历

    众所周知,Java里读写excel的开源包里poi是最知名的,多年前就已经能支持xlsx格式的excel了,并且对于word等office组件支持.如果项目中要开发类似excel的读写,poi可以说是 ...

  5. 用Python在Excel里画出蒙娜丽莎

    之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳. 对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! . mona ...

  6. 高级操作!用 Python 在 Excel 里画出蒙娜丽莎

    之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳. 对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! mona-l ...

  7. 利用VBA在Excel中批量画图

    有很多图要画的时候要崩溃的,必须上VBA来解决.比如现在有个Excel数据表,研究五个竞争对手,每个竞争对手都生产有四种设备,每个设备都有可能具有8个效果中的几个.现在要研究五个竞争对手的专利情况.要 ...

  8. 日常使用------利用VbA对Excel中的多个sheet工作表排序

    在excel工作簿中对有多个工作表,由于个人需要,对每个工作表中某一值的比较大小后,然后进行排序. 由于vba中字典对应值比较难以排序,所以就分为两步 第一步是提取工作表名和对应字段写到工作表中: S ...

  9. 利用VBA给Excel或WPS表格添加自定义函数(如方位角函数)

    在Excel或WPS表格中要使用VBA需要先打开"开发工具"菜单,打开方式请在网上度一下: 点击"开发工具"菜单,在"开发工具"工具栏上点击 ...

  10. 利用VBA在excel中批量添加备注

    excel表中有4列数据,给第4列添加批注,批注的内容为第4列的数据,如何批量添加呢? 按Alt+f11打开VBA编辑器,加入以下代码 Sub 添加批注() Dim t As String For i ...

最新文章

  1. Linux网络编程中tcp_server和tcp_client函数的封装
  2. 启动计算机引导win10,教您win10引导项丢失怎么办
  3. iOS 各种编译错误汇总
  4. AT1219-歴史の研究(历史研究)【回滚莫队】
  5. 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16
  6. 点击图片旋转180_一起来点亮斗门!请你旋转手机屏幕90横屏并点击图片!
  7. 这两年亚马逊创业都是一个非常火热的话题
  8. 开始上手docker
  9. 一个PHP多个界面跳转,php中的多种界面跳转方式
  10. 理解C语言——从小菜到大神的晋级之路(9)——多维数组
  11. C++ map的基本操作和使用
  12. 2020年NLP算法秋招“神仙打架”,我该如何应对?
  13. 大数据学习总结(5)参考elk技术架构
  14. Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法
  15. 桥接命令brctl的用法
  16. 区块链ppt资料准备
  17. 哈佛邓云天:Cascaded Text Generation with Markov Transformers
  18. 利用IDM没办法从B站下视频?下载悬浮条不显示?解决方案来了!
  19. RTI DDS 记录
  20. 力扣 6181. 最长的字母序连续子字符串的长度

热门文章

  1. 十年优秀网络玄幻小说大点评(推荐)
  2. 北京周边有意境的好去处!!!
  3. 数据库表结构文档生成工具-screw (螺丝钉)
  4. nabcd分析解谜类rpg游戏
  5. 什么是蜂窝移动网络?
  6. 中职计算机教师发言范文话,中职班主任发言稿范文(精选4篇)
  7. 大芒果服务器外网登录时一直显示正在登录,mangos-mangos
  8. 极品PS动作繁星散射GIF动画
  9. 金山WPS c++ 二面面经
  10. UE4自定义资源和编辑器(二):创建自定义编辑器