李逦 杨彬
摘要: Excel是微软公司office软件包中主要针对电子表格进行处理的一个软件,其图表功能非常丰富。但在基本操作中,都需要用户手动选择数据、图表类型和图表元素。该文通过VBA在Excel中的应用,设计工作表中自动生成各类图表的方法,以简化用户的操作。
关键词:Excel;VBA;自动绘制图表
中图分类号:TP317 文献标识码:A 文章编号:1009-3044(2015)03-0097-02
随着Windows操作系统中应用程序的不断增多和功能不断增强,越来越多的程序增加了宏处理功能来方便用户的使用。宏可以完成很多自动化的功能,但过多录制宏,会使代码显得缭乱,难以抓住重点。为了扩展宏指令的应用,Office应用程序中内置了VBA语言的编辑环境。以Excel软件为例,用户可以通过VBA,更快捷的操作工作簿、工作表、单元格、图表等对象,更好的控制Excel进程,进一步发掘Excel的强大功能,全面提高使用Excel工作的自动化能力。
Excel作为全面的表格处理工具,为用户提供了强大的图表功能,通过图表功能,可以将工作中的数据展示出来。图表是数据的图形化表现形式,它把行、列中的数据转变为有意义的图形。利用图表功能可以帮助企业预测数据的走向,以便对销售的Product进行分析,做出正确的决策。在Excel中,可以通过图表向导来绘制各种各样的图表,这种方式需要用户自定义DataArea,选择图表类型等操作;而通过Excel VBA编写代码可以实现图表的自动化绘制和展现。本文以某公司产品销售数据为样本来说明在Excel中如何通过VBA来自动、高效绘制图表。
1 Excel VBA与图表
图表在Excel中有两种形式,一种是嵌入式图表,即图表作为对象存在于工作表中;另一种是单独的图表工作表,即图表和数据位于不同工作表中。图表中包含的元素有:图表区、刻度线、图例、数据系列和坐标轴等。Excel VBA支持所有图表的操作和设置,并可以通过ADD方法向工作表中添加图表,并标出图表类型。
在Excel中,Chart对象代表工作簿中的图表,该图表既可作为嵌入图表(ChartObject对象),也可作为一个单独的图表工作表(Chart)。ChartObject对象代表工作表中的嵌入图表,ChartObject作为Chart对象的容器,用它的属性和方法可以设置工作表上图表的外观和尺寸。Chart属性、ActiveChart属性、Charts集合和ActiveSheet属性都可以返回Chart对象。本文设计中主要使用到以上对象及相关属性。
图1 数据清单
图2 “创建图表”窗体
图3 柱形图
图4 拆线图
2 界面和功能分析
本文对某器材公司2015年第一季度全国电器产品销售情况做出统计,得到Excel工作表“销售情况表”(如图1),该表针对不同产品和不同地区分类,得出产品总体销售情况和地区销售情况。在该工作表中添加“绘制图表”按钮工具,单击该按钮,得到“创建图表”窗体(如图2),以工作表数据作为基础数据,完成自动生成各类图表(如,柱形图、拆线图、饼图、堆积图等) 功能。
“创建图表”窗体中,选择区域和选择产品的数据基础为“销售情况表”工作表中地区元素和产品元素; 选择图形中定义四类可被用户使用的图表类型;四个按钮分别是:“绘图“按钮”、“清除选择”按钮、“清除图表”按钮和“返回”按钮。其中,单击“绘图“按钮”可以根据用户选择生成各类图表;单击“清除选择”按钮可以清除用户在地区和产品上的选择;单击“清除图表”按钮可以删除已经在工作表中嵌入生成的图表;单击“返回”按钮,将关闭“创建图表”窗体,返回到工作表中。
如,用户选择区域为“北京”,选择图形为“柱形图”,将自动生成如图3所示的图表。
用户选择产品为“彩电”,选择图形为“拆线图”,将自动生成如图4所示的图表。
3 代码实现
Private Sub CMD1_Click()
“绘图”按钮功能
Dim DataArea, AreaSEL As String
On Error Resume Next
If LBox1.Value <> "AllArea" Then
For i = 1 To n + 1
If LBox1.Value = IArea(i) Then
AreaSEL = IArea(i)
End If
Next i
Else: AreaSEL = "AllArea"
End If
For i = 1 To m + 1
If LBox2.Value = Product(i) Then
ProductSel = Product(i)
End If
Next i
'绘制不同地区的销售额随时间的变化
If LBox1.Value <> "AllArea" Then
X = "R" & 5 & "C" & 2 & ":" & "R" & 5 & "C" & m + 1
For i = 1 To n + 1
If IArea(i) = AreaSEL Then
Y = "R" & 5 + i & "C" & 2 & ":" & "R" & 5 + i & "C" & m + 1
End If
Next i
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("销售情况表").Range("A1"), PlotBy:=xlColumns
Call 图表类型
ActiveChart.SeriesCollection(1).XValues = "=销售情况表!" & X
ActiveChart.SeriesCollection(1).Values = "=销售情况表!" & Y
ActiveChart.SeriesCollection(1).Name = AreaSEL
ActiveChart.Location where:=xlLocationAsObject, Name:="销售情况表"
ElseIf ProductSel = "" Then
DataArea = "A5:" & Chr(65 + m) & (n + 5)
Range(DataArea).Select
Charts.Add
ActiveChart.SetSourceData Source:=Sheets("销售情况表").Range(DataArea), PlotBy:=xlRows
Call 图表类型
ActiveChart.Location where:=xlLocationAsObject, Name:="销售情况表"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "销售业绩统计分析"
If Opt3.Value = False Then
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Product"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "销售额(万元)"
Else
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Characters.Text = AreaSEL
End If
End With
End If
ActiveChart.ChartArea.Font.Size = 9
End Sub
Private Sub CMD2_Click()
“清除选择”按钮功能
LBox1.Value = ""
LBox2.Value = ""
Opt1.Value = False
Opt2.Value = False
Opt3.Value = False
Opt4.Value = False
End Sub
Private Sub CMD3_Click()
“清除图表”按钮功能
Dim mysheet As Worksheet
Dim i As Integer
Title$ = "是否删除图表"
Set mysheet = ThisWorkbook.Worksheets(1)
mysheet.ChartObjects.Select
i = mysheet.ChartObjects.Count
If i <> 0 Then
mysheet.ChartObjects.Delete
Else
answer = MsgBox("目前无图表可清除!", 64, Title$)
End If
End Sub
Private Sub CMD4_Click()
“返回”按钮功能
End
End Sub
由于篇幅有限,本文仅给出部分代码。
4 结论
本文以一个应用实例,介绍了Excel作为全面的表格处理工具,提供的强大的图表功能,并使用VBA代码创建数据图表,让用户了解VBA在Excel中的应用方法。为从事数据处理的用户提供一种思路,并简化工作中的操作过程,提高用户的工作效率。
参考文献:
[1] 李辉,郝艳芬,支颖.office高手-Excel2003办公应用[M].北京: 人民邮电出版社,2006.
[2] 常广炎,杨彬.基于Excel VBA 的数据处理软件开发[J].电脑知识与技术,2014(8).