分享

根据图表反推数据的逆天操作

 EXCEL分享 2020-11-13


 前言

假设有这样一个数据表

我们很容易生成一张柱状图,如下:

但这是别人做的,发给你时,为了不让你看到原始数据,或不让你随便修改,所以只发给你了一张柱状图,没有原始数据.

当你那天想修改时,却忘记了是谁做的,怎么办?

 办法总是有的

好歹,他没有发给你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不可怕,怕的是你不会也不想学!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多