Excel VBA的自动绘制图表功能研究

2015-09-09 19:00李逦杨彬
电脑知识与技术 2015年16期

李逦 杨彬

摘要: 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).