Excel工作表最终有一个目的,那就是统计各类数据,以给出一些量化指标,以此来做出一些关键性决策。 大多时候,数据显示,并不是十分直观,而图表就显示十分醒目了。所以,图表是对各类数据可视化的一个表现形式。 本节介绍一下,关于数据图形化的一些操作方法和思路。 我们利用一个真实示例进行演示,以达到最佳的学习效果。 下图为某表的统计结果,以窗体形式显示出来,这并不是主要目的。 最终的结果是将这些数据生成图形。 如下图所示,就是生成图表的一个内容。 根据不同的统计方法,生成不同的图表,以达到一个明显的柱状趋势,当然了,也可以修改某些参数来实现图形的变化。 重点是如何实现这个生成过程。 我人利用了VBA代码来进行实现。 其实现过程看如下代码: For Each pObj In P.Shapes If pObj.Type = 3 Then Select Case pObj.Name Case pArr(0) ir = 14 pObj.Chart.SetSourceData Source:=S.Range("B2:B14") pObj.Chart.ChartTitle.Text = S.Range("A2").Value Case pArr(1) ir = S.Range("E65535").End(xlUp).Row If ir <= 2 Then ir = 3 pObj.Chart.SetSourceData Source:=S.Range("F2:F" & ir) '设置数据区域 With pObj.Chart .HasTitle = True .ChartTitle.Text = S.Range("E2").Value pObj.Chart.Axes(xlValue).CategoryNames = S.Range("E3:E" & ir) '设置坐标轴名称 End With Case pArr(2) ir = S.Range("M65535").End(xlUp).Row If ir <= 2 Then ir = 3 pObj.Chart.SetSourceData Source:=S.Range("N2:N" & ir) With pObj.Chart .HasTitle = True .ChartTitle.Text = S.Range("M2").Value ' pObj.Chart.Axes(xlSeriesAxis).CategoryNames = S.Range("M3:M" & ir) End With Case pArr(3) ir = S.Range("I65535").End(xlUp).Row If ir <= 2 Then ir = 3 pObj.Chart.SetSourceData Source:=S.Range("J2:J" & ir) With pObj.Chart .HasTitle = True .ChartTitle.Text = S.Range("I2").Value pObj.Chart.Axes(xlValue).CategoryNames = S.Range("I3:I" & ir) End With End Select '导出图片 pObj.Chart.Export Filename:=ThisWorkbook.Path & "\" & pObj.Name & ".jpg", filtername:="jpg" End If Next pObj
首先对工作表进行遍历,找到所有Shape对象,筛选出图表对象,然后再对图表进行一些设置。 本示例中的图表要手动制作完成,具体方法省略。 重点代码: pObj.Chart.SetSourceData Source:=S.Range("F2:F" & ir) '设置数据区域 .ChartTitle.Text = S.Range("M2").Value'设置图表标题名称 pObj.Chart.Axes(xlSeriesAxis).CategoryNames = S.Range("M3:M" & ir)'设置X坐标轴名称 '导出图片 pObj.Chart.Export Filename:=ThisWorkbook.Path & "\" & pObj.Name & ".jpg" _ , filtername:="jpg"
上述代码实现对图表进行设置之后,然后导出为一个JPG文件,也就是导出一张图片,再将图片引入窗体Image控件中。 For Each xP In pArr Set pObj = Me.Controls.Add("Forms.Image.1", xP)'新建图片控件 With pObj .Width = 450 .Height = 220 If pi < 2 Then .Left = pi * (.Width + 20) + 50 .Top = Me.Label1.Top + Me.Label1.Height + 10 Else .Left = (pi - 2) * (.Width + 20) + 50 .Top = Me.Label1.Top + Me.Label1.Height + .Height + 20 End If '设置图片 .Picture = LoadPicture(ThisWorkbook.Path & "\" & xP & ".jpg") .PictureSizeMode = 1 End With pi = pi + 1 Next xP
上图为窗体显示结果,这个思路就是由图表生成图片,然后把图片导入窗体中。 VBA可实现的功能实际上有很多,只是需要投入一些精力来进行学习和实践。
|