2015-02-03 2 views
1

Excel/PowerPoint에서 차트를 얻었습니다. Excel에서 자동으로 시리즈를 만든다 (이 차트는하지 VBA로 만든) 그래서 나는 처음부터이 refference을하지 않기 때문에이 차트에서 나는ActiveChart.SeriesCollection (i) .Points (j)/VBA/Excel/PowerPoint에서 값의 소스 셀 주소 반환 또는 반환

ActiveChart.SeriesCollection(i).Points(y)

에서 모든 데이터 포인트 값의 소스 셀 주소를 좀하고 싶습니다 (데이터 시리즈를 직접 정의하지 않음). 정확히 반대 방향으로 만드는 방법을 알고 있습니다. 정확한 셀에서 SeriesCollection.Point를 만드는 방법은 이미 알고 있지만 기성 차트에 사용하고 싶습니다. 따라서 VBA에서 처음부터 차트를 다시 정의하고 싶지는 않습니다.

도움 주셔서 감사합니다.

답변

0

이것은 Excel의 액티브 시트에 배치 된 차트에 대한 간단한 해결책입니다. 코드의 주석에 설명 된 몇 가지 가정과 팁이 있습니다.

Sub GetSourceCellsAddress() 

'define chart first... 
Dim CH As Chart 
Set CH = ActiveSheet.ChartObjects(1).Chart 

'...and its first series (which is line type) 
Dim SC As Series 
Set SC = CH.SeriesCollection(1) 

'what we need is a series formula where you find reference to the range 
Dim strFormula As String 
    strFormula = SC.Formula 
    'test here: 
    Debug.Print strFormula 'result: =SERIES(Sheet1!$D$3,,Sheet1!$D$4:$D$8,1) 

'but in fact we need the range with cell values, retrieve it from the formula 
Dim strRangeFromFormula As String 
    strRangeFromFormula = Mid(strFormula, _ 
         InStrRev(strFormula, "!") + 1, _ 
         InStrRev(strFormula, ",") - InStrRev(strFormula, "!") - 1) 
    'test here 
    Debug.Print strRangeFromFormula 'result: $D$4:$D$8 

'in fact our point PT is a range type, so, iterate through cells 
Dim rngPT As Range 
For Each rngPT In Range(strRangeFromFormula) 
    Debug.Print rngPT.Address 'results >>$D$4, $D$5, $D$6, $D$7, .... 
Next rngPT 

End Sub 
+0

감사합니다. Kaz! 그것은 마지막 부분 이외의 화려한 작동합니다 '희미한 rngPT 각 rngPT에서 범위 (strRangeFromFormula)에 대한 범위 으로 을 Debug.Print rngPT.Address 다음 rngPT'내가 컴파일 오류 '오류가 발생했습니다 : 사용자 deifned 유형을 정의되지 않음 ' –

+0

정확히 어떤 줄? 앞에서 말했듯이 이것은 Excel 용입니다. PowerPoint에서 실행하면 추가 작업이 필요합니다. –

+0

예, PowerPoint에 있습니다 ... –