国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VBA實(shí)現(xiàn)自動(dòng)創(chuàng)建Excel圖表

2017-04-14 18:37劉美麗
電子技術(shù)與軟件工程 2017年6期
關(guān)鍵詞:折線圖

Excel是一個(gè)集數(shù)據(jù)處理和圖表繪制于一身的優(yōu)秀軟件。根據(jù)工作表的數(shù)據(jù),利用“圖表向?qū)А笨梢苑奖憧旖莸乩L制圖表。但是當(dāng)需繪制的圖表數(shù)量較多時(shí),“圖表向?qū)А钡睦L圖方式就不那么“可愛”了。本文通過對(duì)Excel的二次開發(fā),用Excel VBA編程實(shí)現(xiàn)了折線圖的自動(dòng)繪制。對(duì)本程序稍作修改,可用于繪制其它類型的圖表。

【關(guān)鍵詞】Excel VBA 自動(dòng)創(chuàng)建圖表 折線圖

1 引言

Excel是一個(gè)集數(shù)據(jù)處理和圖表繪制于一身的優(yōu)秀軟件。運(yùn)用Excel的“圖表向?qū)А眮砝L制圖表也不算麻煩。但是,如果要繪制的圖表數(shù)量很多,用“圖表向?qū)А钡睦L圖方式來繪制圖表,就不是一件令人愉快的事了。

本校老師在參與《國家重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃——973計(jì)劃子課題——湖南省酸雨污染現(xiàn)狀、成因及控制對(duì)策研究》項(xiàng)目的數(shù)據(jù)處理工作中,需要繪制湖南省十四個(gè)地市及全省pH均值和九種要求的離子(SO42-、NO3-、NH4+、Ca2+、F-、Cl-、Mg2+、Na+、K+)的離子濃度均值及[SO42-]/[NO3-]、[SO42-]/[ΣA-]、[NO3-]/[ΣA-]、([SO42-]+[NO3-])/[ΣA-] 、[Ca2+]/[ NH4+]、[[Ca2+]/[ΣB+]、[ NH4+]/[ΣB+]、[ΣA-] /[ΣB+]十年數(shù)據(jù)的逐年、逐季、逐月的變化折線圖。對(duì)于這種相同數(shù)據(jù)結(jié)構(gòu)的大量圖表繪制,用“圖表向?qū)А眮硪粡垙埨L制顯然是令人生畏的,而使用Excel VBA對(duì)Excel的作圖功能進(jìn)行二次開發(fā),將可大大提高工作效率。

2 Excel VBA創(chuàng)建圖表常用的方法

Excel VBA是利用Chart對(duì)象來創(chuàng)建圖表的。Chart對(duì)象和Charts對(duì)象集最常用的方法和屬性有:

2.1 Add()方法

Charts對(duì)象集的 Add()方法用于向圖表集合中添加新的圖表對(duì)象。例:

Set mychart = charts.Add

表示在活動(dòng)圖表之前插入一個(gè)新的圖表,并將返回值保存在mychart對(duì)象變量中,以便需要時(shí)通過該變量來訪問該圖表。

2.2 Location()方法

Add()方法創(chuàng)建的圖表只存在于內(nèi)存,要在工作表中看到新創(chuàng)建的圖表,必須指定圖表的顯示位置。Location()方法即是指定新創(chuàng)建的圖表的插入位置的。其語法如下:

Chart.Location(Where,Name)

Where用于指定圖表的插入位置:xlLocationAsNewSheet指定新圖表作為新工作表插入工作簿中,此時(shí)Name為新工作表的名稱(可省略);xlLocationAsObject指定新創(chuàng)建的圖表作為圖像元素插入到工作表中,此時(shí)Name為要插入的工作表的名稱。

2.3 SetSourceData()方法

SetSourceData()方法用來指定作圖的源數(shù)據(jù)區(qū)域。其語法為:

Chrat.SetSourceData(Source,PlotBy)

