VBA绘制Excel图表
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图表的更多相关文章
- Python绘制Excel图表
今天讲解下如何使用Python绘制各种Excel图表,下面我们以绘制饼状图.柱状图.水平图.气泡图.2D面积图.3D面积图为例来说明. import openpyxlfrom openpyxl imp ...
- vba控制图表,excel图表,一键完成
来源http://club.excelhome.net/thread-1417686-1-1.html 官方教程链接 https://docs.microsoft.com/zh-cn/office/v ...
- 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- JAVA生成EXCEL图表
跟据客户的要求,需要开发一套包括图形的报表,还需要导出WORD 图表需要这样: 这样: 这样: 还有这样: 接下来是实现思路: 以往用的最多的就是JFreechart,手上也有实现各种图形的资源,但是 ...
- Python使用plotly绘制数据图表的方法
转载:http://www.jb51.net/article/118936.htm 本篇文章主要介绍了Python使用plotly绘制数据图表的方法,实例分析了plotly绘制的技巧. 导语:使用 p ...
- Excel图表转成图片
关于excel 图表转成图片 知识点:excel 生成的图表不是图片 尝试. 通过Java调用POI接口挺难把excel生成的图表转成图片导出来 ps. 其它生成图表的工具,如jfre ...
- VBA在Excel中的应用(三)
目录 Chart Export Chart Format Chart Lengend Chart Protect Chart Title Chart Chart Export 1. 将Exce ...
- EXCEL 图表 只在拐点的时候显示数字
EXCEL图表只在折线的拐点显示数值,中间不需要显示.同时往下拐的,显示在上方,往上的显示在下方,这样数值不会挡住线. 首先,做一些模拟数据 因为起点和终点数值必须显示,所以单元格,C2 D2 C19 ...
- 使用highcharts 绘制Web图表
问题描述: 使用highcharts 绘制Web图表 Highcharts说明: 问题解决: (1)安装Highcharts 在这些图表中,数据源是一个典型的JavaScrip ...
随机推荐
- Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇(内附开发 demo)
简介 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. 系列 云原生 API 网关,gRPC-Gateway V2 初探 业务流程 官方开发接入文档 ...
- Leedcode算法专题训练(位运算)
https://www.cnblogs.com/findbetterme/p/10787118.html 看这个就完事了 1. 统计两个数的二进制表示有多少位不同 461. Hamming Dista ...
- 树结构系列(四):MongoDb 使用的到底是 B 树,还是 B+ 树?
文章首发于「陈树义」公众号及个人博客 shuyi.tech 文章首发于「陈树义」公众号及个人博客 shuyi.tech,欢迎访问更多有趣有价值的文章. 关于 B 树与 B+ 树,网上有一个比较经典的问 ...
- 自定义grub主题
1 概述 自定义grub引导菜单的主题,笔者的linux是deepin,感觉默认的grub主题不太好看,嗯,没办法,就是想改了. 这篇文章主要是修改/boot/grub/grub.cfg以及/boot ...
- Go-30-main包
main包 package main import ( "fmt" "kubeflow-tool/main/cmd" "os" ) func ...
- CPF 入门教程 - 设计器和模板库的使用(五)
CPF netcore跨平台UI框架 系列教程 CPF 入门教程(一) CPF 入门教程 - 数据绑定和命令绑定(二) CPF 入门教程 - 样式和动画(三) CPF 入门教程 - 绘图(四) CPF ...
- 906. Super Palindromes
Let's say a positive integer is a superpalindrome if it is a palindrome, and it is also the square o ...
- POJ2135 来回最短路(简单费用流)
题意: 就是从1走到n然后再走回来,一条边只能走一次,要求路径最短. 思路: 比较水,可以直接一遍费用流,不解释了,具体的看看代码,敲这个题就是为了练 练手,好久不敲了,怕比赛 ...
- Linux提权
讲Linux提权之前,我们先看看与Linux有关的一些知识: 我们常说的Linux系统,指的是Linux内核与各种常用软件的集合产品,全球大约有数百款的Linux系统版本,每个系统版本都有自己的特性和 ...
- NT 内核函数原型大全
NTSYSAPINTSTATUSNTAPINtAcceptConnectPort(OUT PHANDLE PortHandle,IN PVOID PortIdentifier,IN PPORT_MES ...