Sub chartChangeDataSource() Dim rngRef As Range Dim rngData As Range Dim objEach As Object
'### 현재 시트의 오브젝트를 순환하면서.. For Each objEach In ActiveSheet.Shapes '### 해당 오브젝트가 차트라면.. If objEach.HasChart = msoTrue Then '### 해당 차트 위치의 셀을 기준점(rngRef)로 지정 Set rngRef = objEach.TopLeftCell '### 기준점을 기준으로 왼쪽 4번째부터 2번째까지를 셀영역 설정 Set rngData = Range(rngRef.Offset(0, -2), rngRef.Offset(0, -4)) '### 설정된 셀영역을 차트의 데이터 영역으로 설정 & 차트를 열기준으로 변경 objEach.Chart.SetSourceData Source:=rngData, PlotBy:=xlColumns End If Next objEach
아.. 괜찮습니다. ^_^;;
다음에 질문하실때 참고하시라고 적은 겁니다. 처음엔 다들 그래요.. ㅎㅎ
차트를 "서식 파일로 저장"하신 다음, 불러오는 방법은..
이 경우에는 적합하지 않은 것 같습니다.
차트를 한개 이쁘게 만드신 다음,
차트 선택 후 Ctrl+C로 복사하신 다음,
다른 데이터가 있는 셀 옆에 붙여넣기 하시면 동일한 디자인의 차트가 생깁니다.
이때 문제는 데이터 원본 데이터를 하나씩 변경해줘야한다는 건데요..
이럴때 필요한게 바로.. VBA입니다. ㅎㅎ
첨부파일을 다운 받으시고, "차트의 데이터 영역 일괄 변경"이라는 명령 단추를 눌러보세요..
각 차트의 왼쪽위셀(즉, 차트가 위치한 셀)을 기준으로 왼쪽으로 2번째부터 4번째셀 범위를 데이터 영역으로 설정해줍니다.
다운받기 : abyul.com_20110824_Chart-3.xlsm
VBA코드는 아래와 같으니,
비슷한 유형의 업무에 참고하시기 바랍니다.
감사합니다.
Sub chartChangeDataSource()
Dim rngRef As Range
Dim rngData As Range
Dim objEach As Object
'### 현재 시트의 오브젝트를 순환하면서..
For Each objEach In ActiveSheet.Shapes
'### 해당 오브젝트가 차트라면..
If objEach.HasChart = msoTrue Then
'### 해당 차트 위치의 셀을 기준점(rngRef)로 지정
Set rngRef = objEach.TopLeftCell
'### 기준점을 기준으로 왼쪽 4번째부터 2번째까지를 셀영역 설정
Set rngData = Range(rngRef.Offset(0, -2), rngRef.Offset(0, -4))
'### 설정된 셀영역을 차트의 데이터 영역으로 설정 & 차트를 열기준으로 변경
objEach.Chart.SetSourceData Source:=rngData, PlotBy:=xlColumns
End If
Next objEach
End Sub
미리보기..