其中,source用于指定數(shù)據(jù)源,可將Range對(duì)象傳說遞給該參數(shù)。PlotBy用于指定數(shù)據(jù)繪制方法,如果傳遞系統(tǒng)常量xlColumns則表示數(shù)據(jù)在列上生成(系列產(chǎn)生在列);如果傳遞系統(tǒng)常量xLRows,則表示數(shù)據(jù)在行上生成(系列產(chǎn)生在行)。

SetSourceData()方法雖然能很方便地指定數(shù)據(jù)源,但該方法不可以接受分散的單元格區(qū)域作為圖表的數(shù)據(jù)源。當(dāng)需要靈活地操縱圖表的數(shù)據(jù)源時(shí),需使用SeriesCollection()方法。

2.4 SeriesCollection()方法

SeriesCollection是Series對(duì)象的集合對(duì)象。Series對(duì)象表示圖表中的一個(gè)系列。系列是一個(gè)圖表中用于比較的一組數(shù)據(jù),SeriesCollection即是保存這些系列的集合。系列在不同的圖表中有不同的含義。在折線圖中,每條線即是一個(gè)系列,雷達(dá)圖中每個(gè)區(qū)域即是一個(gè)系列,餅圖只有一個(gè)系列。

Series對(duì)象中常用的屬性有Name、Values和XValues。其中Name屬性表示該系列的名稱,會(huì)在圖表的圖例區(qū)域顯示出來;Values屬性表示該系列的實(shí)際值,用于確定圖表中圖形位置的形狀;XValues屬性表示該系列的橫坐標(biāo)值,傳統(tǒng)在圖表的橫坐標(biāo)上顯示出來。

Values和XValues屬性必須用Range對(duì)象來指定,不可指定為變量的值。如:

Chrat.SeriesCollection(1).values=Rang(“B1:B5”)

Chrat.SeriesCollection(1).Xvalues=Rang(“A1:A5”)

SeriesCollection()方法可以自由地控制圖表中所有的顯示數(shù)據(jù),通過它,程序可以自由地操縱圖表抽需的每一個(gè)數(shù)據(jù),因此比SetSourceData()方法更為靈活。

2.5 Axes()方法

Chart對(duì)象的Axes()方法返回圖表上單個(gè)坐標(biāo)軸或坐標(biāo)軸集合的某個(gè)對(duì)象。該方法的語法如下:

Chart.Axes(Type,AxisGroup)

Type參數(shù)用于指定要返回的坐標(biāo)軸,可以是以下系統(tǒng)常量之一:數(shù)值軸—xlValue、分類軸—xlCategory或用于三維圖表,表示縱深軸向的xlSeriesAxis。

通過Axes()方法,可以控制圖表上坐標(biāo)軸的相關(guān)屬性,如坐標(biāo)軸顯示的標(biāo)題、坐標(biāo)軸的刻度等。

2.6 ChartType屬性

ChartType屬性用于指定圖表的類型。常用圖表類型和ChartType 屬性值的對(duì)應(yīng)關(guān)系如表1。

3 作圖數(shù)據(jù)

將計(jì)算結(jié)果轉(zhuǎn)換成易于作圖的形式,如圖1。圖中每一行數(shù)據(jù)將繪制一張圖。

4 程序?qū)嵗白⒔?/p>

Sub 繪制折線圖()

Dim mycell As Range

Dim isect As Range

Dim i As Integer

Dim m As Integer

Dim n As Integer

On Error GoTo esc ‘錯(cuò)誤陷井

For r = 1 To 270 ‘第2行至第271行為需作圖的數(shù)據(jù),每一行數(shù)據(jù)需作一張圖

Worksheets("年均值").Activate

Set mycell = Worksheets("年均值").Range(Cells(r + 1, 1), Cells(r + 1, 12)) ‘指定作圖數(shù)據(jù)源

Set isect = Application.Intersect(Worksheets("年均值").Range("c2: l271"), mycell)

