Excel圖表的數(shù)據(jù)源通常為一個連續(xù)區(qū)域,但有時會遇到圖表數(shù)據(jù)源區(qū)域不連續(xù),且需要動態(tài)改變的情況。例如下面的某公司人員基本情況匯總表,B列為部門名稱,C至S列分別為“性別”、“年齡”、“學(xué)歷”、“職稱”等不同類別數(shù)據(jù)的匯總,如果將這些數(shù)據(jù)同時顯示在一個圖表中,顯然不便觀察和比較數(shù)據(jù),這時可以用VBA來動態(tài)改變數(shù)據(jù)源,單獨對各個類別進行顯示。
具體的方法是:先在表格中創(chuàng)建一個下拉列表,然后通過下拉列表選擇不同的系列,通過VBA代碼改變圖表數(shù)據(jù)區(qū)域,讓圖表中的數(shù)據(jù)隨之改變。下面以在Excel 2003中繪制柱形圖為例說明如下:
1.設(shè)置下拉列表。設(shè)置下拉列表的方法有很多,這里用數(shù)據(jù)有效性來設(shè)置。選擇某個單元格,如T14,單擊菜單“數(shù)據(jù)→有效性→設(shè)置→序列”,在“來源”下輸入“性別,年齡,學(xué)歷,職稱”(不含引號)后確定,這樣就在T14單元格中通過數(shù)據(jù)有效性設(shè)置了一個下拉列表。
2.插入圖表。選擇B3:D11區(qū)域,即“部門”和第一個類別所在區(qū)域“性別”,單擊菜單“插入→圖表→柱形圖→簇狀柱形圖”,單擊“完成”插入一個包含“男”、“女”兩個系列的柱形圖。
3.輸入VBA代碼。按Alt+F11,打開VBA編輯器,在代碼窗口中粘貼下列代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$T$14" Then
Dim RngStr As String
Select Case Target.Value
Case "性別"
RngStr = "b3:b11,c3:d11"
Case "年齡"
RngStr = "b3:b11,e3:i11"
Case "學(xué)歷"
RngStr = "b3:b11,j3:n11"
Case "職稱"
RngStr = "b3:b11,o3:s11"
End Select
ChartObjects("圖表 1").Chart.SetSourceData Source:=Range(RngStr)
End If
End Sub
說明:改變T14單元格中的內(nèi)容時,圖表的數(shù)據(jù)區(qū)域隨之改變。本例中的圖表名稱為“圖表 1”,需根據(jù)實際進行更改。查看圖表名稱的方法是:
Excel 2003:按住Ctrl鍵單擊圖表,在名稱框中即可看到所選圖表的名稱。
Excel 2007/2010:選擇圖表,在“圖表工具-布局”選項卡的“屬性”組中即可看到圖表名稱。
關(guān)閉VBA編輯器,返回Excel工作表界面,選擇T14單元格中的不同系列即可在圖表顯示相應(yīng)類別的數(shù)據(jù)。