2016-03-07 462 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