‘計(jì)算數(shù)據(jù)源的首個(gè)單元格的行號(hào)、列號(hào)和總列數(shù)

i = isect.Row

m = isect.Column

n = m + isect.Columns.Count – 1

‘查尋工作簿中是否存在與欲建圖表同名的圖表,若無則新建一個(gè)圖表,若有則激活該圖表

If Not (find(Worksheets("年均值").Cells(i, 1) & Worksheets("年均值").Cells(i, 2))) Then

Charts.Add

ActiveChart.name = Worksheets("年均值").Cells(i, 1) & Worksheets("年均值").Cells(i, 2) '圖表名稱

Else

Charts(Worksheets("年均值").Cells(i, 1) & Worksheets("年均值").Cells(i, 2)).Activate

End If

ActiveChart.ChartType = xlLineMarkers ‘指定圖表類型為數(shù)據(jù)點(diǎn)折線圖

ActiveChart.SetSourceData Source:=mycell, PlotBy:=xlRows ‘指定作圖的數(shù)據(jù)源,系列產(chǎn)生在行

With Worksheets("年均值")

For Each one In ActiveChart.SeriesCollection

one.XValues = .Range(.Cells(1, m), .Cells(1, n)) '分類名稱

one.name = .Cells(i, 1) '圖例名稱

i = i + 1

Next one

End With

ActiveChart.Location Where:=xlLocationAsNewSheet ‘創(chuàng)建的新圖表作為新工作表插入到工作簿中

With ActiveChart

.HasTitle = True ‘指定要顯示圖表標(biāo)題

.ChartTitle.Characters.Text = Worksheets("年均值").Cells(i - 1, 1) & Worksheets("年均值").Cells(i - 1, 2) & "十年變化趨勢(shì)" ‘指定圖表標(biāo)題的文字

.Axes(xlCategory, xlPrimary).HasTitle = True ‘指定顯示分類軸標(biāo)題

.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "年份" ‘指定分類軸標(biāo)題的文字

.Axes(xlValue, xlPrimary).HasTitle = True ‘指定顯示數(shù)值軸標(biāo)題

.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "離子濃度(μeq/L)" ‘指定數(shù)值軸標(biāo)題的文字

End With

With ActiveChart.Axes(xlCategory)

.HasMajorGridlines = True ‘指定顯示分類軸的主網(wǎng)格線

.HasMinorGridlines = False ‘指定不顯示分類軸的次網(wǎng)格線

End With

With ActiveChart.Axes(xlValue)

.HasMajorGridlines = True ‘指定顯示數(shù)值軸的主網(wǎng)格線

.HasMinorGridlines = False ‘指定不顯示數(shù)值軸的次網(wǎng)格線

End With

Next r

esc:

Exit Sub

End Sub

‘查同名圖表的自定義函數(shù)

Function find(name As String) As Boolean

For Each one In Charts

If one.name = name Then

find = True

Exit Function

End If

Next one

find = False

End Function

5 圖表樣張

如圖2所示。

6 結(jié)論

所列程序能實(shí)現(xiàn)自動(dòng)繪制Excel折線圖,具有實(shí)用性。

程序的運(yùn)行,既可以在Excel的Visual Basic編輯器中運(yùn)行,也可以通過在菜單或工具欄建立相應(yīng)的運(yùn)行命令或按鈕來運(yùn)行,當(dāng)然也可建立一個(gè)窗體,通過命令按鈕來運(yùn)行。因?yàn)槌隽吮疚挠懻摰姆秶?,不再贅述?/p>

作者簡介

劉美麗,講師,研究方向?yàn)橛?jì)算機(jī)應(yīng)用。

作者單位

長沙環(huán)境保護(hù)職業(yè)技術(shù)學(xué)院 湖南省長沙市 410004

猜你喜歡
折線圖
Optimization Design of Miniature Air Quality Monitoring System Based on Multi-Sensor Fusion Technology
讓折線圖顯示在一個(gè)單元格中