前言假设有这样一个数据表
我们很容易生成一张柱状图,如下:
但这是别人做的,发给你时,为了不让你看到原始数据,或不让你随便修改,所以只发给你了一张柱状图,没有原始数据.
当你那天想修改时,却忘记了是谁做的,怎么办?
办法总是有的好歹,他没有发给你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不可怕,怕的是你不会也不想学!