李邐 楊彬
摘要: Excel是微軟公司office軟件包中主要針對(duì)電子表格進(jìn)行處理的一個(gè)軟件,其圖表功能非常豐富。但在基本操作中,都需要用戶手動(dòng)選擇數(shù)據(jù)、圖表類型和圖表元素。該文通過VBA在Excel中的應(yīng)用,設(shè)計(jì)工作表中自動(dòng)生成各類圖表的方法,以簡化用戶的操作。
關(guān)鍵詞:Excel;VBA;自動(dòng)繪制圖表
中圖分類號(hào):TP317 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)03-0097-02
隨著Windows操作系統(tǒng)中應(yīng)用程序的不斷增多和功能不斷增強(qiáng),越來越多的程序增加了宏處理功能來方便用戶的使用。宏可以完成很多自動(dòng)化的功能,但過多錄制宏,會(huì)使代碼顯得繚亂,難以抓住重點(diǎn)。為了擴(kuò)展宏指令的應(yīng)用,Office應(yīng)用程序中內(nèi)置了VBA語言的編輯環(huán)境。以Excel軟件為例,用戶可以通過VBA,更快捷的操作工作簿、工作表、單元格、圖表等對(duì)象,更好的控制Excel進(jìn)程,進(jìn)一步發(fā)掘Excel的強(qiáng)大功能,全面提高使用Excel工作的自動(dòng)化能力。
Excel作為全面的表格處理工具,為用戶提供了強(qiáng)大的圖表功能,通過圖表功能,可以將工作中的數(shù)據(jù)展示出來。圖表是數(shù)據(jù)的圖形化表現(xiàn)形式,它把行、列中的數(shù)據(jù)轉(zhuǎn)變?yōu)橛幸饬x的圖形。利用圖表功能可以幫助企業(yè)預(yù)測(cè)數(shù)據(jù)的走向,以便對(duì)銷售的Product進(jìn)行分析,做出正確的決策。在Excel中,可以通過圖表向?qū)砝L制各種各樣的圖表,這種方式需要用戶自定義DataArea,選擇圖表類型等操作;而通過Excel VBA編寫代碼可以實(shí)現(xiàn)圖表的自動(dòng)化繪制和展現(xiàn)。本文以某公司產(chǎn)品銷售數(shù)據(jù)為樣本來說明在Excel中如何通過VBA來自動(dòng)、高效繪制圖表。
1 Excel VBA與圖表
圖表在Excel中有兩種形式,一種是嵌入式圖表,即圖表作為對(duì)象存在于工作表中;另一種是單獨(dú)的圖表工作表,即圖表和數(shù)據(jù)位于不同工作表中。圖表中包含的元素有:圖表區(qū)、刻度線、圖例、數(shù)據(jù)系列和坐標(biāo)軸等。Excel VBA支持所有圖表的操作和設(shè)置,并可以通過ADD方法向工作表中添加圖表,并標(biāo)出圖表類型。
在Excel中,Chart對(duì)象代表工作簿中的圖表,該圖表既可作為嵌入圖表(ChartObject對(duì)象),也可作為一個(gè)單獨(dú)的圖表工作表(Chart)。ChartObject對(duì)象代表工作表中的嵌入圖表,ChartObject作為Chart對(duì)象的容器,用它的屬性和方法可以設(shè)置工作表上圖表的外觀和尺寸。Chart屬性、ActiveChart屬性、Charts集合和ActiveSheet屬性都可以返回Chart對(duì)象。本文設(shè)計(jì)中主要使用到以上對(duì)象及相關(guān)屬性。
圖1 數(shù)據(jù)清單
圖2 “創(chuàng)建圖表”窗體
圖3 柱形圖
圖4 拆線圖
2 界面和功能分析
本文對(duì)某器材公司2015年第一季度全國電器產(chǎn)品銷售情況做出統(tǒng)計(jì),得到Excel工作表“銷售情況表”(如圖1),該表針對(duì)不同產(chǎn)品和不同地區(qū)分類,得出產(chǎn)品總體銷售情況和地區(qū)銷售情況。在該工作表中添加“繪制圖表”按鈕工具,單擊該按鈕,得到“創(chuàng)建圖表”窗體(如圖2),以工作表數(shù)據(jù)作為基礎(chǔ)數(shù)據(jù),完成自動(dòng)生成各類圖表(如,柱形圖、拆線圖、餅圖、堆積圖等) 功能。
“創(chuàng)建圖表”窗體中,選擇區(qū)域和選擇產(chǎn)品的數(shù)據(jù)基礎(chǔ)為“銷售情況表”工作表中地區(qū)元素和產(chǎn)品元素; 選擇圖形中定義四類可被用戶使用的圖表類型;四個(gè)按鈕分別是:“繪圖“按鈕”、“清除選擇”按鈕、“清除圖表”按鈕和“返回”按鈕。其中,單擊“繪圖“按鈕”可以根據(jù)用戶選擇生成各類圖表;單擊“清除選擇”按鈕可以清除用戶在地區(qū)和產(chǎn)品上的選擇;單擊“清除圖表”按鈕可以刪除已經(jīng)在工作表中嵌入生成的圖表;單擊“返回”按鈕,將關(guān)閉“創(chuàng)建圖表”窗體,返回到工作表中。
如,用戶選擇區(qū)域?yàn)椤氨本?,選擇圖形為“柱形圖”,將自動(dòng)生成如圖3所示的圖表。
用戶選擇產(chǎn)品為“彩電”,選擇圖形為“拆線圖”,將自動(dòng)生成如圖4所示的圖表。
3 代碼實(shí)現(xiàn)
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
'繪制不同地區(qū)的銷售額隨時(shí)間的變化
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 = "銷售業(yè)績統(tǒng)計(jì)分析"
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 結(jié)論
本文以一個(gè)應(yīng)用實(shí)例,介紹了Excel作為全面的表格處理工具,提供的強(qiáng)大的圖表功能,并使用VBA代碼創(chuàng)建數(shù)據(jù)圖表,讓用戶了解VBA在Excel中的應(yīng)用方法。為從事數(shù)據(jù)處理的用戶提供一種思路,并簡化工作中的操作過程,提高用戶的工作效率。
參考文獻(xiàn):
[1] 李輝,郝艷芬,支穎.office高手-Excel2003辦公應(yīng)用[M].北京: 人民郵電出版社,2006.
[2] 常廣炎,楊彬.基于Excel VBA 的數(shù)據(jù)處理軟件開發(fā)[J].電腦知識(shí)與技術(shù),2014(8).