软件应用・Software Application VBA实现自动创建Excel图表 文/刘美丽 表1 Exce1是一个集数据处理和图 表绘制于一身的优秀软件。根据 工作表的数据,利用“图表向导” 可以方便快捷地绘制图表。但是 当需绘制的图表数量较多时,“图 表向导”的绘图方式就不那么“可 爱”了。本文通过对Exce1的二 次开发,用Exce1 VBA编程实现 了折线图的自动绘制。对本程序 稍作修改,可用于绘制其它类型 的图表。 Cha ̄Type值 xlArea 图表类型 面积图 xlColumnClustered xlDoughnut x1Line xlLineMarkers xlPie x1Radar xlStockHLC xlSurface xlXYScaaer 簇状柱形图 圆环图 折线图 数据点折线图 饼图 雷达图 盘高一盘低一收盘图 三维曲面图 散点图 表的显示位置。Location()方法即是指定新 Xvalues=Rang(“A1:A5”) 创建的图表的插入位置的。其语法如下: 【关键词】Excel VBA自动创建图表折线图 Chart.Location(Where,Name) Where用于指定图表的插入位置: 1引言 Excel是一个集数据处理和图表绘制于一 身的优秀软件。运用Excel的“图表向导”来 绘制图表也不算麻烦。但是,如果要绘制的图 2.3 SetSourceData()方法 表数量很多,用“图表向导”的绘图方式来绘 SetSourceData()方法用来指定作图的源 制图表,就不是一件令人愉快的事了。 本校老师在参与《国家重点基础研究发 数据区域。其语法为:Chrat.SetSourceData(Source,PlotBy) 展计划一一973计划子课题一一湖南省酸雨污 其中,source用于指定数据源,可将 染现状、成因及控制对策研究》项目的数据处 otBy用于指定 理工作中,需要绘制湖南省十四个地市及全 Range对象传说递给该参数。Pl数据绘制方法,如果传递系统常量xlColumns 省pH均值和九种要求的离子(SO 、NO 。、 NH4 ̄、Ca 、F。、CI。、Mg 、Na+、K ) 的离 则表示数据在列上生成(系列产生在列);如 子浓度均值及[SO/。]/[No _】、【SO42-]/[ZA’】、 果传递系统常量xLRows,则表示数据在行上 [NO,]/ A_]、([SO/-]+[NO31)/[∑A]、[Ca ]/[ 生成(系列产生在行)。SetSourceData()方法虽然能很方便地指 NH4+]、[[Ca ]/[ZB ]、[NH ]/[ZB ]、[ZA]/[ZB ] 定数据源,但该方法不可以接受分散的单元格 十年数据的逐年、逐季、逐月的变化折线图。 对于这种相同数据结构的大量图表绘制,用“图 区域作为图表的数据源。当需要灵活地操纵图 表向导”来一张张绘制显然是令人生畏的,而 表的数据源时,需使用SeriesCollection()方法。 使用Excel VBA对Excel的作图功能进行二次 2.4 SeriesCo11ection()方法 开发,将可大大提高工作效率。 xlLocationAsNewSheet指定新图表作为新工作 表插入工作簿中,此时Name为新工作表的名 称(可省略);xlLocationAsObject指定新创 建的图表作为图像元素插入到工作表中,此时 Name为要插入的工作表的名称。 SeriesC0llection()方法可以自由地控制 图表中所有的显示数据,通过它,程序可以 自由地操纵图表抽需的每一个数据,因此比 SetSourceData()方法更为灵活。 2.5 Axes()方法 Chart对象的Axes()方法返回图表上单 个坐标轴或坐标轴集合的某个对象。该方法的 语法如下: Chart.Axes(Type,AxisGroup) Type参数用于指定要返回的坐标轴,可 以是以下系统常量之一:数值轴一xlVa1ue、分 类轴--xlCategory或用于三维图表,表示纵深 轴向的xlSeriesAxis。 通过Axes()方法,可以控制图表上坐 标轴的相关属性,如坐标轴显示的标题、坐标 轴的刻度等。 2.6 Char tType属性 ChartType属性用于指定图表的类型。常 用图表类型和ChartType属性值的对应关系如 表1。 3作图数据 将计算结果转换成易于作图的形式,如 图1。图中每一行数据将绘制一张图。 2 Exce I VBASJ建图表常用的方法 SeriesCol1ection是Series对象的集合 对象。Series对象表示图表中的一个系列。 4程序实例及注解 Excel VBA是利用Chart对象来创建图表 系列是一个图表中用于比较的一组数据,esCo1lection即是保存这些系列的集合。系 的。Chart对象和Charts对象集最常用的方法 Seri和属性有: 列在不同的图表中有不同的含义。在折线图中, Sub绘制折线图() Dim mycell As Range 每条线即是一个系列,雷达图中每个区域即是 2.1 Add()方法 Dim isect As Range 个系列,饼图只有一个系列。 Dim iAs Integer Series对象中常用的属性有Name、Values Charts对象集的Add()方法用于向图表 Dim mAs Integer 和XValues。其中Name属性表示该系列的名 集合中添加新的图表对象。例: Dim nAs Integer 称,会在图表的图例区域显示出来;Values属 Set mychart=charts.Add OnErrorGoToesc ‘错误陷井 性表示该系列的实际值,用于确定图表中图形 表示在活动图表之前插入一个新的图表, For r:1 To 270 ‘第2行至第271行为 位置的形状;XValues属性表示该系列的横坐 并将返回值保存在mychart对象变量中,以便 需作图的数据,每一行数据需作一张图 标值,传统在图表的横坐标上显示出来。 需要时通过该变量来访问该图表。 Worksheets(”年均值”).Activate Values和XValues属性必须用Range对象 2.2 Location()方法 Set mycell=Worksheets(”年均值 来指定,不可指定为变量的值。如: t. Ser iesC O11 e cti O n 1r 、 ”).Range(Cells(r+1,1),Cells(r+1,12)) 指 Add()方法创建的图表只存在于内存, valuesC =Rah rng a rB1:B5、定作图数据源 要在工作表中看到新创建的图表,必须指定图 C h r a S e S et i S e ct A P P1i C ati 0 n r i e C o l1 e c t i o n f l 1 一“,,.74・电子技术与软件工程Electronic Technology&Software Engineering Software Application・软件应用 Intersect(Worksheets(” 127 1”),mycel1) 均值”).Range(”c2: 列 国MicⅢ。 Exce1.2000.2oo9卑潜水年,≈蠢x 0l事盼辨嘲醛鞠爨oD撼 固搬嗽 T.J ̄D嬲崴 啻口o60 II勘锄Adobe pD }…瞄 鋈釜 .尊x ‘汁锌数 源的 个- 冗格的行 号和总列致 i=isect.Row I11=isect.Column n=m+isect.Columns.Count—l AI4 矗 . ._. B 璜目 口H肆均壤 Dl-1年均值 DH年均值 年均值 nH年均僵 甜年均僵 0H年均擅 长沙市 C 1 2 3 4 5 6 城市 常德市 样州市 撕阳市 悍化市 吉■市 D E G H I JK 2000年 2001年 2002 ̄ 2003年 2001蕾 2005妊 2006盔 2007年 2008奄 2009年 4.95 4.50 4.11 4.59 4.24 《.02 4.06 5.71 6.姐 6.25 7.25 6 14 5.31 5。99 5.47 5.5l 4.78 4.63 4.99 4.68 4.77 d q9 4.66 5.72 5.6I 4.1l 4.4I 4.53 《.23 4 37 q.35 4.60 4.86 4.44 5.22 4.03 3.96 《.qI 4.57 4.86 5.15 q.70 4,32 ‘查 』:作簿 }l是甭存在与欲建 表同 7 叠膝市 8 鄙阳市 5.60 4 60 5.59 4.87 4.70 4.58 t.7I 4.gI 日.67 4-63 q.55 4.5日 4.70 4.84 4.65 4.86 4.B0 4 T0 名的 丧,若无则新缱一个图表,若 则激活 该图表 IfNot(find(Worksheets(”年均值”).Cells(i 9 l0l1 12 湘鼍市 盏阳市 永州市 岳阳市 硼年均僵 DH茸均馐年均擅 0H年均瞳 4 71 『4.80 5.21 5.15 4.50 4.69 6 38 5.10 4. 8 《.68 6.2g 4.98 4.9I 4.05 6.10 4.98 4.0I q.91 5.25 4 83 4.6l 4.75 6.24 5.O9 5.16 4.55 5.34 4.72 4.92 日.62 5.58 5.30 q.96 5.02 6.i0 5.I1 5.明 5.46 6.I1 5.16 】)&Worksheets(”年均他”).Cells(i,2)))Then Charts Add 酱 隳 口BH年均慢年均僵 I5悻洲市 16 全省 口H年均睡 oH年均墟 : 4.80 45 .0372 45.63S5 6 4.2031 4 3 .0909 d 4 .3032 4. 091 4 3.6969 4.526 q .57 4.9l 4.55 4.95 4.37 4.84 4.32 4.38 d.14 q.38 4.33 4.52 4.53 4 58 4.67 }l ;草德市 i盎酸根聋均值 - 1 72§2 206.88 230 62 26413 l{ 蝤 207 06 l; 6j §;站 ActiveChan.name=Worksheets(” 均值 I 18橱诩1市 I 19莓阳市 砖酸掇每均擅 硝酸{曩年均幢 250 42 161.57 235.00 2.29 l3’ l 6’ 9liS 352 S 61 2521 25l{, 3 :J’ l ”).Cells(i,1)&Worksheets(”年均值”).Cells(i,2) ’图表 称 Else 14I.46 251 25 220 42 22T.S0 629“ 396O’ 1:O Sl D. 制术蔷黜辜端 垒省;;6墓 l均值 每2】.6T I叠 季 俏 月均{ 32.7l l59.IT 一一皇 /I. i 1S;甜 :’Sl6 iI " 默S0 ;l6 3: a35 g0 }} 簟螬 熬享 i Charts(Worksheets(” 均值”).Cells(i,1)& Worksheets(”年均值”).Cells(i,2)).Activate EndIf ActiveChart.ChartType=xlLineMarkers 图1 ‘指定l划表类型为数拂 点折线 A cti v eC h a rt.S ct S o u r c eD at a Source:=mycel1.PlotBy:=xlRows 的数 源,系歹0f 生 仃 With Worksheets(” 均位”) ‘指定作图 F o r E a c h o n e I n A ctj v eC h a rt. SeriesCoflection one.XValues=.Range(.CelI s(1,m), .Cells(1,n))’分类名称 one.nanle=.CetIs(i,1) ’J 例名称 i=i+1 Next one EndWith A c t i v e C h a r t L o c a t i o n Where:=xlLocationAsNewSheet With ActiveChart .‘创建的新 图表作为新工作表插入剑工作簿巾 HasTitle=True ‘指定要显示图1k 题 ChartTitle.Characters.Text=Worksheets(” 图2 .年均值”).Cells(i一1,1)&Worksheets(”q-均 ”).Cells(i.1,2)&”十 变化趋谤” ‘指定l割 表标题的文字 .Axes(xICategory,xlPrimary) HasTitle 数fl'f ̄:lh的{ q格线 .5图表样张 True ‘指定显示分类 I标题 .HasMinorGridlines=False Axes(xICategor y.xlPrimary).AxisTitle. 示数 轴的次网格线 EndWith Next r esc: Characters.Text=”年份” 的文字 .旨定分类j1h标题 6结论 所列稃序能实 Ej动绘制Excel折线 , j 仃实用 .。 程序的运仃,既町以 Excel的Visual Axes(xlValue。xlPrimary).HasTitle=True Exit Sub End Sub ‘指定 .数值轴标题 Axe s(xlValue,xlP rimary).Axi sTitle. Characters.Text=”离 浓度(peq/L)” ‘指 定数值轴标题的文字 EndWith ‘ 1t 图表ff,JI I定l义函数 Ftmction ind(name As fString)As Boolean For Each one ln Charts I f one.name=nanle Then Basic编辑器 fi运行,也¨J 以通过 菜 或l: With ActiveChart Axes(xICategory) .栏建立卡H应的运行 I[1l令喊按钮求运行,当然 也 T建盘一个商体.通过命令按 米运行。 趟 J 本文 ^的范围,不}If赘述。 HasMajorGridlines=True ‘指定 示 分类轴的 .格线 ind=True fExit Function EndIl’ Next one 作者简介 刘美丽,讲师 研究方向为计算机应用。 HasMinorGridlines=False 示分类轴的次刚格线 EndWith With ActiveChart.Axes(xlValue) find=False End Function 作者单位 长沙环境保护职业技术学院 湖南省长沙市 41 OO04 HasMajorGridlines。。True Electronic Technology&Software Engineering电子技术与软件工程・75