如何在excel中用vba创建各种图表?

excel中可以创建内嵌在工作表中的图表也可以创建独立的图表工作表。

在vba中有多个对象与图表有关。

Charts对象表示的是所有的独立的图表工作表所组成的图表集合,它不包含内嵌在工作表中的图表。

ChartObjects对象表示的所有内嵌在工作表中的图表所组成的集合。

Chart对象则是对图表的各种元素进行操作的对象,其中ChartObject对象可以看做是Chart对象的容器。

用vba创建内嵌图表的一般步骤如下:

  1. ChartObjects.Add 方法创建一个空白的图表。
  2. Chart.ChartWizard 方法设置图表的各种属性,如数据源、图表类型、是否显示标题、图例等。

其中图表的类型常量,可以参考以下链接;

图表的类型常量

以下是在excel工作表中创建内嵌的图表的代码:

Sub QQ1722187970()
    '折线图
    Const xlLine = 4
    '柱形图
    Const xlColumnClustered = 51
    'XY散点图
    Const xlXYScatter = -4169
    '带线的散点图
    Const xlXYScatterLines = 74
    '创建内嵌的图表
    Dim oChart As Chart
    Dim oChartObject As ChartObject
    Dim oWK As Worksheet
    Dim oSeries As Series
    Dim oCT As ChartTitle
    '图表标题文本对象
    Dim sCT As String
    '数据标签
    Dim oDL As DataLabel
    '数据标签的集合
    Dim oDlS As DataLabels
    '数据点对象
    Dim oP As Point
    '数据点集合对象
    Dim oPS As Points
    '坐标轴对象
    Dim oA As Axis
    '坐标轴集合对象
    Dim oAS As Axes
    '数据标识对象
    Dim oTL As TickLabels
    '要放置新建图表的工作表或者图表所在的工作表
    Set oWK = Excel.Worksheets(5)
    '图表数据源所在的单元格区域
    Dim oRng As Range
    With oWK
        Set oRng = .Range("a1").CurrentRegion
        iRow = .Range("a65536").End(xlUp).Row
        iCol = .Cells(2, 256).End(xlToLeft).Column
    End With
    '先批量删除之前的图表
    oWK.ChartObjects.Delete
    '再创建一个空白的图表壳
    Set oChartObject = oWK.ChartObjects.Add(100, 0, 500, 300)
    Set oChart = oChartObject.Chart
    '对空白的图表进行设置
    With oChart
        .ChartWizard Source:=oRng, Gallery:=xlColumnClustered, Format:=1, PlotBy:=xlColumns, HasLegend:=True, _
        Title:="这是一个散点图", CategoryTitle:="X", ValueTitle:="Y"
        '删除原先的所有图表系列
        For Each oSeries In .SeriesCollection
            oSeries.Delete
        Next
        '新建一个图表系列
        Set oSeries = .SeriesCollection.NewSeries
        With oSeries
            '系列的名称
            .Name = oWK.Cells(1, "b")
            .Values = oWK.Range("b2:b" & iRow)
            .XValues = oWK.Range("a2:a" & iRow)
            '显示数据标签
            .HasDataLabels = True
            '遍历数据点
            For i = 1 To .Points.Count
                Set oP = .Points(i)
                With oP
                    Debug.Print .Name
                End With
            Next i
        End With
        
         '再新建一个图表系列
        Set oSeries = .SeriesCollection.NewSeries
        With oSeries
            '系列的名称
            .Name = oWK.Cells(1, "d")
            .Values = oWK.Range("d2:d" & iRow)
            .XValues = oWK.Range("a2:a" & iRow)
            '设置系列为另一个图表类型
            .ChartType = xlLine
        End With
        
        '将无数据的点用线连接
        .DisplayBlanksAs = xlInterpolated
        
        '显示数据表
        .HasDataTable = True
        
        '显示标题
        .HasTitle = True
        '设置图表的标题
        Set oCT = .ChartTitle
        sCT = "这个是新的图表标题"
        With oCT
            .Text = sCT
        End With
        
          '设置纵坐标
        Set oA = .Axes(xlValue, xlPrimary)
        With oA
            '关闭网格线
            .HasMajorGridlines = False
            .HasMinorGridlines = False
            '坐标轴的大单位
            .MajorUnit = 10
            '坐标轴的小单位
            .MinorUnit = 1
            '最小刻度值
            .MinimumScale = 0
            '最大刻度值
            .MaximumScale = 100
            '横坐标交叉于纵坐标的具体刻度值
            .CrossesAt = 1
            Set oTL = .TickLabels
            '设置坐标轴的数值标记的数值格式
            With oTL
                .NumberFormat = "0"
            End With
        End With
        
        '设置横坐标
        Set oA = .Axes(xlCategory, xlPrimary)
        With oA
             '关闭网格线
            .HasMajorGridlines = False
            .HasMinorGridlines = False
            Set oTL = .TickLabels
            '设置坐标轴的数值标记的数值格式
            With oTL
                .NumberFormat = "0"
            End With
        End With
        
    End With
End Sub

以下是在excel工作表中创建独立的图表的代码:

Sub QQ1722187970()
    '创建独立的图表
    Dim oChart As Chart
    Dim oWK As Worksheet
    Set oWK = Excel.Worksheets(1)
    Dim oChartObject As ChartObject
    '先创建一个空白的图形
    Set oChart = Excel.Charts.Add
    '对空白的图形进行设置
    With oChart
        .ChartWizard Source:=oWK.Range("a1:b13"), gallery:=xlColumnClustered, PlotBy:=xlColumns, HasLegend:=False, _
        Title:="这是一个柱形图", CategoryTitle:="月份", ValueTitle:="销售额"
           '将无数据的点用线连接
        .DisplayBlanksAs = xlInterpolated
        '显示数据表
        .HasDataTable = True
    End With
End Sub

由于excel可以支持的图表类型众多,用上述代码创建的图表很多都无法真实地反映数据情况。

接下来,介绍用vba创建各种常见的图表:

1.用vba创建XY散点图:

Sub QQ1722187970()
    '创建内嵌的图表
    Dim oChart As Chart
    Dim oWK As Worksheet
    Dim oSeries As Series
    Dim oChartObject As ChartObject
    Set oWK = Excel.Worksheets(1)
    '先创建一个空白的图形壳
    Set oChartObject = oWK.ChartObjects.Add(100, 0, 500, 300)
    Set oChart = oChartObject.Chart
    '对空白的图形进行设置
    With oChart
        '默认创建的是两个系列的散点图
        .ChartWizard Source:=oWK.Range("a1:b9"), gallery:=xlXYScatterLines, PlotBy:=xlColumns, HasLegend:=True, _
        Title:="这是一个散点图", CategoryTitle:="X", ValueTitle:="Y"
        For Each oSeries In .SeriesCollection
            oSeries.Delete
        Next
        Set oSeries = .SeriesCollection.NewSeries
        With oSeries
            .Name = "X-Y"
            .Values = oWK.Range("b2:b9")
            .XValues = oWK.Range("a2:a9")
        End With
    End With
End Sub

 

       

发表评论