VBA调试运行进入:

右键Excel的Sheet - 查看代码 - Microsoft Visual Basic for Applications(VBA)

  为了方便,建议开启“开发工具”栏:

文件 - 选项 - 自定义功能区 - 勾选“开发工具”

几个例子:

删除工作表内所有图表

Sub 删除全部图表()
ActiveSheet.ChartObjects.Delete
End Sub

录制一个宏

' 录制的创建折线图代码
Sub 宏12()
'
' 宏12 宏
' '
Range("D1,D2:D16,E1,E2:E16,G1,G2:G16,H1,H2:H16").Select ' 选择数据区域
Range("H2").Activate
ActiveSheet.Shapes.AddChart2(227, xlLine).Select ' 选择插入折线图
ActiveChart.SetSourceData Source:=Range( _
"测试Sheet名称!$D$1,测试Sheet名称!$D$2:$D$16,测试Sheet名称!$E$1,测试Sheet名称!$E$2:$E$16,测试Sheet名称!$G$1,测试Sheet名称!$G$2:$G$16,测试Sheet名称!$H$1,测试Sheet名称!$H$2:$H$16" _
) ' 图表的数据选区
Application.CutCopyMode = False ' 取消剪切赋值模式
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).XValues = "=测试Sheet名称!$B$2:$B$16" ' 选择 X 轴坐标选区
ActiveChart.SetElement (msoElementLegendRight) ' 选择图例右边显示
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "我是标题" ' 设置标题名称
Selection.Format.TextFrame2.TextRange.Characters.Text = "我是标题"
With Selection.Format.TextFrame2.TextRange.Characters(1, 4).ParagraphFormat
.TextDirection = msoTextDirectionLeftToRight
.Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 4).Font ' 字体设置
.BaselineOffset = 0
.Bold = msoFalse
.NameComplexScript = "+mn-cs"
.NameFarEast = "+mn-ea"
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(89, 89, 89)
.Fill.Transparency = 0
.Fill.Solid
.Size = 14
.Italic = msoFalse
.Kerning = 12
.Name = "+mn-lt"
.UnderlineStyle = msoNoUnderline
.Spacing = 0
.Strike = msoNoStrike
End With
End Sub

简化宏再使用

由录制得到的内容可以简化后使用:

Sub 生成图表()
ActiveSheet.Shapes.AddChart2(227, xlLine).Select ' 选择插入折线图
ActiveChart.SetSourceData Source:=Range("测试Sheet名称!$D$1:$D$16,$E$1:$E$16,$G$1:$G$16,$H$1:$H$16") ' 图表的数据选区
ActiveChart.FullSeriesCollection(1).XValues = "=测试Sheet名称!$B$2:$B$16" ' 选择 X 轴坐标选区
ActiveChart.SetElement (msoElementLegendRight) ' 选择图例右边显示
ActiveChart.ChartTitle.Text = "我是标题" ' 设置标题名称
End Sub

大量图表可采用for循环

Sub 批量生成图表()
Dim numInt, cntInt As Integer
Dim sheetNameStr, rowStartStr, rowEndStr, titleNameStr As String
sheetNameStr = "测试Sheet名称":
cntInt = 0:
For numInt = 2 To 500 Step 20
rowStartStr = Replace(Str(numInt), " ", ""): ' 去除数字转字符中的多余空格
rowEndStr = Replace(Str(numInt + 19), " ", ""):
cntInt = cntInt + 1:
titleNameStr = Replace(Str(cntInt * 10), " ", ""): ' 使用简化的宏
ActiveSheet.Shapes.AddChart2(227, xlLine).Select: ' 选择插入折线图
ActiveChart.SetSourceData Source:=Range(sheetNameStr & _
"!$D$1,$D$" & rowStartStr & ":$D$" & rowEndStr & _
",$E$1,$E$" & rowStartStr & ":$E$" & rowEndStr & _
",$G$1,$G$" & rowStartStr & ":$G$" & rowEndStr & _
",$H$1,$H$" & rowStartStr & ":$H$" & rowEndStr _
): ' 图表的数据选区
ActiveChart.FullSeriesCollection(1).XValues = "=" & sheetNameStr & "!$B$" & rowStartStr & ":$B$" & rowEndStr: ' 选择 X 轴坐标选区
ActiveChart.SetElement (msoElementLegendRight): ' 选择图例右边显示
ActiveChart.ChartTitle.Text = "我是标题:" & titleNameStr ' 设置标题名称
Next
End Sub

