2016-03-07 467 views
0

我一直在寻找从Excel图表中提取数据的帮助。具体而言,我需要从图表上所有点拉系列名称,XY。我从Excel的基本代码开始,但它只给我X值。VBA从Excel中提取系列名称,X和Y值图表

Sub GetChartValues() 
Dim NumberOfRows As Integer 
Dim X As Object 
Counter = 2 

' Calculate the number of rows of data. 
NumberOfRows = UBound(ActiveChart.SeriesCollection(1).Values) 

Worksheets("ChartData").Cells(1, 1) = "X Values" 

' Write x-axis values to worksheet. 
With Worksheets("ChartData") 
    .Range(.Cells(2, 1), _ 
    .Cells(NumberOfRows + 1, 1)) = _ 
    Application.Transpose(ActiveChart.SeriesCollection(1).XValues) 
End With 

' Loop through all series in the chart and write their values to 
' the worksheet. 
For Each X In ActiveChart.SeriesCollection 
    Worksheets("ChartData").Cells(1, Counter) = X.Name 

    With Worksheets("ChartData") 
    .Range(.Cells(2, Counter), _ 
    .Cells(NumberOfRows + 1, Counter)) = _ 
    Application.Transpose(X.Values) 
    End With 

    Counter = Counter + 1 
Next 

End Sub 

我需要弄清楚如何使这项工作,所以我可以创建给定的值的表。我还附上了我正在处理的图表的图像。任何帮助真的会很感激!

Chart Picture

Station Timetable Picture

回答

1

给这个一去,请确保您的图表选择运行的代码之前:

Sub Getting_data() 

    Dim iSrs As Long 
    Dim cht As Chart 
    Dim srs As Series 
    Dim wkst As Worksheet 

    If ActiveChart Is Nothing Then Exit Sub 

    Set cht = ActiveChart 
    Set wkst = Worksheets.Add 
    For iSrs = 1 To cht.SeriesCollection.Count 
     Set srs = cht.SeriesCollection(iSrs) 
     On Error Resume Next 
     wkst.Cells(1, 2 * iSrs).value = srs.Name 
     wkst.Cells(2, 2 * iSrs - 1).Resize(srs.Points.Count).value = _ 
      WorksheetFunction.Transpose(srs.XValues) 
     wkst.Cells(2, 2 * iSrs).Resize(srs.Points.Count).value = _ 
      WorksheetFunction.Transpose(srs.Values) 
    Next 

End Sub 
+0

太感谢你了!你认为有一种方法可以自动化创建的表格,并将它们更改为火车和车站时间表,我张贴了一张照片?基本上,系列名称是“列车识别”,Y值对应于KM中的车站位置,每个车站都有一个特定的位置。 X值表示列车在特定车站的什么时间。 – willbacker45

+0

如果没有看到运行代码后生成的数据,则很难提供建议,但这听起来完全可能。取决于所需的数据操作级别,它可以用excel公式完成; IF,VLOOKUP ....如果操作更复杂,你可能最有可能使用VBA,但这是明智的,以启动一个不同的Sub到上面这个:) :) – IIJHFII

+0

好的,谢谢!我会尝试现在的内置函数,看看我能否按照我需要的方式工作。 – willbacker45