目录
示例
月份 | 产品A销售额 | 产品B销售额 |
1月 | 1247 | 628 |
2月 | 519 | 936 |
3月 | 1175 | 792 |
4月 | 1262 | 802 |
5月 | 760 | 595 |
6月 | 634 | 916 |
7月 | 752 | 764 |
8月 | 631 | 751 |
9月 | 852 | 1181 |
10月 | 898 | 1333 |
11月 | 1150 | 562 |
12月 | 1443 | 1017 |
代码
在工作表中使用ChartObjects集合的Add方法添加一个图表容器,然后访问其Chart属性,为图表设置数据源、类型等,并设置图表的格式。
Option Explicit
Sub VBA创建图表()
Dim sht As Worksheet
Dim objCht As ChartObject
Dim cht As Chart
Set sht = Sheets("sheet1")
With sht
For Each objCht In .ChartObjects
objCht.Delete
Next objCht
'创建图表
Set objCht = sht.ChartObjects.Add(Left:=.Range("E1").Left, Top:=Range("E1").Top, Width:=360, Height:=250)
End With
'操作图表
Set cht = objCht.Chart
With cht
'设置数据源
.SetSourceData sht.Range("A1").CurrentRegion, xlColumns
'设置图例位置
.SetElement msoElementLegendBottom
'删除Y中主要的网络线
.Axes(xlValue).MajorGridlines.Delete
'设置标题位置
.SetElement msoElementChartTitleAboveChart
'设置标题
.ChartTitle.Text = "年度产品销售额对比"
'设置系列1的类型为柱状图
.SeriesCollection(1).ChartType = xlColumnClustered
'设置系列2的类型为拆线图
.SeriesCollection(2).ChartType = xlLine
End With
End Sub
Chart对象的属性和方法极其丰富,其复杂程度超过了单元格对象。但是好在开发者可以通过录制宏获取的代码了解其各个属性与方法,因而本例仅介绍关键的属性和方法。
ChartObjects集合和ChartObject对象
ChartObjects集合是图表对象Chart的容器,当图表存在于工作表中时,必须嵌套在ChartObject对象中,一个图表对象对应一个ChartObject对象。ChartObjects集合则是ChartObject对象的集合,是工作表对象的子对象。当需要访问某个ChartObject对象时,可以使用以下形式访问ChartObject对象:
Workhsheet.ChartObjects(index )
或者
Workhsheet.ChartObjects(chartObjectName )
其中,Worksheet表示工作表对象。参数index为ChartObject的序号,该序号从1开始,默认情况下为图表对象添加的先后顺序。参数chartObjectName为ChartObject的名称,即工作表中“名称框”中的名称。
使用ChartObjects的Add方法可以添加一个ChartObject对象,当ChartObject对象被创建后,图表对象Chart也被自动创建。Add方法的语法为
ChartObjects.Add(Left,Top,Width,Height)
参数Left和Top为图表的坐标。参数Width和Height为图表的尺寸。图表对象的坐标和尺寸是由ChartObject对象决定的,在创建该对象后需要指定该四个参数以确定其坐标和尺寸。开发者也可以通过修改该对象的Left、Top、Width和Height属性来修改其坐标和尺寸。
Chart对象
当添加ChartObject对象之后,可以使用其Chart属性来访问图表对象(Chart),从而实现图表的真正创建。
Chart对象创建后,可以使用SetSourceData方法设置其数据源,该方法的语法为
Chart.Se tSourceData(Source,PlotBy)
其中,Chart表不一个图表对象,通常是对ChartObject对象Chart属性的访问。
参数Source为表示图表数据的单元格区域对象。
参数PlotBy表示数据的绘制方式。当其值为xIColumns时,表示数据的一列为一个数据系列;当其值为xIRows时,则表示一行为一个数据系列。PlotBy同时也是Chart对象的一个属性,数据源添加完毕之后,也可以通过修改该属性的值来修改数据的绘制方式。当该参数省略时,则由Excel自行判断。本例需要比较B列和C列,因而按列区分数据系列,则该参数设置为xIColumns。
图表的类型设置可以通过更改其ChartType属性实现。常用的ChartType属性赋值可以见表。
常 量 | 值 | 说 明 |
xlXYScatter | -4169 | 散点图 |
xlRadar | -4151 | 雷达图 |
xlDoughnut | -4120 | 圆环图 |
xlArea | 1 | 面积网 |
xlLine | 4 | 折线网 |
xlPie | 5 | 饼图 |
xlBubble | 15 | 气泡图 |
xlCo1umnClustered | 51 | 簇状柱形图 |
xlBarClustered | 57 | 簇状条形冈 |
数据系列(Series)对象
所有的图表数据都是依据数据系列(Series)绘制的。在Chart对象中,可以使用SeriesCollection集合访问每个数据系列,其语法为:
Chart.SeriesCollection(Index)
该表达式将返回一个数据系列(Series)对象。参数index表示数据系列的序号,该序号为从1开始的整数,最大不超过图表中数据系列的个数。
常用的数据系列(Series)对象的属性和方法见表。
属性,方法 | 说 明 |
Points | 数据点的集合.可以通过该方法访问各个数据点( Point)对象进行单独的设置 |
DataLabels | 数据标签的集合. |
ChartType | 图表类型。 |
Format | 图表的格式属性,可以通过其访问图表格式对象ChartFormat,在该对象下的Fill等属性修改各个数据点的格式 |
Values | 图表数据系列的值的来源,可以为单元格区域对象或者一维数组。当在图表中使用SetSourceData方法设置了数据源后;则可以通过该属性得到每个数据系列的值 |
添加图表的其他方法
添加图表共有3种方法,本例展示了通过添加ChartObject对象的方法添加图表。另两种方法如下:
1.通过添加Chart对象添加图表
Chart对象和工作表对象同属于工作簿子对象,Chart对象是一个以表格形式呈现的单独的图表。
Chart对象的添加可以通过Charts集合的Add方法完成,其语法为
Charts.Add(Before,After,Count,Type)
该方法可以返回一个Chart对象。参数Before和After可以选择其一。与添加工作表类似,该参数表示图表添加的位置,可以为一个工作表对象或者图表对象。参数Count表示添加的数量。参数Type表示图表的类型。
Chart对象与工作表中ChartObject的Chart属性所表示的Chart对象是相同的,只是其存放的位置不同而已。当需要在两者之间切换时,可以使用Chart对象的Location方法,该方法的语法为
Chart.Location(Where,Name)
参数Where表示图表的位置。该参数可以为xILocationAsNewSheet(将图表单独存放在一个表中)、xILocationAsObject(图表以嵌入的方式存放于工作表中)或者xILocationAutomatic(由Excel自行处理)。
参数Name表示图表的名称。
2.通过Shapes集合的AddChart方法添加图表
使用Shapes集合的AddChart方法同样可以添加一个ChartObject对象,从而添加一个图表Chart对象,其语法为
Worksheet.Shapes.AddChart(Type,Left,Top,Width,Height )
参数Type为图表的类型。参数Left、Top、Width、Height表示图表的位置和大小。
该方法将在工作表中创建一个ChartObject对象,并返回一个Shape对象。由于无法通过Shape对象直接访问Chart对象。因而,使用该方法创建图表一般先使用Select方法选中图表,然后通过ActiveChart对象(当前选中的图表)访问图表Chart对象。创建录制宏代码时,可以发现当创建一个图表时,所录制的代码就是以该方法进行操作的。