上面的代码生成效果如下:

注:

操作 方式
注释 单引号 '
多行合并 冒号 :
分多行书写 末尾用下划线 _
变量定义 Dim varx,vary As String
连接字符串变量和字符串 与号 &
for循环 Dim num As Integer
for num = 1 To 15 Step 2
...循环内容...
Next

CSDN上用积分下载的一个例子

Public Sub CreateChart()
Dim ws As Worksheet
Dim myRange As Range
Dim myChart As ChartObject
Dim N As Integer
Dim xmin As Single, xmax As Single, ymin As Single, ymax As Single
Dim sj As String, X As String, Y As String, A As String, B As String
Set ws = ThisWorkbook.Worksheets("Sheet1") '指定数据源工作表
ws.ChartObjects.Delete '删除工作表上已经存在的图表
N = ws.Range("A65536").End(xlUp).Row '获取数据个数
X = "数据序列X" 'X坐标轴标题
Y = "数据序列Y" 'Y坐标轴标题
A = "A" & 2 & ":A" & N 'X坐标轴数据源
B = "B" & 2 & ":B" & N 'Y坐标轴数据源
xmin = Application.WorksheetFunction.Min(ws.Range(A)) 'X坐标轴最小值
xmax = Application.WorksheetFunction.Max(ws.Range(A)) 'X坐标轴最大值
ymin = Application.WorksheetFunction.Min(ws.Range(B)) 'Y坐标轴最小值
ymax = Application.WorksheetFunction.Max(ws.Range(B)) 'Y坐标轴最大值
Set myRange = ws.Range("A" & 1 & ":B" & N) '图表的数据源
Set myChart = ws.ChartObjects.Add(100, 30, 400, 250) '创建一个新图表
With myChart.Chart
.ChartType = xlXYScatterSmooth '指定图表类型
.SetSourceData Source:=myRange, PlotBy:=xlColumns '指定图表数据源和绘图方式
.HasTitle = True '有标题
.ChartTitle.Text = "制作图表示例"
With .ChartTitle.Font '设置标题的字体
.Size = 16
.ColorIndex = 3
.Name = "华文新魏"
End With
.Axes(xlCategory, xlPrimary).HasTitle = True 'X坐标轴有图表标题
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = X
.Axes(xlValue, xlPrimary).HasTitle = True 'Y坐标轴有图表标题
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Y
With .Axes(xlCategory)
.MinimumScale = xmin 'X坐标轴最小刻度
.MaximumScale = xmax 'X坐标轴最大刻度
End With
With .Axes(xlValue)
.MinimumScale = ymin 'Y坐标轴最小刻度
.MaximumScale = ymax 'Y坐标轴最大刻度
End With
With .ChartArea.Interior '设置图表区的颜色
.ColorIndex = 15
.PatternColorIndex = 1
.Pattern = xlSolid
End With
With .PlotArea.Interior '设置绘图区的颜色
.ColorIndex = 35
.PatternColorIndex = 1
.Pattern = xlSolid
End With
With .SeriesCollection(1)
With .Border '设置第一个数据系列的格式
.ColorIndex = 3
.Weight = xlThin
.LineStyle = xlDot
End With
.MarkerStyle = xlCircle
.Smooth = True
.MarkerSize = 5
End With
.Legend.Delete '删除图例
End With
Set myRange = Nothing
Set myChart = Nothing
Set ws = Nothing
End Sub

VBA数组

Sub tests()
Dim my_array()
my_array = [{"111", "222", "333", "world"}] my_array(1) = "111"
my_array(2) = "222"
my_array(3) = "333"
my_array(4) = "world"
End Sub

