Sub vbax_52434_ChartSeriesSourceData()
Dim wbNamedRanges()
Dim cht As ChartObject
Dim SeriesFormula As String, SeriesAddress As String, SeriesRange As String
Dim i As Long
With ThisWorkbook
Select Case .Names.Count
Case Is = 0
MsgBox "There are no named ranges in this workbook!"
Exit Sub
Case Else
ReDim wbNamedRanges(1 To .Names.Count)
For i = 1 To .Names.Count
wbNamedRanges(i) = .Names(i).Name
Next i
End Select
End With
Set cht = Worksheets(1).ChartObjects(1) 'sample chart: named range
'Set cht = Worksheets(1).ChartObjects(2) 'sample chart: not named range
For i = 1 To cht.Chart.SeriesCollection.Count
SeriesFormula = cht.Chart.SeriesCollection(i).Formula
SeriesAddress = Split(SeriesFormula, ",")(2) '3rd bit in series formula
SeriesRange = Mid(SeriesAddress, InStr(SeriesAddress, "!") + 1) 'remove wb/ws referenece
If UBound(Filter(wbNamedRanges, SeriesRange)) > -1 Then
MsgBox "Chart: " & cht.Name & " / Series: " & cht.Chart.SeriesCollection(i).Name & " / Source Data: " & Filter(wbNamedRanges, SeriesRange)(0) & " / Named Range"
Else
MsgBox "Chart: " & cht.Name & " / Series: " & cht.Chart.SeriesCollection(i).Name & " / Source Data: " & SeriesRange & " / Not Named Range!"
End If
Next
End Sub