• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

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

      【關(guān)鍵詞】Excel VBA 自動創(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)狀、成因及控制對策研究》項(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ù)的逐年、逐季、逐月的變化折線圖。對于這種相同數(shù)據(jù)結(jié)構(gòu)的大量圖表繪制,用“圖表向?qū)А眮硪粡垙埨L制顯然是令人生畏的,而使用Excel VBA對Excel的作圖功能進(jìn)行二次開發(fā),將可大大提高工作效率。

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

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

      2.1 Add()方法

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

      Set mychart = charts.Add

      表示在活動圖表之前插入一個(gè)新的圖表,并將返回值保存在mychart對象變量中,以便需要時(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對象傳說遞給該參數(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對象的集合對象。Series對象表示圖表中的一個(gè)系列。系列是一個(gè)圖表中用于比較的一組數(shù)據(jù),SeriesCollection即是保存這些系列的集合。系列在不同的圖表中有不同的含義。在折線圖中,每條線即是一個(gè)系列,雷達(dá)圖中每個(gè)區(qū)域即是一個(gè)系列,餅圖只有一個(gè)系列。

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

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

      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對象的Axes()方法返回圖表上單個(gè)坐標(biāo)軸或坐標(biāo)軸集合的某個(gè)對象。該方法的語法如下:

      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 屬性值的對應(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è)單元格的行號、列號和總列數(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) & "十年變化趨勢" ‘指定圖表標(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)自動繪制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è)單元格中
      再多也不亂 制作按需顯示的折線圖
      電腦愛好者(2018年2期)2018-01-31 19:07:26
      美化Excel折線圖表
      電腦愛好者(2017年1期)2017-04-14 10:16:22
      抚松县| 大同县| 宜黄县| 敦煌市| 大田县| 定襄县| 扎鲁特旗| 胶南市| 阿克苏市| 弥渡县| 左权县| 普兰县| 大英县| 新巴尔虎左旗| 新源县| 阳原县| 武功县| 九龙城区| 当阳市| 河东区| 潮州市| 湄潭县| 利川市| 柘荣县| 河源市| 柯坪县| 马龙县| 新田县| 普兰店市| 洮南市| 贵阳市| 阳曲县| 环江| 山东| 双峰县| 成安县| 临洮县| 绥化市| 南通市| 买车| 长春市|