VBA绘制Excel图表的更多相关文章

  1. Python绘制Excel图表

    今天讲解下如何使用Python绘制各种Excel图表,下面我们以绘制饼状图.柱状图.水平图.气泡图.2D面积图.3D面积图为例来说明. import openpyxlfrom openpyxl imp ...

  2. vba控制图表,excel图表,一键完成

    来源http://club.excelhome.net/thread-1417686-1-1.html 官方教程链接 https://docs.microsoft.com/zh-cn/office/v ...

  3. 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

  4. JAVA生成EXCEL图表

    跟据客户的要求,需要开发一套包括图形的报表,还需要导出WORD 图表需要这样: 这样: 这样: 还有这样: 接下来是实现思路: 以往用的最多的就是JFreechart,手上也有实现各种图形的资源,但是 ...

  5. Python使用plotly绘制数据图表的方法

    转载:http://www.jb51.net/article/118936.htm 本篇文章主要介绍了Python使用plotly绘制数据图表的方法,实例分析了plotly绘制的技巧. 导语:使用 p ...

  6. Excel图表转成图片

    关于excel 图表转成图片 知识点:excel 生成的图表不是图片 尝试.    通过Java调用POI接口挺难把excel生成的图表转成图片导出来 ps.      其它生成图表的工具,如jfre ...

  7. VBA在Excel中的应用(三)

    目录  Chart Export Chart Format Chart Lengend  Chart Protect  Chart Title  Chart Chart Export 1. 将Exce ...

  8. EXCEL 图表 只在拐点的时候显示数字

    EXCEL图表只在折线的拐点显示数值,中间不需要显示.同时往下拐的,显示在上方,往上的显示在下方,这样数值不会挡住线. 首先,做一些模拟数据 因为起点和终点数值必须显示,所以单元格,C2 D2 C19 ...

  9. 使用highcharts 绘制Web图表

    问题描述:     使用highcharts 绘制Web图表 Highcharts说明: 问题解决:     (1)安装Highcharts     在这些图表中,数据源是一个典型的JavaScrip ...

随机推荐

  1. String 的不可变真的是因为 final 吗?

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...

  2. [GDKOI2021] 普及组 Day3 总结 && 题解

    [ G D K O I 2021 ] 普 及 组 D a y 3 总 结 时间安排和昨天的GDKOI2021 Day2一样. 早上四个小时的快乐码题时间,然鹅我打了半小时的表 然后就是下午的题目讲解和 ...

  3. Go Protobuf(比xml小3-10倍, 快20-100倍)

    简介 Protocol Buffers是什么? protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小.更快.更为简单.你可以定义数据 ...

  4. Python基础(十八):面向对象“类”第一课

    记住:编写函数就是"面向过程",编写类就是"面向对象".类也是很多同学的一大学习难点,因此我这里还是准备带着大家学习一下. 类和对象对比 对象 : 具有行为和属 ...

  5. OOUnit3Summary

    一.JML基础梳理及工具链 jml语言基础 JML的全称是Java Modeling language,是一种行为接口规格语言,通过JML及其支持工具,不仅可以基于规格自动构造测试用例,还可用SMT ...

  6. 记一次metasploitable2内网渗透之1524端口

    0x01.漏洞 许多攻击脚本将安装一个后门SHELL于这个端口,尤其是针对SUN系统中Sendmail和RPC服务漏洞的脚本.如果刚安装了防火墙就看到在这个端口上的连接企图,很可能是上述原因.可以试试 ...

  7. hdfs文件系统挂载

    简要说明: 使用fuse将hdfs文件系统挂载远程服务器上,像使用nfs和glusterfs那样可以挂载共享存储 fuse安装 fuse可以编译安装或者通过CDH或ambari源yum安装 此处使用a ...

  8. Mysql通配符的使用

    通配符的分类:%百分号通配符: 匹配任意字符,包括0个到多个_下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.    escape:用来转义特定字符 [字符列]  :字符列中任何一个 ...

  9. python3存储numpy格式的矩阵

    技术背景 numpy在python中的地位是相当高的,即使是入门的python使用者也会经常看到这个库的使用.除了替代python自带的列表数据格式list之外,numpy的一大优势是其底层的高性能实 ...

  10. uni-app&H5&Android混合开发一 || 最全面的uni-app离线打包Android平台教程

    前言: 为什么会写这么一个教程,因为很久之前做过一个对接银行POS我们的系统是使用的H5开发的app应用.但是假如对结果银行相关业务的小伙伴应该都清楚,银行的业务相对于其他的对接方而言安全性比较高,而 ...