利用VBA在Excel里画曲线图
利用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里画曲线图相关推荐
- 利用VBA将excel中链接转换为图片形式存放在指定的单元格中
利用VBA将excel中链接转换为图片形式存放在指定的单元格中 VBA代码如下 Private Declare Function URLDownloadToFile Lib "urlmon& ...
- 用Python在Excel里画出蒙娜丽莎的方法示例
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...
- vba 输出文本 m Linux,利用VBA实现EXCEL数据输出TXT等文本文件
VBA--Visual Basic For Application的简称,属于VB的一个子集,广泛应用于Word套件的自动化,其寄存于现有的EXCEL或word等的文件里面 日常生活中,需要做到有逻辑 ...
- 用poi在excel里画日历
众所周知,Java里读写excel的开源包里poi是最知名的,多年前就已经能支持xlsx格式的excel了,并且对于word等office组件支持.如果项目中要开发类似excel的读写,poi可以说是 ...
- 用Python在Excel里画出蒙娜丽莎
之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳. 对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! . mona ...
- 高级操作!用 Python 在 Excel 里画出蒙娜丽莎
之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳. 对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! mona-l ...
- 利用VBA在Excel中批量画图
有很多图要画的时候要崩溃的,必须上VBA来解决.比如现在有个Excel数据表,研究五个竞争对手,每个竞争对手都生产有四种设备,每个设备都有可能具有8个效果中的几个.现在要研究五个竞争对手的专利情况.要 ...
- 日常使用------利用VbA对Excel中的多个sheet工作表排序
在excel工作簿中对有多个工作表,由于个人需要,对每个工作表中某一值的比较大小后,然后进行排序. 由于vba中字典对应值比较难以排序,所以就分为两步 第一步是提取工作表名和对应字段写到工作表中: S ...
- 利用VBA给Excel或WPS表格添加自定义函数(如方位角函数)
在Excel或WPS表格中要使用VBA需要先打开"开发工具"菜单,打开方式请在网上度一下: 点击"开发工具"菜单,在"开发工具"工具栏上点击 ...
- 利用VBA在excel中批量添加备注
excel表中有4列数据,给第4列添加批注,批注的内容为第4列的数据,如何批量添加呢? 按Alt+f11打开VBA编辑器,加入以下代码 Sub 添加批注() Dim t As String For i ...
最新文章
- Linux网络编程中tcp_server和tcp_client函数的封装
- 启动计算机引导win10,教您win10引导项丢失怎么办
- iOS 各种编译错误汇总
- AT1219-歴史の研究(历史研究)【回滚莫队】
- 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16
- 点击图片旋转180_一起来点亮斗门!请你旋转手机屏幕90横屏并点击图片!
- 这两年亚马逊创业都是一个非常火热的话题
- 开始上手docker
- 一个PHP多个界面跳转,php中的多种界面跳转方式
- 理解C语言——从小菜到大神的晋级之路(9)——多维数组
- C++ map的基本操作和使用
- 2020年NLP算法秋招“神仙打架”,我该如何应对?
- 大数据学习总结(5)参考elk技术架构
- Java:Eclipse下载安装教程,以及Eclipse 安装汉化包的方法
- 桥接命令brctl的用法
- 区块链ppt资料准备
- 哈佛邓云天:Cascaded Text Generation with Markov Transformers
- 利用IDM没办法从B站下视频?下载悬浮条不显示?解决方案来了!
- RTI DDS 记录
- 力扣 6181. 最长的字母序连续子字符串的长度