excel中可以创建内嵌在工作表中的图表也可以创建独立的图表工作表。
在vba中有多个对象与图表有关。
Charts对象表示的是所有的独立的图表工作表所组成的图表集合,它不包含内嵌在工作表中的图表。
ChartObjects对象表示的所有内嵌在工作表中的图表所组成的集合。
Chart对象则是对图表的各种元素进行操作的对象,其中ChartObject对象可以看做是Chart对象的容器。
用vba创建内嵌图表的一般步骤如下:
- 用ChartObjects.Add 方法创建一个空白的图表。
- 用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
发表评论