前言假设有这样一个数据表 我们很容易生成一张柱状图,如下: 但这是别人做的,发给你时,为了不让你看到原始数据,或不让你随便修改,所以只发给你了一张柱状图,没有原始数据. 当你那天想修改时,却忘记了是谁做的,怎么办? 办法总是有的好歹,他没有发给你PDF版,但只要是EXCEL可编辑版,就会有办法,因为图表是根据数据生成的,没有数据就不会有图表.有图表就说明数据是保存在什么地方的. 不信的话,你可以将鼠标放在任意一个数据点上,就会自动显示这个数据点的系列名称,横坐标和纵坐标的值 当然你也可以直接显示数据表,如下图所示 看到这里是不是明白了,数据是在的,只是怎么把它取出来而已. 头脑灵活的同学会可是想办法把它拷出来,但是好像无处下手啊 手脚灵活的同学已经抄了一半了,如果多了怎么办? 多了当然用VBA啊,这还用问吗? 进入正题CRTL+F11打开VBA编辑器,插入模块 写入下列代码:单引号后面为注释 Sub 根据图表还原成数据() ActiveSheet.ChartObjects("图表1").Activate '生成日期列 N = ActiveChart.SeriesCollection(1).Points.Count ActiveChart.SeriesCollection(1).ApplyDataLabelsType:=xlDataLabelsShowLabel For I = 1 To N Cells(I + 1, 1) =ActiveChart.SeriesCollection(1).Points(I).DataLabel.Text Next '生成专业表头 For m = 1 To 4 With ActiveChart.SeriesCollection(m).DataLabels .ShowSeriesName = True .ShowValue = False .ShowCategoryName = False End With Cells(1, m + 1) =ActiveChart.SeriesCollection(m).Points(1).DataLabel.Text Next '生成数据 For m = 1 To 4 ActiveChart.SeriesCollection(m).ApplyDataLabelsType:=xlDataLabelsShowValue N =ActiveChart.SeriesCollection(m).Points.Count For I = 1 To N Cells(I + 1, m + 1) =ActiveChart.SeriesCollection(m).Points(I).DataLabel.Text Next Next End Sub 运行程序,数据赫然在列,是不是很神奇! 总之VBA不可怕,怕的是你不会也不想学! |
|